Office: (Office 2016) Makro läuft in einer Datei einwandfrei, in einer anderen kommt es zur Fehlermeldung

Helfe beim Thema Makro läuft in einer Datei einwandfrei, in einer anderen kommt es zur Fehlermeldung in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Liebe Excel-VBA Spezialisten Ich habe ein seltsames Problem. Das untenstehende Skript läuft in einer Excel-Datei absolut einwandfrei. Für Tests habe... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Compili, 15. Oktober 2019.

  1. Makro läuft in einer Datei einwandfrei, in einer anderen kommt es zur Fehlermeldung


    Liebe Excel-VBA Spezialisten

    Ich habe ein seltsames Problem. Das untenstehende Skript läuft in einer Excel-Datei absolut einwandfrei. Für Tests habe ich es in einer separaten Datei erstellt. Kopiere ich es in eine sehr umfangreiche Excel-Datei, dann kommt es zur Fehlermeldung 'Fehler beim Kompilieren: Variable nicht gefunden'. Dabei wird in der Zeile
    Set objMail = olApp.Session.GetDefaultFolder(olFolderInbox).Items(1)
    olFolderInbox markiert.

    Ich bin für jede Hilfe dankbar!

    Herzliche Grüsse
    Compili

    Sub MailSpeichern()
    Dim olApp As Object
    Dim Pfad, Dateiname, Ort As String
    Set olApp = GetObject(, "OutLook.Application")
    Set objMail = olApp.Session.GetDefaultFolder(olFolderInbox).Items(1)
    Pfad = "\\backend-01\marketing"
    Dateiname = "BGr.msg"
    Ort = Pfad & Dateiname
    objMail.SaveAs Ort, OlSaveAsType.olMSG
    End Sub


    PS: In einer anderen Routine benötige ich nur den Command 'objMail.SaveAs Ort, OlSaveAsType.olMSG'. Auch hier kommt es (gleiche Excel-Datei) zur Fehlermeldung: 'Laufzeitfehler 424: Objekt erforderlich'
     
    Zuletzt von einem Moderator bearbeitet: 30. November 2020
    Compili, 15. Oktober 2019
    #1
  2. Mase_ User
    Moin,

    ist zwischen .Item und s(1) ein Leerzeichen?

    Desweiteren würde ich Option Explicit generell einsetzen.
     
  3. Hallo mase

    nein, es gibt kein Leerzeichen dazwischen. Option Explicit habe ich immer aktiviert.

    Herzliche Grüsse
    Compili
     
    Compili, 15. Oktober 2019
    #3
  4. Exl121150 Erfahrener User

    Makro läuft in einer Datei einwandfrei, in einer anderen kommt es zur Fehlermeldung

    Hallo,

    in deinem Makro gibt es eine Reihe von Problemen:
    1. Du hast zwar die Variablen "Pfad", "Dateiname" mit DIM deklariert, aber vermutlich in der Absicht, dass es String-Variablen sein sollten. Tatsächlich sind sie aber "Variant"-Variablen, weil kein Datentyp mit "As String" zugeordnet wurde. - Nur die Variable "Ort" hat Datentyp "String".
    2. Die Variablen "objMail" und "olFolderInbox" sind überhaupt nicht deklariert - es sei denn auf der übergeordneten Modulebene - und müssen daher unter Voraussetzung von "Option Explicit" eine entsprechende Compiler-Fehlermeldung auslösen.
    3. Damit es mit "olFolderInbox" keine Probleme gibt, gibt es 3 Möglichkeiten:
      a) Sie wird als Konstante deklariert mit: Const olFolderInbox As Integer = 6
      b) Sie wird als Variable deklariert mit: Dim olFolderInbox As Integer: olFolderInbox = 6
      c) Im VBA-Menü > Extras > Verweise... > Verfügbare Verweise > Häkchen bei "Microsoft Outlook 16.0 Object Library", um die Outlook-Objektbibliothek einzubinden und dadurch ein "Early-Binding" mit Outlook zu ermöglichen. In dieser Bibliothek ist nämlich auch die Konstante "olFolderInbox = 6" definiert.
    4. Ferner gibt es ein Problem mit "OlSaveAsType.olMSG" in der letzten Zeile (vgl. Punkt 3a-c): Const OlSaveAsType.olMSG = 3
      oder aber du wendest Punkt 3c) an.
     
    Exl121150, 15. Oktober 2019
    #4
  5. Herzlichen Dank Anton!

    Es hat mir weitergeholfen. Ich habe die Korrekturen vorgenommen (korrekte Deklarationen, Object-Library). Ich finde es toll, dass sich echte Profis sich der Problematik annehmen.
    Ich habe immer noch ein Problem: Wie sieht die Befehlszeile des letzten Commands (objMail.SaveAs Ort, OlSaveAsType.olMSG) korrekt aus? Ich habe es versucht, aber es klappt einfach nicht. Danke jetzt schon für dein Feedback!

    Herzliche Grüsse
    Compili
     
    Compili, 15. Oktober 2019
    #5
  6. Exl121150 Erfahrener User
    Hallo,

    ich nehme an, dass die Zuweisung zur Dateipfad-Variablen nicht
    Pfad = "\\backend-01\marketing"
    sondern
    Code:
    [COLOR="#0000CD"]Pfad = "\\backend-01\Marketing\"
    [/COLOR]
    lauten muss, sodass sich schließlich in der Variablen "Ort" der Stringwert
    "\\backend-01\Marketing\BGr.msg"
    ergibt.
    Den fehlenden Backslash anzumerken, hatte ich im vorigen Posting leider übersehen.
    Zu guter Letzt sollte noch die Outlook-Applikationsinstanz für die Garbage-Collection von Windows freigegeben werden (Set olApp = Nothing).

    Der gesamte VBA-Code schaut dann wie folgt aus:
    Code:
    Option Explicit
    
    [COLOR="#0000CD"]#Const EarlyBinding = True[/COLOR]
    
    Sub MailSpeichern()
    
       Dim Pfad As String, Dateiname As String, Ort As String
    
    [COLOR="#0000CD"]#If EarlyBinding Then[/COLOR]
       Dim olApp As [B]New[/B] Outlook.Application
       Dim olFolder As Outlook.Folder
       Dim objMail As Outlook.MailItem
    [COLOR="#0000CD"]#Else[/COLOR]
       Dim olApp As Object
       Dim olFolder As Object
       Dim objMail As Object
       Const olFolderInbox = 6
       Const olMSG = 3
       Set olApp = CreateObject("Outlook.Application")
    [COLOR="#0000CD"]#End If[/COLOR]
       
       Set olFolder = olApp.Session.GetDefaultFolder(olFolderInbox)
       Set objMail = olFolder.Items(1)
       Pfad = "\\backend-01\marketing\"
       Dateiname = "BGr.msg"
       Ort = Pfad & Dateiname
       objMail.SaveAs Ort, olMSG
       
       Set olApp = Nothing
       
    End Sub
    
    Alle Codezeilen, die mit "#" beginnen, dienen dabei der bedingten Compilierung:
    Das Makro nimmt dabei an, dass die Outlook-Objectlibrary eingebunden ist (#Const EarlyBinding = True).
    Sollte dies tatsächlich nicht der Fall sein, müsste die 1. Zeile mit "#" geändert werden auf: #Const EarlyBinding = False
    In Abhängigkeit von dieser Code-Zeile werden dann nur die zutreffenden Codezeilen (#If EarlyBinding Then … #Else ... #End if) compiliert und der alternative Code als Kommentar übergangen.
     
    Exl121150, 15. Oktober 2019
    #6
  7. Hallo Anton

    Das klappt super! Allerdings habe ich etwas unterschlagen, denn ich muss für die einzelnen Vorträge vorgängig noch Betreffs, Anhänge einfügen. Bei mir kommt es zu Konflikten beim Command
    With objMail
    .To = ""
    .cc = ""
    .Subject = Worksheets("Optionen").Range("Betreffzeile").Value
    .Body = "Guten Tag" & Chr(10) & Chr(10) & "Sie erhalten ......"
    .Attachments.Add Datei01
    End With

    Wahrscheinlich sind die Deklarationen widersprüchlich. Kannst du mir weiterhelfen? Wenn diese Klippe übersprungen ist, dann bin ich überglücklich

    Herzliche Grüsse
    Compili
     
    Compili, 15. Oktober 2019
    #7
  8. Makro läuft in einer Datei einwandfrei, in einer anderen kommt es zur Fehlermeldung

    ... Nachtrag, sorry:

    Ich habe vergessen '#Const EarlyBinding = True' einzufügen, was ich jetzt gemacht habe. Nun läuft es so, wie es sollte, aber die Outlook-Datei wird als Text-Datei gespeichert und nicht als Outlook-Datei.
     
    Compili, 15. Oktober 2019
    #8
  9. Gestern habe ich dein Makro in meine Routine eingebaut und heute Morgen habe ich nochmals alles überprüft. Jetzt läuft das Makro, aber es speichert die Outlook-Datei ohne Erweiterung '.MSG'. Füge ich im File Explorer der gespeicherten Datei die Erweiterung '.MSG' an, dann kann die Datei auch als Outlook Objekt geöffnet werden.
    Wie kann ich direkt eine '.MSG'-Datei erstellen?
     
    Compili, 16. Oktober 2019
    #9
  10. Exl121150 Erfahrener User
    Hallo,

    E-Mails können in der Regel in einem von 3 (bzw. 4) Formaten gehalten sein:
    1) Text-Format (olTXT)
    2) RichText-Format (RTF) (olRTF)
    3) HTML-Format (olHTML)
    4) Word-Format (olDoc - nur unter bestimmten Bedingungen möglich)
    wobei das Text-Format als das Standardformat gilt.

    Sieht man bei Microsoft bei der OlSaveAsType-Aufzählung nach: https://docs.microsoft.com/de-de/office/vba/api/outlook.olsaveastype
    erhält man die möglichen Konstanten, mit denen ein "Speichern-Unter" ausgeführt werden kann, wobei für E-Mails nicht alle Konstanten gleich sinnvoll sind.
    Ferner erhält man unter dem Link: https://docs.microsoft.com/de-de/office/vba/api/outlook.mailitem.saveas
    weitere Infos zur SaveAs-Methode des MailItem-Objektes.
     
    Exl121150, 16. Oktober 2019
    #10
  11. Hallo Anton

    Besten Dank für deine Hilfe. Du hast mir sehr geholfen! Jetzt ist alles in bester Ordnung

    Freundliche Grüsse
    Compili
     
