Предложение Do Loop in With: ошибка времени выполнения vba 91 - переменная блока не установлена - PullRequest
0 голосов
/ 24 января 2019

Я хочу сопоставить информацию с двух листов. Тем не менее, я должен найти информацию на одном листе и место, чтобы скопировать ее на другом. Поэтому я не знаю ни одного местоположения.

При выполнении кода ниже я получаю следующую ошибку:

Run time error '91':
Object variable or With block variable not set

Ошибка выдается на строку с условием цикла

Loop While tmpVal2 < d.Row

Код:

Dim PO_Nr As Variant
Dim DB As Worksheet
Dim OutSht As Worksheet
Dim StartCellDB As Range
Dim myRange As Range
Dim LastRow As Long
Dim LastRow2 As Long

Set OutSht = Worksheets("GUI")
Set DB = Worksheets("Datenbank")
Set StartCellDB = DB.Range("A2")

'Get Data from Database
LastRow = DB.Cells(DB.Rows.Count, StartCellDB.Column).End(xlUp).Row
PO_Nr = Sheets("GUI").Range("D5").Value

With DB.Range(StartCellDB, DB.Cells(LastRow, 1))
    'Find entry in "Datenbank"
    Set d = .Find(PO_Nr, LookIn:=xlValues)
    If Not d Is Nothing Then
        Do
            LastRow2 = OutSht.Cells(OutSht.Rows.Count, _
                OutSht.Range("A11").Column).End(xlUp).Row
            Set myRange = OutSht.Range(OutSht.Range("A12"), _
                OutSht.Range("A" & LastRow2)).Find(DB.Range _
                ("B" & d.Row).Value, LookIn:=xlValues)
            If Not myRange Is Nothing Then
                OutSht.Range("B" & myRange.Row).Value = _
                    DB.Range("C" & d.Row).Value
            End If
            tmpVal2 = d.Row
            Set d = .FindNext(d)
        Loop While tmpVal2 < d.Row
    End If
End With

1 Ответ

0 голосов
/ 24 января 2019

Set d = .FindNext(d) находится в теле If Not d Is Nothing Then. Поскольку вы проверяли d как Nothing, d в правой части задания не будет ничем - но вы устанавливаете d для чего-то другого в левой части. Таким образом, в следующей строке кода Loop While tmpVal2 < d.Row, d больше не гарантированно не будет ничем. Вы можете исправить это с помощью:

Dim dRow As Long 'at top of sub...

If Not d Is Nothing Then dRow = d.Row
Loop While Not d Is Nothing And tmpVal2 < dRow 

Многословие необходимо, поскольку в VBA отсутствует короткое замыкание в его логических операторах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...