Разделение строки VBA в текстовом файле - PullRequest
1 голос
/ 30 ноября 2011

Так вот в чем проблема, у меня есть текстовый файл со всей информацией, которая мне нужна для ввода в мою программу (через VBA).Но есть один раздел, который мне нужно разделить, а затем использовать вторую половину строки для моей программы.НО каждый раз, когда я запускаю этот код, я получаю сообщение о том, что «индекс находится вне диапазона».

Вот код:

Const modelList As String = "C:\modelList.txt"

Dim inFileNum As Integer
Dim strData As String
Dim strLine As Variant
Dim strSplit As Variant
Dim intCount As Integer

intFileNum = FreeFile
intCount = 0
Open modelList For Input As #intFileNum
Do Until EOF(intFileNum)
Input #intFileNum, strData
    Do Until strData = "[SPECS]"
    Input #intFileNum, strData
        Do Until strData = " "
        Input #intFileNum, strData
            strSplit = Split(strData, " ")
                For Each strLine In strSplit
                    SPECS.Value = strSplit(1)
                Next
        Loop
    Loop
Loop
Close #intFileNum

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Ваша проблема в этом коде здесь:

    Do Until strData = " "
    Input #intFileNum, strData
        strSplit = Split(strData, " ")
            For Each strLine In strSplit
                SPECS.Value = strSplit(1)
            Next
    Loop

Вы не будете проверять strData = " " до тех пор, пока не будет запущена функция Split (т. Е. В начале следующей итерации цикла). Вместо этого попробуйте следующее:

    Do 
        Input #intFileNum, strData
        If strData = " " Or InStr(strData, " ") = 0 Then Exit Do

        strSplit = Split(strData, " ")
        For Each strLine In strSplit
            SPECS.Value = strSplit(1)
        Next
    Loop
0 голосов
/ 15 ноября 2017

Другой подход - проверка верхней границы массива разбиения.

strSplit = Split(strData, " ")
For Each strLine In strSplit
    '~~~Assuming that you always want the second element, if available
    If (UBound(strSplit)) > 0 Then
        SPECS.Value = strSplit(1)
    Else
        SPECS.Value = strSplit(0)
    End If
Next
...