【发布时间】:2016-12-08 14:46:14
【问题描述】:
我在 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$1"))
.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 有什么区别?
【问题讨论】:
-
我可能错了,我不记得我是如何解决它的(我前段时间遇到过同样的问题)你能尝试将数组声明为变体,看看是否能解决它?我很确定这与cast it 有关
-
我已经将它作为 Variant、Long、Double 进行了尝试,但它仍然给我同样的错误信息。这很烦人!该转换链接是否仅适用于后期绑定?
-
啊哈!我知道了,稍后会发布答案!
标签: arrays excel connection flat-file vba