2013-12-13 1186 views
-1

我遇到了一些VBA代码的问题。我在Windows 7 Enterprise上运行Excel 2010。VBA:.Refresh运行时错误

我试图从一个文件夹中读取几个制表符分隔的文本文件,并将它们放到一个Excel工作簿的单独工作表中。为此,我使用查询表。在调试中,我遇到.Refresh BackgroundQuery:=False问题。当它到达这一行时,它会引发1004运行时错误,指出Excel无法找到文本文件来刷新此外部数据范围。我不知道为什么会发生这种情况。我知道查询表在读取这行之前不会创建,这会使调试变得困难。这是代码。任何帮助将非常感激。提前致谢!

Sub LoadPipeDelimitedFiles() 
Dim idx As Integer 
Dim fname As String 

idx = 0 
fname = Dir("C:\files\*.txt") 
While (Len(fname) > 0) 
    idx = idx + 1 
    Sheets("Sheet" & idx).Select 
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fname, Destination:=Range("A1")) 
     .Name = "a" & idx 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileOtherDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
     fname = Dir 
    End With 
Wend 
End Sub 

这里是修正:

Sub LoadPipeDelimitedFiles() 
Dim idx As Integer 
Dim fpath As String 
Dim fname As String 
Dim f_dummy As String 

idx = 0 
fpath = "C:\files\" 
f_dummy = fpath & "*.txt" 
fname = Dir(f_dummy) 
While (Len(fname) > 0) 
    idx = idx + 1 
    Sheets("Sheet" & idx).Select 
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" _ 
     & fpath & fname, Destination:=Range("A1")) 
     .Name = "a" & idx 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileOtherDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
     fname = Dir 
    End With 
Wend 
End Sub 
+0

根据您的修正,它的高潮,以我在我的答案:) –

回答

2

变化With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fname, Destination:=Range("A1"))

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & "C:\files\" & fname, Destination:=Range("A1"))

fname只是有文件名的方式而不是全部路径

还避免使用.Select并完全符合您的要求ObjectsINTERESTING READ

您的代码可以写成

​​
+0

非常感谢你说!那就是诀窍。实际上,造成这个问题的原因首先是我在最后的路线上留下了最后一个斜线字符。我将用我的完整代码更新这篇文章,以展示它现在的样子。 – user3100444

+1

不,不更新我的帖子:)你可以解释通过更新你的问题 –