在项目测试阶段,经常会要使用vba做些小工具,方便测试数据的导入导出。
下面是一些编写程序时使用的小技巧:
1. 用循环往sheet里写入多行数据
With Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Value = 要写入的值
.Resize(, 3).Borders.LineStyle = xlContinuous
End With
第一句是取第一列的行数(Excel2003是65536行),从下往上直到有输入的那行,再取其下一行,便得到了第一个未输入行的单元格。
另外一种方法:
With ThisWorkbook.Sheets(1)
r = .Range("A1").CurrentRegion.Rows.Count + 1
.Cells(r, 1).Value = x
.Cells(r, 2).Value = y
.Cells(r, 3).Value = z
End With
2. 第一列已有多行输入,现在要在后面相应的几列中写入数据
Set LArea = Range("A1").CurrentRegion
Application.ScreenUpdating = False
For i = 2 to LArea.Rows.Count
With Workbooks.Open(LArea.Cells(i, 1).Value)
LArea.Cells(i, 2).Value = xxx
LArea.Cells(i, 3).Value = yyy
.Close SaveChanges:= False
End With
Next i
Application.ScreenUpdating = True
第一句取得第一列所有输入的行范围;
假定从第二行开始写入数据;
假定第一列里放的是文件名,With用Workbooks打开每个文件,然后往相应的第二列和第三列里写入数据,最后关闭打开的文件(不保存)。
3. 往Workbook里追加新的sheet
Worksheets.Add(After:=Sheets(Sheets.Count).Name = "表名")
.Range("A1").Value = Worksheets(1).Rows("1:3").Value
4. 用ADO读取外部文件里的数据
Set oConn = CreateObject("ADODB.CONNECTION")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strExportDataFolder & ";" & _
"Extended Properties=""text;HDR=No;FMT=TabDelimited"""
Set oRS = CreateObject("ADODB.RECORDSET")
oRS.Open "Select * From " & strFileName, oConn, 3, 1, 1
.....读入数据处理
oRS.Close
oConn.Close
使用这种方法读取如csv这样的文本文件,速度很快。但是,需要注意的是读入的数据可能会改变原来的格式。
比如,原来的格式是+00000000.001,读进来的数据可能会变成1。