VBA导入文本文件数据,有多种方法可实现(后续将陆续补充)。最为烦心的是,账号等前导可能有0的文本文件数据,导入工作表中,前导0会丢失。
本示例在导入数据前将整列的单元格格式设置为文本格式,成功避免了此问题。
不过,如果文本文件中,列的顺序一旦发生改变,那么,程序代码也要随之修改。要解决此问题,可将文本文件先写入Access数据库,再用Sql读取Access数据表中的数据,这需要ini配置文件配合,代码相对复杂些,不过也是终极的解决办法,以后会介绍。
文本文件数据:
导入结果:
代码:
Sub iImportTextFile()
'变量声明,&表示长整型
Dim arr, brr, k&, i&, j&, q&
'对文件做任何 I/O 操作之前都必须先打开文件。Open 语句分配一个缓冲区供文件进行 I/O 之用,
'并决定缓冲区所使用的访问方式。
'打开文件作为数据输入用,文件号为#1
Open '工资表.txt' For Input As #1
'对变体型数组arr赋值,逐行读取,arr为一维数组
'vbCrLf表示回车符与换行符结合
arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
' For i = 0 To UBound(arr)
'在立即窗口中查看,按Ctrl G可打开
' Debug.Print arr(i)
' Next
'关闭打开的文本文件
Close #1
'取数组arr最大下标作为文本文件总行数赋给变量k
k = UBound(arr)
'针对工作表Sheet1操作,数据将写入该表
With Worksheets('Sheet1')
'外层循环,从0到变量k循环,arr为一维数组,下标为0
For i = 0 To k
'一行数据在arr中是一个元素,用Split对数组arr用逗号分隔符将它们拆分开来
'返回一个下标从零开始的一维数组brr
brr = Split(arr(i), ',')
'取数组brr最大下标作为总行数赋给变量q
q = UBound(brr)
'文本文件第2列账号有前导0,须将工作表第2列置为文本格式
'否则导入后前导0将丢失
.Columns(2).NumberFormatLocal = '@'
'内层循环,从0到变量q循环
'一行数据读写完后,再回到外层循环,读写下一行
For j = 0 To q
'从工作表第1行第1个单元格起,从左到右写入数组brr中对应的元素,i为外层循环变量
.Cells(i 1, j 1) = brr(j)
Next
Next
End With
MsgBox '导入完毕!', ok, '提示'
End Sub
看图:
联系客服