备忘用:

  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方法,用的不多