Код VBA, работающий на одном листе, возвращает определенный пользователем тип, не определенный на другом

Код VBA, работающий на одном листе, возвращает определенный пользователем тип, не определенный на другом

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

Лист1 У меня есть данные поставщика; имя, адрес электронной почты и что-то, что нужно отметить, если я хочу отправить этому поставщику запрос или нет. Лист2 У меня есть данные о требуемой смете. Самое интересное в этом то, что это будет работать на одном рабочем листе, на котором я его тестировал/уточнял, но не на его домашнем листе. Я даже пытался скопировать информацию на новый лист, и у меня та же ошибка; и я не знаю почему.

Public Sub RequestShippingQuote()
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    Dim lCounter As Long
    Set objOutlook = Outlook.Application 'Set Objects
    Dim OutAccount As Outlook.Account
    Set OutAccount = objOutlook.Session.Accounts.Item(4)
    Dim mymsg As String
    For lCounter = 2 To 100
        If IsEmpty(Sheet1.Range("C" & lCounter).Value) = True Then 'Email if False
        Else
            Set objMail = objOutlook.CreateItem(olMailItem)
            objMail.To = Sheet1.Range("C" & lCounter).Value 'To
            objMail.Subject = "Quote Request" 'Subject
            mymsg = "Hello," & vbCrLf
            mymsg = mymsg & "Please provide freight quote for the following:" & vbCrLf
            mymsg = mymsg & "Commodity: " & Sheet2.Range("B7").Value & vbCrLf
            mymsg = mymsg & "" & Sheet2.Range("B9").Value & " info is as follows:" & vbCrLf
            mymsg = mymsg & "" & Sheet2.Range("B13").Value & " " & Sheet2.Range("B9").Value & vbCrLf
            mymsg = mymsg & "  " & Sheet2.Range("B18").Value & " W x " & Sheet2.Range("B19").Value & " L x " & Sheet2.Range("B20").Value & " H x " & vbCrLf
            mymsg = mymsg & "  " & Sheet2.Range("B15").Value & " lbs" & vbCrLf
            mymsg = mymsg & "From: " & vbNewLine & Sheet2.Range("B26").Value & vbCrLf
            mymsg = mymsg & "" & Sheet2.Range("B28").Value & vbCrLf & vbCrLf
            mymsg = mymsg & "" & Sheet2.Range("B30").Value & vbCrLf
            mymsg = mymsg & "" & Sheet2.Range("B32").Value & vbCrLf
            mymsg = mymsg & "" & Sheet2.Range("B34").Value & vbCrLf & vbCrLf
            mymsg = mymsg & "Pickup Hours: " & Sheet2.Range("B36").Value & vbCrLf & vbCrLf
            mymsg = mymsg & "Notes:" & vbNewLine & Sheet2.Range("B38").Value & vbCrLf
            mymsg = mymsg & "To:" & vbNewLine & Sheet2.Range("B41").Value & vbCrLf
            mymsg = mymsg & "" & Sheet2.Range("B43").Value & vbCrLf
            mymsg = mymsg & "Notes: " & vbNewLine & Sheet2.Range("B53").Value & vbNewLine & Sheet2.Range("B54").Value 'Email Body
            objMail.Body = mymsg

            'objMail.Close (olSave) 'Draft Email
            objMail.Display 'Display Email

            Set objMail = Nothing 'Close the object
    End If
    Next 'May need to be in the if statement, not sure
    MsgBox "Done", vbInformation
End Sub

При попытке запустить этот код возникает ошибка «Ошибка компиляции: определяемый пользователем тип не определен».

Я буду признателен за любую помощь.

решение1

Если бы вы включили OPTION EXPLICIT, ваш VBA уведомил бы вас о неудачных объявлениях переменных, таких как «olMailItem».

Когда я это обнаружил, я остановился, поскольку могут существовать и другие необъявленные переменные.

решение2

Я выяснил, почему на одном листе это сработало так, как задумано, а на другом — нет.

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

Ответ: Инструменты > Ссылки > Активировать библиотеку объектов Microsoft Outlook xx.x

Теперь работает так, как задумано.

Связанный контент