2013-12-18 21 views
0

Все, что я пытаюсь получить это отсчет перед пустой ячейки в следующем коде:IsEmpty() генерирует ошибку времени выполнения

Dim l As Long 
    Dim r As Long 
    For l = 0 To 65866 

    If IsEmpty(wb.Worksheets("Fund Position(URIL)").Range("A1")) Then 
     Exit For 
    Else 
     r = r + 1 
    End If 
    Next l 

    MsgBox r 

Приведенный выше код кидает мне Automation error с Runtime error : -2147221080 (800401a8), когда он выполняет if заявление.

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

Update:

Я изменил

If IsEmpty(wb.Worksheets("Fund Position(URIL)").Range("A1")) Then

к:

If IsEmpty(wb.Sheets("Fund Position(URIL)").Range("A1")) Then 

, и она работала. Может ли кто-нибудь объяснить мне, почему?

+0

Думаю, вы пытаетесь найти последнюю строку в Col A, у которой есть данные? Если да, то см. [This] (http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba) –

+0

На самом деле, я пытаюсь найти первую пустую строку в Col A – Salik

+0

первая пустая строка может означать две вещи ... Позволяет сказать, что у «A1-A10» есть данные, тогда «A11» - это пустая ячейка, которую вы хотите. Другой сценарий. «A1-A5» имеет данные, а затем данные A7-A10 имеют данные. В этом сценарии вы хотите «A6» или «A11» –

ответ

0

Это то, что вы пытаетесь?

Sub Sample() 
    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim l As Long 

    Set wb = ThisWorkbook 
    Set ws = wb.Worksheets("Fund Position(URIL)") 

    For l = 1 To 65866 
     With ws 
      If IsEmpty(.Range("A" & l)) Then Exit For 
     End With 
    Next l 

    MsgBox l 
End Sub 
+0

Да, но я сделал это, заменив «Рабочие листы» на «Листы», и это сработало. Однако я не знаю разницы. – Salik

+0

Но это неправильно. Вы не можете сохранить константу .Range («A1»). Еще, как вы узнаете, какая строка пуста? –

+0

Я использовал рабочие листы, и он работает :) –

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