2016-12-29 3 views
-1

Ich versuche eine E-Mail-Funktion für mein Team zu automatisieren. Ich bin auch ein Neuling bei diesem Thema, also verzeiht bitte die grundlegende Kodierung hier. Ich bin die 91 Fehler immer Variable Nachricht Objekt oder mit Blockvariablen nicht gesetztObjektvariable oder mit Blockvariable nicht gesetzt (Fehler 91) Bitte assistieren

Hier ist der Code:

Sub Notification() 
    Dim outobj, mailobj 
    Dim objUserPrmt1 As Object 
    Dim strUserPrmt1 
    Dim message, title, defaultValue As String 

    message = "Enter your issue" 
    title = "InputBox Demo" 
    defaultValue = "No Issue" 

    Set outobj = CreateObject("Outlook.Application") 
    Set mailobj = outobj.CreateItem(0) 
    Set strUserPrmt1 = objUserPrmt1.CreateItem(InputBox(message, title, defaultValue, 25, 45)) 

    With mailobj 
    .To = "[email protected]" 
    .Subject = "Notification:" strUserPrmt1 
    .Body = "Test" 
    '.Send 
    .Display 
    End With 

    'Clear the memory 
    Set outobj = Nothing 
    Set mailobj = Nothing 
    Set strUserPrmt1 = Nothing 
    Set objUserPrmt1 = Nothing 
End Sub 

der Hoffnung, jemand kann mir zeigen, wo ich versagt haben.

+3

Dies ist VBA und nicht VBScript. objUserPrmt1 wird verwendet, aber nie initialisiert. –

+0

Vielleicht ist Ihr Problem mit 'strUserPrmt1'. Deklariere es als 'string' und benutze' strUserPrmt1 = InputBox (message, title, defaultValue, 25, 45) '. –

+0

Nicht sicher, wo ich initialisieren muss, können Sie ein Beispiel geben? –

Antwort

1

Das Problem ist, dass Sie eine Objektvariable objUserPrmt1 deklariert haben, aber Sie setzen es nie gleich, daher heißt es bei seinem Standardwert von Nothing. Trotzdem versuchte man dieses Stück nichts in der Leitung verwendet:

Set strUserPrmt1 = objUserPrmt1.CreateItem(InputBox(message, title, defaultValue, 25, 45)) 

die zweifellos die Linie, die den Fehler warf (etwas, was man in der Frage nach expliziter sein sollte).

Sie scheinen zu versuchen, die CreateItem Methode des Outlook-Objektmodells zu verwenden. Documentation zeigt, dass dies eine Methode eines Application Objekts ist. Da du schon ein solches Objekt hast (outobj) ist es gar nicht klar was möglichen Zweck objUserPrmt1 haben soll. Warum nicht einfach outobj verwenden?

Nachdem dies gesagt ist, wenn Sie das Problem Zeile ersetzen:

Set strUserPrmt1 = outobj.CreateItem(InputBox(message, title, defaultValue, 25, 45)) 

werden Sie wahrscheinlich immer noch eine Fehlermeldung angezeigt (wenn auch nicht die gleichen Fehler). Das ist, weil die Dokumentation, die ich verknüpfte, besagt, dass die CreateItem-Methode eine OlItemType constant erwartet, aber Sie übergeben es eine Zeichenfolge.

Die InputBox gibt einen String zurück, so dass ich denke, dass @AlexP richtig ist, dass Sie, was Sie wollen wahrscheinlich einfach ist:

strUserPrmt1 = InputBox(message, title, defaultValue, 25, 45) 

Da eine Zeichenfolge kein Objekt ist es braucht nicht Set zu sein - - gerade zugewiesen.

Ich würde empfehlen, einfach objUserPrmt1 aus Ihrem Code zu löschen. Es hat keinen Grund für die Existenz und verursacht nur Ihren Code Fehler zu werfen. Stellen Sie sicher, dass Sie auch von den beiden Linien loszuwerden:

Set strUserPrmt1 = Nothing 
Set objUserPrmt1 = Nothing 

Auch würde es nicht schaden, strUserPrmt1 als String-Variable zu deklarieren, obwohl seine aktuelle implizite Deklaration als Variante ist ausreichend.

+0

Danke John, das hat funktioniert, um das Fehler 91 Problem zu umgehen. –

+0

Jetzt bekomme ich einen Laufzeitfehler 13 - Typenkonflikt, wenn ich Folgendes versuche: .Subject = "Notification:" Und strUserPrmt1, einen Ratschlag? –

+0

Macht nichts, sorry, ich habe es herausgefunden, ich sollte das & anstelle des Wortes Und verwenden –

Verwandte Themen