Thema:

Makro läuft in einer Datei einwandfrei, in einer anderen kommt es zur Fehlermeldung

Die Seite wird geladen...
  1. Makro läuft in einer Datei einwandfrei, in einer anderen kommt es zur Fehlermeldung - Similar Threads - Makro läuft Datei

  2. Seit Win 11 Zugriffsprobleme bei Excel über Makros

    in Microsoft Excel Hilfe
    Seit Win 11 Zugriffsprobleme bei Excel über Makros: Guten Tag! Ich habe vor einer Woche mein Windows 10 auf Windows 11 geupgraded, und seitdem habe ich extreme Schwierigkeiten mit meinem Excel. Mit Windows 10 funktionierte alles so, wie es sollte,...
  3. VBA-Makro zur Zellenformatierung Syntax probleme

    in Microsoft Excel Hilfe
    VBA-Makro zur Zellenformatierung Syntax probleme: Hallo zusammen, ich möchte per Makro Zellen formatieren. Tausender-Trennzeichen 3 Nachkommastellen Positive Zahlen Schwarz Negative Zahlen Rot Nullwert mit - Hinter der Zahl soll noch eine...
  4. Rechnungsvorlage mit Kundenstamm ohne Makro

    in Microsoft Excel Hilfe
    Rechnungsvorlage mit Kundenstamm ohne Makro: Hallo zusammen, habe folgendes Problem. Habe eine Liste mit Kunden. In dieser Liste sind Waren dem jeweiligen Kunden Artikel mit Preis und Packschema hinterlegt. Ich habe eine Rechnungsvorlage...
  5. Word-Dateien über Excel in eine ausgewählte Word-Datei übertragen per Makro

    in Microsoft Excel Hilfe
    Word-Dateien über Excel in eine ausgewählte Word-Datei übertragen per Makro: Hallo Zusammen, ich hoffe es kann mir jemand weiterhelfen in dem Forum. Ich habe ein Makro in der Excel-Datei (Reiter: Datenbank) im Anhang, wo ich mir von allen Word-Dateien den Pfad und den...
  6. Probleme mit Makro das jede Zeile in der ein "Text" steht löscht?!

    in Microsoft Excel Hilfe
    Probleme mit Makro das jede Zeile in der ein "Text" steht löscht?!: Hallo Leute, Ich habe mal wieder ein Problem, ich hoffe ihr könnt mir hier helfen! :) Habe hier schon ein Makro soweit, aber es macht halt noch nicht genau das was es soll, woran ich natürlich...
  7. Symbol per Makro einfügen

    in Microsoft Excel Hilfe
    Symbol per Makro einfügen: Hallo zusammen, ich habe aktuell folgendes in meiner Excel mittels bedingter Formatierung implementiert: Bei verschiedenen Zahlen, die in die Zellen A1-A5 eingetragen werden, werden diese durch...
  8. Makro Zip-Datei von Webseite runterladen, auspacken, kopieren

    in Microsoft Excel Hilfe
    Makro Zip-Datei von Webseite runterladen, auspacken, kopieren: Hallo Zusammen, ich habe ein Makro gefunden von dem ich denke, dass es koennen sollte was ich braeuchte, eine Datei herunterladen, auspacken und den Inhalt in die Datei kopieren in der das Makro...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden