在項目測試階段,經常會要使用vba做些小工具,方便測試數據的導入導出。
下面是一些編寫程序時使用的小技巧:
1. 用循環(huán)往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。