2016-09-14 2 views
0

поэтому у меня есть простая проблема, которую я пытаюсь решить. У меня есть столбец чисел, который я читаю как строку. Затем я хочу преобразовать строку в Long и сохранить ее в массиве типа Long.VBA Excel Преобразование элемента String Array в длинное «несоответствие типа»

Я попробовал это первоначально:

ElseIf stArray(0, i) = "SrcWth" Then 
     Debug.Print "Found the Width Column" 
     For j = 0 To UBound(stArray) 
      whArray(0, j) = CLng(stArray(j, i)) 
     Next j 

stArray является 2d массив, который держит CSV файл информацию. Это тип String. whArray - это массив 2d, который будет содержать два столбца чисел, которые я хочу. Однако он жалуется на несоответствие типов.

Я подумал, что, возможно, он видел пробелы, поэтому я попробовал обрезать его.

ElseIf stArray(0, i) = "SrcWth" Then 
     Debug.Print "Found the Width Column" 
     For j = 0 To UBound(stArray) 
      whArray(0, j) = CLng(Trim(stArray(j, i))) 
     Next j 

Это не имело значения. Что я делаю неправильно? Я предполагаю, что у него проблемы с CLng, поэтому я не уверен.

Благодаря

ответ

4

Самое первое, что вы передаете CLng является "SrcWth".

Я полагаю, что это заголовок столбца, так что вы хотите начать свой следующий цикл на 1

For j = 1 To UBound(stArray, 1) 
    whArray(0, j) = CLng(Trim(stArray(j, i))) 
Next j 

Вы также можете включать в себя проверку, если это цифровая строка

For j = 1 To UBound(stArray, 1) 
    If Not isNumeric(Trim(stArray(j, i))) Then 
     MsgBox "invalid value: """ & Trim(stArray(j, i)) & """ at position " & j & ", " & i 
    Else 
     whArray(0, j) = CLng(Trim(stArray(j, i))) 
    End If 
Next j 

Редактировать : как оказалось, массив содержал пустые строки, потому что он был слишком инициализирован для данных. Попытка конвертировать пустую строку с CLng также вернет несоответствие типа.

+0

Да, это была ошибка, которую я исправил по вашему предложению. Но я получаю ту же ошибку в той же строке. – Soolkiki

+1

Вы проверили, что вы переходите в 'CLng', когда появляется ошибка с помощью отладчика? – arcadeprecinct

+0

Я опробовал ваш if-statement. Похоже, я пытаюсь ничего не пропускать, что дало бы несоответствие типа. Это странно. В массиве есть определенные данные, потому что я могу распечатать все, что просто отлично, как строка. – Soolkiki

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