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

Мой вопрос: почему при попытке отладки возникает ошибка Runtime error 91;Переменная объекта или переменная блока не установлена.Я пытаюсь взглянуть на другой пример и попытаться найти решение на форуме, но тем не менее, я не могу его найти.

Кстати, при отладке оно будет выделено на

findvalue.EntireRow.Delete

Могу ли язнаете в чем ошибка я?Надеюсь, кто-то может мне это объяснить.

Спасибо.

Private Sub cmdDelete_Click()

Dim findvalue As Range
Dim cDelete As VbMsgBoxResult
Dim cNum As Integer
Dim DataSH As Worksheet
Set DataSH = Sheet1
Dim x As Integer


Application.ScreenUpdating = False

If Emp1.Value = "" Or Emp2.Value = "" Then
MsgBox "There is not data to delete"
Exit Sub
End If

cDelete = MsgBox("Are you sure that you want to delete this training", _
vbYesNo + vbDefaultButton2, "Are you sure????")
If cDelete = vbYes Then

Set findvalue = DataSH.Range("B:B").Find(What:=Me.Emp1.Value, _
LookIn:=xlValues, LookAt:=xlWhole)

findvalue.EntireRow.Delete
End If

cNum = 7
For x = 1 To cNum
Me.Controls("Emp" & x).Value = ""
Next

DataSH.Range("A2").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("Data!$L$8:$L$9"), CopyToRange:=Range("Data!$N$8:$T$8"), _
Unique:=False

If DataSH.Range("N9").Value = "" Then
lstEmployee.RowSource = ""
Else

lstEmployee.RowSource = DataSH.Range("outdata").Address(external:=True)
End If

DataSH.Select
With DataSH
.Range("A2:G10000").Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess
End With

Sheet1.Select

On Error GoTo 0
Exit Sub

End Sub

1 Ответ

0 голосов
/ 09 октября 2018

Вы просто не можете найти значение из Me.Emp1.Value в столбце B таблицы данных, поэтому удалить нечего.Может быть, расширить аргументы поиска;случай совпадения: = false приходит на ум.

Ошибка контролируется:

Set findvalue = DataSH.Range("B:B").Find(What:=Me.Emp1.Value, _
LookIn:=xlValues, LookAt:=xlWhole)

if not findvalue is nothing then findvalue.EntireRow.Delete

Альтернатива:

dim m as string
m = application.match(Me.Emp1.Value, DataSH.Range("B:B"), 0)
if not iserror(m) then DataSH.rows(m).entirerow.delete

Дополнительные определения диапазона AdvancedFilter:

with DataSH
    .Range("A2").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range("L8:L9"), CopyToRange:=.Range("N8:T8"), _
            Unique:=False
end with
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...