2016-12-08 3 views
0

У меня возникла проблема с массивом, используемым в аргументе TextFileColumnDataTypes соединения в Excel.Подключение текстового файла 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?

+0

Возможно, я ошибаюсь, и я не могу вспомнить, как я его решил (у меня была такая же проблема некоторое время назад), можете ли вы попытаться объявить массив как вариант и посмотреть, разрешит ли он это? Я уверен, что имеет какое-то отношение к [cast it] (https://msdn.microsoft.com/en-us/library/tbatye4h.aspx) – Sgdva

+0

Я пробовал это как вариант, длинный, двойной, и он все равно дает мне то же сообщение об ошибке. Это очень раздражает! Будет ли эта ссылка на конвертацию работать только для позднего связывания? –

+0

Ах-ха! У меня есть, скоро ответит! –

ответ

0

Таким образом, ответ должен либо поместить Option Base 1 в верхней части модуля, или проходным от 0 до 15.

Ничего делать с имуществом TextFileColumnDataTypes, просто мне быть дерьмо в массивах!

Смежные вопросы