我是Excel VBA的新手,並遇到一些問題。我正在創建一個將採用.dat文件的宏(導入類似.txt文件),並將文件名放在第一行,然後將第二行的所有數據放在第二行,然後程序循環並重新啓動進程3行(數據有很多行但只有3列)。在添加文件名時導入文本文件循環
目前我的宏將導入的數據正確,但文件名不正確循環。它將輸入文件名到A1,循環輸入文件名到D3,同時從A1刪除文件名。我無法弄清楚發生了什麼問題。
Sub ImportDataFiles()
'call out variables
Dim fName As String, LastCol As Long, fileName As String, fso As Object
'loop start
BEGINNING:
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
fName = Application.GetOpenFilename("All Files, *.dat")
Set fso = CreateObject("Scripting.FileSystemObject")
fileName = fso.GetFilename(fName)
'fileName is just the file name from the path
Range(Cells(1, LastCol).Address).Value = fileName
If fName = "False" Then Exit Sub
'Imports data from text file
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fName, _
Destination:=Cells(2, LastCol))
.TextFileStartRow = 30
.TextFileParseType = xlDelimited
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.Refresh BackgroundQuery:=False
'loop end
If MsgBox("Do you want to do it again?", vbYesNo) = vbYes Then GoTo BEGINNING
End With
End Sub
你需要添加一些東西到'LastCol',否則你會保持覆蓋以前的值... –
它似乎也使用'End(xlToLeft).Columns'而不是'End(xlUp).Rows',您打算將文本文件數據並排排列,而不是堆疊在一起。通常情況下,數據和報告都是以很長的格式處理的。參見[Bruin's note here](http://www.rondebruin.nl/win/s9/win005.htm)。 – Parfait
@蒂姆威廉斯,你能解釋一下嗎?你是在暗示一個無意義的增量,因爲LastCol將與數據導入一致。 – IrishThunder23