2014-01-07 4 views
0

Я нашел этот удивительный код, чтобы найти первую пустую ячейку в столбце от this link. Однако этот код не работает, если у меня есть две последовательные пустые ячейки в пределах диапазона со значениями. Он будет выбирать только вторую пустую ячейку, когда я хочу первый. Последовательные ячейки могут находиться где угодно в пределах диапазона, сначала 2 или 2 или 2. Кроме того, это может быть 3,4,5 последовательных ячеек, поэтому я не могу использовать формулу расчета строк. Было бы очень полезно, если кто-нибудь сможет мне посоветовать, как изменить код.VBA найти первую из следующих пустых ячеек в диапазоне

Public Sub SelectFirstBlankCell() 
Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
Dim currentRowValue As String 

sourceCol = 6 'column F has a value of 6 
rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

'for every row, find the first blank cell and select it 
For currentRow = 3 To rowCount 
    currentRowValue = Cells(currentRow, sourceCol).Value 
    If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
     Cells(currentRow, sourceCol).Select 
    End If 
Next 
End Sub 

Кроме того, только обнаружил, что если у меня есть несколько, непоследовательные пустых строк, которые находятся в пределах диапазона, между данными, он выбирает последнюю пустую строку, а (не последнюю строку!)

ответ

1

Хитрость заключается в том, чтобы добавить Exit For для разрыва цикла, если обнаружена пустая ячейка.

Кроме того, если вы хотите сделать свой код более расширяемым, я бы предложил включить sourceCol в качестве параметра, определенного в sub. Это позволяет создавать макросы для любого столбца

Public Sub SelectFirstFromF() 
    Call SelectFirstBlankCell() 
End Sub 

Public Sub SelectFirstFromB() 
    Call SelectFirstBlankCell(2) 
End Sub 

Sub SelectFirstBlankCell(Optional sourceCol as Integer = 6) 
Dim rowCount As Integer, currentRow As Integer 
Dim currentRowValue As String 

rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

'for every row, find the first blank cell and select it 
For currentRow = 3 To rowCount 
    currentRowValue = Cells(currentRow, sourceCol).Value 
    If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
     Cells(currentRow, sourceCol).Select 
     Exit For 
    End If 
Next 
End Sub 
+0

Спасибо, я не могу поверить, что все это происходит ..... Еще одна вещь, используя код с sourceCol в качестве параметра, макрос не может как это не в моем списке макросов. Почему это так? – user2530250

+0

OK макрос не может принимать параметры и отображается в списке макросов. Я обновлю свой ответ, чтобы это отразить. – serakfalcon

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