Estoy trabajando en un código que me ahorrará bastante tiempo. Está destinado a redactar varios correos electrónicos a los proveedores para obtener una cotización sobre el mismo artículo.
Hoja1 tengo los datos del proveedor; nombre, correo electrónico y algo para marcar si quiero enviarle una solicitud a ese proveedor o no. Hoja2 Tengo los detalles de la cotización requerida. Lo más interesante de esto es que funcionará en una hoja de trabajo en la que lo probé/refiné, pero no en su hoja de inicio. Incluso intenté copiar la información en una hoja nueva y aparece el mismo error; y no sé por qué.
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
Cuando intento ejecutar este código, aparece el mensaje "Error de compilación: tipo definido por el usuario no definido".
Agradezco cualquier ayuda.
Respuesta1
Si hubiera habilitado OPCIÓN EXPLÍCITA, su VBA le notificaría sobre sus fallas al declarar variables como "olMailItem".
Cuando encontré esto, me detuve; es posible que también existan otras variables no declaradas.
Respuesta2
Descubrí por qué funcionó según lo previsto en una hoja pero no en otra.
En la hoja en la que lo probé tenía una biblioteca activa que no estaba activa en la hoja en la que estaba intentando desarrollar esto. No sabía que cada hoja necesitaba que la biblioteca se activara por separado de las demás, pensé que era una configuración global.
La respuesta, Herramientas > Referencias > Activar la biblioteca de objetos Microsoft Outlook xx.x
Funciona según lo previsto ahora.