备忘用:
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
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 ' 显示到立即窗口。
Workbooks.Open方法,用的不多