Решение 2: Вложенный Do
Loop
Избегание команды «Продолжить», так как она не является командой VBA.
For i = 2 To BS.Cells(1, BS.Columns.Count).End(xlToLeft).Column: Do
Item = BS.Cells(1, i).Value
FilePath = Folder & "\" & Item & "1440.CSV"
If Item = "" Or Dir(FilePath) = "" Then Exit Do
j = BS.Cells(2, BS.Columns.Count).End(xlToLeft).Column
If j <> i Then j = i
With BS.QueryTables.Add(Connection:="TEXT;" & FilePath, Destination:=BS.Cells(2, j))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 1, 9, 9, 9, 9)
.Refresh BackgroundQuery:=False
End With
Loop While False: Next i
Пожалуйста, обратите внимание на : Do
в конце конца For i
.
Если один из следующих условий, то есть Item = ""
или Dir(FilePath) = ""
равно False
, затем цикл Do
завершается.Истинно, если указано условие Loop While False: Next i
для цикла Do
.
Два условия также могут быть представлены как:
For i = 2 To BS.Cells(1, BS.Columns.Count).End(xlToLeft).Column: Do
If Item <> "" Or Dir(FilePath) <> "" Then
'Do something...
Else: Exit Do
End If
Loop While True: Next i
Наличие условия Or
в If Item = "" Or Dir(FilePath) = "" Then Exit Do
является обязательным, поскольку i
может быть Value <> " "
, но FilePath
к файлу может отсутствовать, т. е. Dir(FilePath) = " "
, что приведет к ошибке, как и предыдущая.
If j <> i Then j = i
в этом случае является обязательным, поскольку For i
указано как =2 To
, что означает, что цикл начинается со столбца 2.
Этого можно избежать, указав цикл For i
как For i = 1 To
.Однако это был начальный цикл для выполнения работы.
Далее j
может быть задано как j = BS.Cells(2, i)
, получая значение i
для индекса столбца.
Тем не менее, заявление If j <> i Then j = i
рекомендуется в целях обеспечения дополнительной уверенности.
В дальнейшем поиске появилось больше решений.
См. Решение 3: Вложенный For
Цикл с вложенным If
Оператор