Excel 文本文件连接 TextFileColumnDataTypes
Excel text file connection TextFileColumnDataTypes
我在 Excel 中连接的 TextFileColumnDataTypes
参数中使用的数组有问题。
我在下面的代码中添加了注释,这样您就可以看到有问题的行。这不是我正在使用的完整代码,但错误是相同的,这基本上是归结的,所以有些东西可能看起来有点粗糙,因为我已经将它们硬编码到这个例子中。
Sub TestWhyStuffBreaks()
Dim xlApp As Excel.Application, xlWb As Excel.Workbook, xlSht As Excel.Worksheet, i As Integer, arrDT() As Integer
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Add
ReDim arrDT(16)
For i = 1 To 16
arrDT(i) = 2
Next i
xlApp.Visible = True
Set xlSht = xlWb.Sheets(1)
With xlSht.QueryTables.Add(Connection:="TEXT;C:\temp\textfile.txt", Destination:=xlSht.Range("$A"))
.Name = xlSht.Name
.FieldNames = True
.RowNumbers = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierNone
.TextFileConsecutiveDelimiter = False
.TextFileOtherDelimiter = "|"
.TextFileColumnDataTypes = arrDT 'This line errors with message of "Invalid procedure call or argument".
'.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) 'This line is fine but not how I want to do it, I want to be able to dynamically change the length of the array.
.Refresh BackgroundQuery:=False
End With
End Sub
在完整版本的代码中,数组的大小不同,因为它循环遍历了 1 个以上的文本文件,因此希望对其进行动态处理。
在这种情况下,Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
和 arrDT
有什么区别?
所以,答案是将 Option Base 1
放在模块的顶部,或者从 0 到 15 循环。
与 TextFileColumnDataTypes 无关属性,只是我对数组很垃圾!
这非常有效!
'Declare your Array as integer
Public Indices() As Integer
'with a loop set dimension
ReDim Indices(69)
'insert this line
.TextFileColumnDataTypes = Indices
我在 Excel 中连接的 TextFileColumnDataTypes
参数中使用的数组有问题。
我在下面的代码中添加了注释,这样您就可以看到有问题的行。这不是我正在使用的完整代码,但错误是相同的,这基本上是归结的,所以有些东西可能看起来有点粗糙,因为我已经将它们硬编码到这个例子中。
Sub TestWhyStuffBreaks()
Dim xlApp As Excel.Application, xlWb As Excel.Workbook, xlSht As Excel.Worksheet, i As Integer, arrDT() As Integer
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Add
ReDim arrDT(16)
For i = 1 To 16
arrDT(i) = 2
Next i
xlApp.Visible = True
Set xlSht = xlWb.Sheets(1)
With xlSht.QueryTables.Add(Connection:="TEXT;C:\temp\textfile.txt", Destination:=xlSht.Range("$A"))
.Name = xlSht.Name
.FieldNames = True
.RowNumbers = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierNone
.TextFileConsecutiveDelimiter = False
.TextFileOtherDelimiter = "|"
.TextFileColumnDataTypes = arrDT 'This line errors with message of "Invalid procedure call or argument".
'.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) 'This line is fine but not how I want to do it, I want to be able to dynamically change the length of the array.
.Refresh BackgroundQuery:=False
End With
End Sub
在完整版本的代码中,数组的大小不同,因为它循环遍历了 1 个以上的文本文件,因此希望对其进行动态处理。
在这种情况下,Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
和 arrDT
有什么区别?
所以,答案是将 Option Base 1
放在模块的顶部,或者从 0 到 15 循环。
与 TextFileColumnDataTypes 无关属性,只是我对数组很垃圾!
这非常有效!
'Declare your Array as integer
Public Indices() As Integer
'with a loop set dimension
ReDim Indices(69)
'insert this line
.TextFileColumnDataTypes = Indices