Ошибка выполнения 91 объектная переменная или переменная не установлена - PullRequest
0 голосов
/ 15 мая 2018

когда код попадает в 'найти первую пустую строку в базе данных, он выделяет следующие две строки желтым цветом и показывает ошибку времени выполнения 91. Может кто-нибудь, пожалуйста, посоветуйте, где я иду не так.Спасибо.

Private Sub diaryenter_Click()
    Dim iRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("sheet1")
    'find first empty row in database
    iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
        SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
    'copy the data to the database
    With ws
      .Cells(iRow, 115).Value = Me.autodatet.Value
      .Cells(iRow, 116).Value = Me.fdcomments.Value
      .Cells(iRow, 121).Value = Me.fdgs.Value
    End With
    'clear the data
    Me.autodatet.Value = ""
    Me.fdcomments.Value = ""
    Me.fdgs.Value = ""
    Diaryentryf.Hide
    ThisWorkbook.Save
End Sub

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Возможно, добавьте тест, что на самом деле есть данные, которые нужно остановить. Найдите ошибки, если нечего найти.

  If Application.WorksheetFunction.Counta(ws.UsedRange) = 0 Then
        iRow = 1
   Else
        iRow = ws.Cells.Find(What:="*", SearchOrder:=xlByRows, _
                             SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
   End If

И кредит @Jeeped за xlByRows.

0 голосов
/ 15 мая 2018

Продолжая из комментария @QHarr, вы должны проверить, чтобы найти FIND что-нибудь
(если это не так, он не может вернуть номер строки ячейки, которую он не нашел).

Sub Test1()

    Dim rLastCell As Range
    Dim iRow As Long
    Dim ws As Worksheet

    Set ws = Worksheets("sheet1")

    Set rLastCell = ws.Cells.Find(What:="*", SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, LookIn:=xlValues)
    If rLastCell Is Nothing Then
        iRow = 1
    Else
        iRow = rLastCell.Row+1
    End If

End Sub  

Редактировать - собирался удалить, так как QHarr дал похожий ответ, но метод поиска, если это ничто, не отличается.

0 голосов
/ 15 мая 2018

Это xlByRows не xlRows.

iRow = ws.Cells.Find(What:="*", SearchOrder:=xlByRows, _
                     SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
...