我希望将.txt文件加载到VBA数组(在访问VBA中),在那里进行操作,然后将操作的数组粘贴到访问表中。我将循环这个宏,然后循环大约500 .txt文件,并用数年的数据填充数据库。
我在以这种方式使用Excel之前已经完成了:填充1 .txt文件的工作表,操作数据,加载到数据库,清除工作表,加载下一个txt文件并循环直到所有文件都已处理。但是,这需要数年时间,很明显Excel并不是真正需要的,因为无论如何都要存储在Access中。
从那以后,我试图在不使用excel的情况下立即弄清楚如何进行访问,但我一直在努力。我在这个板上找到了一些不错的代码:
Load csv file into a VBA array rather than Excel Sheet
并尝试修改它以便它对我有用。特别是TheBarman在底部的回答看似简单而且非常有趣。
我是数组,VBA,SQL的新手,基本上都是一切,所以也许我在这里做的一些很容易解决的大错误。请参阅下面的代码:
Sub LoadCSVtoArray()
Dim strfile As String
Dim strcon As String
Dim cn As ADODB.Connection
Dim rs As Recordset
Dim rsARR() As Variant
Set cn = New ADODB.Connection
strcon = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" & "\\filename.txt" &
";Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
cn.Open strcon
strSQL = "SELECT * filename.txt;"
Set rs = cn.Execute(strSQL)
rsARR = WorksheetFunction.Transpose(rs.GetRows)
rs.Close
Set cn = Nothing
[a1].Resize(UBound(rsARR), UBound(Application.Transpose(rsARR))) = rsARR
End Sub
我甚至不知道代码的底部是否有效,因为会弹出一条错误消息,说明找不到该文件。有趣的是,如果我调试并将strcon的值复制到windows“run”中,它会打开正确的文件。所以我猜道路是正确的?我甚至可以通过ADODB连接打开.txt文件吗?现在我有点困惑,如果这是可能的,如果这是最好的解决方案。
关于我试图保存到数组中的文本文件的更多背景知识:
- 它们是从另一个程序输出的,所以它始终是相同的结构并且非常有组织
等等。
如果可能的话,我想保留这个结构,甚至将它作为第一行作为列标题的表安全。
答案 0 :(得分:0)
Data Source
是包含文件的文件夹路径,文件是表(SELECT * FROM ..)
。将"\\filename.txt"
中的strcon
替换为文件夹路径。