Я работаю над кодом, который сэкономит мне довольно много времени. Он предназначен для составления нескольких писем поставщикам, чтобы получить предложение по одному и тому же товару.
Лист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
Теперь работает так, как задумано.