备忘用:
1、VBA取行列数:
例如要取第二行使用了多少列:Cells(2, Columns.Count).End(xlToLeft).Column:解释:主要是End方法,VBA中如下阐述:返回一个 Range 对象,该对象代表包含源区域的区域尾端的单元格。等同于按键 End+ 向上键、End+ 向下键、End+ 向左键或 End+ 向右键。Range 对象,只读。意思就是说取到选择区域的最后一个单元格。
如果你需要取到sheet页内使用到的最大行和列,可以如下使用: nRow = ActiveSheet.UsedRange.Rows.Count nCol = ActiveSheet.UsedRange.Columns.Count
2、VBA运行CMD:固定写法
Set objshell = CreateObject("wscript.shell")
‘ CMD需要在当前文件夹下执行
Dim path As String
path = ThisWorkbook.path
Set DosExec = objshell.Exec("cmd.exe /c " & "sqlldr " & strDBInfo & " control=" & path & "\result.ctl")
Set DosExec = Nothing
Set objshell = Nothing
此处添加path,是因为SQLLOADER在执行时需要找到此文件。
3、数组
整体来说VBA的数据很奇葩。 声明数组:Dim arr() as String,这个是一个无法一个一个赋值的数据,也可以声明定长的数据:Dim arr(1 To 3) as String,但是在程序中往往数组的大小是根据某一个值来确定的,但是却无法像如下声明:Dim arr(1 To intValue)(intValue为整数),你需要ReDim,才可以、ReDim strRtn(1 To usedNum)(建议不从1开始,从0开始,否则容易会造成混乱) 如果ReDim时,需要保留之前的值,请添加参数:Preserve。ReDim Preserve a(5) As String
并且方法如果返回值是一个数据,则应该这样:Public Function getTableData() As String()
4、VBA写文件相关
1)使用Scripting.FileSystemObject
a、简单的写入文件:以下的True参数表示:如果文件不存在,则新建,否则覆盖。如果为False,则只能新建,如果存在,则报错。
Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("c:\testfile.txt", True) a.WriteLine("This is a test.") a.Close set fs = Nothing set a = Nothing
b、简单的读(写)文件方法:使用File类 :有了Set fs = CreateObject("Scripting.FileSystemObject")类之后,可以通过fs.GetFile(FileName)来获取File对象
File对象可以得到文件的各种信息,以及文件的delete,copy,move方法。最常用的方法为:OpenAsTextStream
此方法可以写入也可以按照行来读取文件,很好用:
Sub TextStreamTest Const ForReading = 1, ForWriting = 2, ForAppending = 3 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs, f, ts, s Set fs = CreateObject("Scripting.FileSystemObject") fs.CreateTextFile "test1.txt" ‘创建一个文件 Set f = fs.GetFile("test1.txt") Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault) ts.Write "Hello World" ts.Close Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault) s = ts.ReadLine MsgBox s ts.Close End Sub
判断文件是否读取完成:
Do While Not ts.AtEndOfStream s = ts.ReadLineLoop
2)经典的Open 语句 参考:http://blog.sina.com.cn/s/blog_715070f20100w914.html
几个例子:
Write方法使用,其必须配合逗号","一起使用
Open "F:\test.txt" For Append As #1 ‘ 打开输出文件。 Write #1, "huo", tui, "chang" Write #1, 233234, Write #1, "huo", chang Write #1, "huo", Close #1 End Sub
Print方法的使用,与Write类似,但是不用配合逗号
print中,逗号会输出N个空格,并且替换掉换行,如果不是逗号结尾,则会换行。
Open "F:\test.txt" For Output As #1 ‘ 打开输出文件。 Print #1, "huo", "chang" Print #1, 233234 Print #1, "huo", "chang-chang-chang-changchangchangchangchang", Print #1, "huo", Close #1 End Sub
Line input方法:
Open "f:\test.txt" For Input As #1 Do While Not EOF(1) ‘ 循环至文件尾。 ‘MyChar = input(1, #1) ‘ 读入一个字符。 Line Input #1, s Debug.Print s ‘ 显示到立即窗口。
3)对于Workbooks.Open方法,用的不多,可以参考:http://www.cnblogs.com/top5/archive/2009/10/29/1591937.html