我有一个每天创建的文本文件,每天放在同一个文件夹中。文本文件的文件路径永远不会更改。现在,让我们说道路是:“\ MyPath \ test.csv \”
我想在MS Excel 2010中创建一个报表,用户可以按一个按钮,将文本文件导入一个范围,比如工作表(“Sheet1”)。范围(“A1”),然后分析是根据导入的数据执行。
我一直在使用VBA与MS Excel一段时间,并了解如何创建一个脚本,将从各种数据库导入数据等,但我似乎无法理解导入文本文件!我在网上找到的所有示例似乎都打开了一个对话框供用户选择文本文件,但我不希望我的用户能够这样做。我希望每次都能导入一个特定的文本文件,而不需要用户输入。他们只需按一个按钮即可启动宏。
有人有一个非常简单的代码可以为我导入吗?基本上,我想要一个宏将选定的文本文件导入Sheet1单元格A1。我还想在代码中手动指定文本分隔符。
任何帮助/建议将不胜感激。
答案 0 :(得分:1)
一些假设可以让您在自定义此代码示例时具有一定的灵活性。我的测试数据文件显示在下面的图像中,即十个可变长度记录,每个字段用逗号分隔。代码一次读取.csv文件一条记录,并将每条记录放在一个单独的行上。在每行内(即对于每个记录),每个字段被放入单独的单元格中。它使用几个数组来实现这一目标。您可以调整代码以适合您的上下文,并在其中有一些注释,以提供帮助。只需添加一个按钮即可调用此宏。
Sub ReadTxtFile()
Dim ws As Worksheet
Dim rearr(), wrarr()
Dim fName As String
Dim rowno As Long, colno As Long, rec As Long
Dim cnt As Long, cnt2 As Long
Dim delim As String
'specify output sheet
Set ws = Worksheets("Sheet1")
'specify text file to read (.csv in this example)
fName = "C:\MyPath\test.csv"
'set text file delimiter
delim = "," 'for Tab delimiter use delim = Chr(9)
ifnum = FreeFile
'set start row/col for text data to be placed ("A1" in this example)
rowno = 1 'row 1
colno = 1 'col A
With ws
Open fName For Input Access Read As #ifnum
rec = 0
Do While Not EOF(ifnum)
Line Input #ifnum, tmpvar
rec = rec + 1
'Put whole record into array
ReDim Preserve rearr(1 To rec)
rearr(rec) = tmpvar
'Split fields into a second array
wrarr = Split(rearr(rec), delim)
cnt2 = UBound(wrarr)
'Write fields out to specified ws range, one row per record
For cnt = 0 To cnt2
ws.Cells(rowno, colno + cnt) = wrarr(cnt)
Next cnt
rowno = rowno + 1
Loop
Close #ifnum
End With
End Sub