El código VBA funciona en una hoja y devuelve un tipo definido por el usuario no definido en otra

El código VBA funciona en una hoja y devuelve un tipo definido por el usuario no definido en otra

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.

información relacionada