Ошибка времени выполнения 91: переменная объекта или с не заданной переменной блока

У меня есть два отдельных текстовых документа с списками слияния. И у меня есть книга Excel с двумя листами. Основываясь на имени листа и если лист не пуст, мне нужно отправить почтовый ящик в соответствующий документ (-ы).

Когда я пытаюсь выполнить этот код, он работает до первого документа, а во втором документе он останавливается с ошибкой Run-time Error 91 : Object variable or With block variable not set

Я не уверен, что вызывает эту ошибку (если это переменная Dim или With block). Был бы очень признателен, если бы кто-то мог помочь мне исправить эту ошибку.

 Sub Generate_Certificate() Dim wd As Object Dim wdoc_reg As Object Dim wdoc_occ As Object Dim strWbName_reg As String Dim strWbName_occ As String Const wdFormLetters = 0, wdOpenFormatAuto = 0 Const wdFormLetters1 = 0, wdOpenFormatAuto1 = 0 Const wdSendToNewDocument = 0, wdDefaultFirstRecord = 1, wdDefaultLastRecord = -16 Const wdSendToNewDocument1 = 0, wdDefaultFirstRecord1 = 1, wdDefaultLastRecord1 = -16 On Error Resume Next Set wd = GetObject(, "Word.Application") If wd Is Nothing Then Set wd = CreateObject("Word.Application") End If On Error Goto 0 For Each Sheet In ActiveWorkbook.Sheets 'Generate report using "Mailmerge" if any data available for Mailmerge1 If Sheet.Name Like "Sheet1" And IsEmpty(ThisWorkbook.Sheets("Sheet1").Range("A2").Value) = False Then Set wdoc_reg = wd.Documents.Open("C:\Mailmerge1.docx") strWbName_reg = ThisWorkbook.Path & "\" & ThisWorkbook.Name wdoc_reg.MailMerge.MainDocumentType = wdFormLetters wdoc_reg.MailMerge.OpenDataSource _ Name:=strWbName_reg, _ AddToRecentFiles:=False, _ Revert:=False, _ Format:=wdOpenFormatAuto, _ Connection:="Data Source=" & strWbName_reg & ";Mode=Read", _ SQLStatement:="SELECT * FROM `Sheet1$`" With wdoc_reg.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Execute Pause:=False End With wd.Visible = True wdoc_reg.Close SaveChanges:=False Set wdoc_reg = Nothing Set wd = Nothing End If 'Generate report using "Mailmerge" if any data available for Mailmerge2 If Sheet.Name Like "Sheet2" And IsEmpty(ThisWorkbook.Sheets("Sheet2").Range("A2").Value) = False Then Set wdoc_occ = wd.Documents.Open("C:\Mailmerge2.docx") strWbName_occ = ThisWorkbook.Path & "\" & ThisWorkbook.Name wdoc_occ.MailMerge.MainDocumentType = wdFormLetters1 wdoc_occ.MailMerge.OpenDataSource _ Name:=strWbName_Occ, _ AddToRecentFiles:=False, _ Revert:=False, _ Format:=wdOpenFormatAuto1, _ Connection:="Data Source=" & strWbName_occ & ";Mode=Read", _ SQLStatement:="SELECT * FROM `Sheet2$`" With wdoc_occ.MailMerge .Destination = wdSendToNewDocument1 .SuppressBlankLines = True With .DataSource .FirstRecord = wdDefaultFirstRecord1 .LastRecord = wdDefaultLastRecord1 End With .Execute Pause:=False End With wd.Visible = True wdoc_occ.Close SaveChanges:=False Set wdoc_Occ = Nothing Set wd = Nothing End If Next End Sub 

Как заявил Тим Уильямс в комментариях к этому вопросу.

У вас есть Set wd = Nothing внутри вашего цикла, который очистит вашу ссылку на Word после первого листа. Переместите это как раз перед End Sub

  • Excel VBA - Назначение свойств ячейки вызывает номер ошибки 1004
  • Ошибка времени выполнения VBA 91 на второй итерации
  • Тип ошибки времени выполнения
  • Именованные диапазоны с использованием функции index / Match для возврата значений
  • Excel VBA - ошибка времени выполнения 1004 при упрощении записанного кода
  • Ошибка выполнения VBA Application.Caller
  • Метод Диапазон объекта Глобальный не удалось
  • Ошибка выполнения 1004: невозможно получить свойство PivotTables класса Worksheet
  • Ошибка Excel 2007 VBA «91» для каждого цикла
  • Ошибка автоматизации Excel: ошибка времени выполнения '-2147417848 (80010108)'
  • Excel 2013 VBA Ошибка выполнения 13 Тип Несоответствие
  • Interesting Posts

    Попытка сохранить уникальные строки из текстового файла в Excel с помощью VBA

    Формула для вычитания диапазона чисел в одной ячейке из числа в другой ячейке

    Можно ли просматривать информацию по каждой команде VBA непосредственно в Excel?

    excel: временная последовательность не унифицирована

    Добавьте серию данных, чтобы выделить случаи на графике окна (Excel, SPSS или R)

    Ячейка, связанная с текстовым полем ActiveX, возвращающая текст вместо номера

    Макрос Excel 2003, который копирует строку во вновь созданной книге

    Кодированный пользовательский интерфейс с управлением данными: как установить источник данных для базы данных Access (oledb)?

    Как вернуть динамически созданные векторы в рабочую область?

    Получить индекс закладки Word для замены изображения внутри закладки из Excel

    Как перенести строки в столбцы во время процессов импорта?

    Информация об экспорте диаграммы VBA

    Совокупные строки Excel на основе полей – конкатенации значений

    ClosedXML PivotTable ReportFilter несколько значений

    проверка динамического значения флажка во время выполнения с использованием цикла «if» и выполнения операций

    Давайте будем гением компьютера.