我有一个进程创建一个带有工作表宏的.xlsm文件,即一个工作表内部的宏,而不是在一个单独的模块中运行。
在其中一个工作表子例程中,我尝试使用此方法导入.csv文件:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & INFILE, Destination:=Range("$A$1"))
.Name = "NLIST"
.FieldNames = True
.PreserveFormatting = True
.RefreshStyle = xlInsertDeleteCells
.SaveData = True
.AdjustColumnWidth = True
.TextFileStartRow = 1
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileTabDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(8, 36, 2, 4, 7, 4, 4)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
问题是它不能用作表格宏。只有当它在自己的模块中时它才有效。我试过改变所有的“。”对这种结构的引用:
With sheets("NLIST").QueryTables.Add(Connection:= _
"TEXT;" & INFILE, Destination:=Range("$A$1"))
sheets("NLIST").Name = "NLIST"
sheets("NLIST").FieldNames = True
End with
不好
一如既往,任何帮助将不胜感激
Edit1:由于它不起作用,请尝试在模块级别创建过程并在工作表代码中调用它。
例如:这是一个模块
Sub AddConnection(targetWS As Worksheet, INFILE As String)
With targetWS
With .QueryTables.Add(Connection:= _
"TEXT;" & INFILE, Destination:=.Range("$A$1"))
.Name = "NLIST"
.FieldNames = True
.PreserveFormatting = True
.RefreshStyle = xlInsertDeleteCells
.SaveData = True
.AdjustColumnWidth = True
.TextFileStartRow = 1
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileTabDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(8, 36, 2, 4, 7, 4, 4)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End With
End Sub
然后在您的工作表代码中,您可以将其称为:
AddConnection Me, <FilePath> '/* if you are creating connection in that sheet */
要么
AddConnection Sheets("NLIST"), <FilePath> '/* creating it on another sheet */
没有测试过,没办法做atm,但我认为应该可行。