码迷,mamicode.com
首页 > 编程语言 > 详细

VBA取行列数,运行CMD,数组,VBA写文件相关

时间:2015-06-25 17:11:41      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

备忘用:

  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

 

VBA取行列数,运行CMD,数组,VBA写文件相关

标签:

原文地址:http://www.cnblogs.com/IDECIDETODOIT/p/4600253.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!