Я знаю, что мы можем перебрать столбцы в 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: "Пожалуйста, укажите значения для выделенных ячеек". Хотя все клетки должны были быть заполнены, они уже были заполнены. По сути, те столбцы, которые мне нужны для заполнения, - это те, которые выделены красным шрифтом. Посмотрите, как все столбцы, которые мне нужно заполнить, уже заполнены, но все еще есть это сообщение об ошибке:
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
Мне нравится ответ @ 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
Похожие вопросы
Связанные вопросы
Новые вопросы
excel
Только для вопросов по программированию объектов или файлов Excel или по разработке формул. Вы можете комбинировать тег Excel с тегами и вопросами VBA, VSTO, C#, VB.NET, PowerShell, OLE и другими тегами и вопросами, связанными с программированием, если это применимо. НЕ используйте с другим программным обеспечением для работы с электронными таблицами, например [google-sheets].