Я знаю, что мы можем перебрать столбцы в VBA, выполнив это: For j = 3 To 6, но я хочу просмотреть только определенные столбцы, скажем, For j = 3, 5, 6, 7 , 8, 9 to 12, но это не представляется возможным. У кого-нибудь есть идеи, как мне достичь этого результата? Заранее спасибо!

Обновление:

Код для рабочей книги, я изменил часть, где на предложение Микку, чтобы пройтись по столбцам. Поэтому я изменил это на это:

Private Function MissingEntries() As Boolean

Dim i As Integer
Dim atLeastOneLine As Boolean

atLeastOneLine = False
For i = 12 To 21
    If (Cells(i, 2) <> "") Then
        atLeastOneLine = True

Dim k As Integer
Dim cols()
cols = [{3, 5, 6, 7 , 8, 10,12,13}]
For k = LBound(cols) To UBound(cols)
If Cells(i, cols(k)) = "" Then

    'For j = 3 To 5
        'If Cells(i, j) = "" Then

 MsgBox ("Please supply values for highlighted cells")
            MissingEntries = True
            Exit Function
        End If
    Next
    If WrongSerialNumber(i) Then
        MissingEntries = True
        Exit Function
    End If
    End If
    Next
If Not atLeastOneLine Then
MsgBox ("Please supply values for at least one line")
MissingEntries = True
Else
MissingEntries = False
End If

End Function

Скорее чем те, которые написаны как комментарии. Я не уверен, что не так, потому что диапазон строк и столбцов кажется правильным .... но все еще выскакивает msgBox: "Пожалуйста, укажите значения для выделенных ячеек". Хотя все клетки должны были быть заполнены, они уже были заполнены. По сути, те столбцы, которые мне нужны для заполнения, - это те, которые выделены красным шрифтом. Посмотрите, как все столбцы, которые мне нужно заполнить, уже заполнены, но все еще есть это сообщение об ошибке:

enter image description here

0
user11850057 19 Авг 2019 в 06:15

2 ответа

Лучший ответ

Попробуйте это:

Dim i As Integer
Dim cols()
cols = [{3, 5, 6, 7 , 8, 9, 12}]


For i = LBound(cols) To UBound(cols)

    Debug.Print Cells(1, cols(i))

Next

Справка взята из Здесь


Обновление:

If Cells(i, k) = "" Then В этой строке вы используете k, который работает от 1 до количества элементов в вашем массиве. Скорее вы должны использовать If Cells(i, cols(k)) = "" Then, который будет ссылаться на k-й элемент вашего массива, это то, что вам нужно проверить.

Dim k As Integer
Dim cols()
cols = [{3, 5, 6, 7 , 8, 10,12,13}]
For k = LBound(cols) To UBound(cols)
If Cells(i, cols(k)) = "" Then

        'For j = 3 To 5
            'If Cells(i, j) = "" Then

 MsgBox ("Please supply values for highlighted cells")
                MissingEntries = True
                Exit Function
            End If
        Next
        If WrongSerialNumber(i) Then
            MissingEntries = True
            Exit Function
        End If
    End If
 Next 
 If Not atLeastOneLine Then
    MsgBox ("Please supply values for at least one line")
    MissingEntries = True
Else
    MissingEntries = False
End If

End Function
2
Mikku 20 Авг 2019 в 02:32

Мне нравится ответ @ Mikku, так как он дает вам более четкое представление о том, какие номера столбцов включены, просто кажется более подходящим для вашего вопроса. Однако я хотел бы показать вам, что вы можете пропустить .Evaluate и назначить несмежный диапазон следующим образом:

Sub Test()

With ThisWorkbook.Sheets("Sheet1")
    For Each col In .Range("C:C,E:I,L:L").Columns
        Debug.Print col.Column
    Next col
End With

End Sub
1
JvdV 19 Авг 2019 в 06:43