Office: [VBA] Zwei neue Dateien als Emailanhang erzeugen

Helfe beim Thema [VBA] Zwei neue Dateien als Emailanhang erzeugen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich bastle gerade an meinem Code herum und komme nicht weiter. Das Ziel: In Tabelle1 liegen die Daten des ersten Blattes. Aus diesem... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von denpei, 16. Februar 2023.

  1. denpei Neuer User

    [VBA] Zwei neue Dateien als Emailanhang erzeugen


    Hallo zusammen, ich bastle gerade an meinem Code herum und komme nicht weiter.

    Das Ziel:
    In Tabelle1 liegen die Daten des ersten Blattes. Aus diesem Blatt soll eine neue Datei ohne Formeln, nur mit Werten & Formatierung entstehen, welche dann im weiteren Verlauf an eine Email gehängt werden soll. Das gleiche soll dann auch mit Tabelle4 passieren, sodass am Ende zwei *.xlsx Dateien an der Email hängen.

    Es soll hier nur um das korrekte Erzeugen dieser beiden Dateien an eine Email gehen. Der Rest des Codes, der im Folgenden nicht angefügt ist, funktioniert tadellos.

    Hinweis: Ich kopiere für beide Dateien die Daten zunächst in jeweils versteckte Blätter, um sie daraus dann in die neuen *.xlsx Dateien zu kopieren. Das ist wahrscheinlich Quark, daher bin ich sehr an einem effizienteren Weg interessiert.

    Der Code:
    Dim strDatei As String
    Dim strDatei2 As String
    Dim strPfad As String
    Dim Mail As Object
    Dim outApp As Object


    Set outApp = CreateObject("Outlook.Application")
    Set Mail = outApp.CreateItem(0)
    strPfad = "C:\Users\Public"

    With Tabelle1
    .Unprotect
    .Range("A1:H35").Copy
    .Paste Destination:=Tabelle16.Cells(1)
    With Tabelle16
    .UsedRange.Value = ActiveSheet.UsedRange.Value
    End With
    .Protect
    End With
    Tabelle16.Copy
    ActiveWorkbook.SaveAs strPfad & "\" & "Bestellung"
    strDatei = ActiveWorkbook.FullName

    With Tabelle4
    .Unprotect
    .Range("A1:E14").Copy
    .Paste Destination:=Tabelle17.Cells(1)
    With Tabelle17
    .UsedRange.Value = ActiveSheet.UsedRange.Value​
    End With
    .Protect
    End With
    Tabelle17.Copy
    ActiveWorkbook.SaveAs strPfad2 & "\" & "Transportauftrag"
    strDatei2 = ActiveWorkbook.FullName​
    -----------------------------------------------------------------------------------------
    Platzhalter für dazwischenliegenden Code zur Erzeugung der Email
    -----------------------------------------------------------------------------------------​
    Workbooks("Bestellung.XLSX").Close SaveChanges:=False
    Workbooks("Transportauftrag.XLSX").Close SaveChanges:=False

    Das Ergebnis:
    Die erste Datei (erzeugt aus Tabelle1) ist inhaltlich korrekt. Die zweite Datei (sollte Daten aus Tabelle4 enthalten) enthält Daten aus Tabelle1?!. das Anhängen an die Email klappt wiederum anstandslos.

    Was mache ich falsch?
     
    Zuletzt bearbeitet: 16. Februar 2023
  2. Doming
    Doming hat Ahnung
    Hallo denpei
    ich muss zugeben, in ExcelVBA bewege ich mich nicht so sicher, aber bist Du sicher, dass man With/EndWith-Abschnitte verschachteln kann?
    Ich würde Deinen Code wohl eher so schreiben (keine Ahnung, ob das läuft)
    Code:
    Dim strDatei As String
    Dim strDatei2 As String
    Dim strPfad As String
    Dim Mail As Object
    Dim outApp As Object
    
        Set outApp = CreateObject("Outlook.Application")
        Set Mail = outApp.CreateItem(0)
        strPfad = "C:\Users\Public"
    
        With Thisworkbook.Tabelle1
            .Unprotect
            .Range("A1:H35").Copy
            .Paste Destination:=Tabelle16.Cells(1)
            ThisWorkbook.Tabelle16.UsedRange.Value = ActiveSheet.UsedRange.Value
            .Protect
        End With
        ThisWorkbook.Tabelle16.Copy
        ActiveWorkbook.SaveAs strPfad & "\" & "Bestellung"
        strDatei = ActiveWorkbook.FullName
    
        With ThisWorkbook.Tabelle4
            .Unprotect
            .Range("A1:E14").Copy
            .Paste Destination:=Tabelle17.Cells(1)
            ThisWorkbook.Tabelle17.UsedRange.Value = ActiveSheet.UsedRange.Value
            .Protect
        End With
        ThisWorkbook.Tabelle17.Copy
        ActiveWorkbook.SaveAs strPfad2 & "\" & "Transportauftrag"
        strDatei2 = ActiveWorkbook.FullName
    
        -----------------------------------------------------------------------------------------
        Platzhalter für dazwischenliegenden Code zur Erzeugung der Email
        -----------------------------------------------------------------------------------------
    
        Workbooks("Bestellung.XLSX").Close SaveChanges:=False
        Workbooks("Transportauftrag.XLSX").Close SaveChanges:=False
     
  3. HKindler
    HKindler hat Ahnung
    Hi,

    natürlich kann man With-Blöcke ineinander verschachteln. Das steht sogar in der Online-Hilfe!

    ThisWorkbook.Tabelle1.xxx funktioniert nicht. Den Codename kann man nur in der eigenen Datei (=ThisWorkbook) ansprechen. Daher reicht Tabelle1.xxx. Will man den Codename eines Blattes in einer anderen Datei verwenden, dann muss man eine Schleife über alle Sheets bilden und den Codename für jedes Blatt prüfen.

    Zum ursprünglichen Code: Ich würde direkt das entsprechende Blatt kopieren, Formeln durch Werte ersetzen und dann speichern und schließen. Also ungefähr so:
    Code:
    Tabelle1.Copy
    With ActiveWorkbook
        With Worksheets(1)
            .UsedRange.Value = .UsedRange.Value
        End With
        .SaveAs "Pfad\Dateiname"
        .Close
    End With
     
    HKindler, 17. Februar 2023
    #3
Thema:

[VBA] Zwei neue Dateien als Emailanhang erzeugen

Die Seite wird geladen...
  1. [VBA] Zwei neue Dateien als Emailanhang erzeugen - Similar Threads - VBA Dateien Emailanhang

  2. per VBA in Datei springen und wieder in Ausgangs Datei zurück

    in Microsoft Excel Hilfe
    per VBA in Datei springen und wieder in Ausgangs Datei zurück: Hallo zusammen, ich versuche mal mein Problem zu beschreiben. Ich habe zwei Dateien "Zählerstände" und "Abrechnung" Die Datei "Abrechnung" ist leer und wird immer unter dem Aktuellem Jahr neu...
  3. einzelne Spalten in neue Dateien kopieren

    in Microsoft Excel Hilfe
    einzelne Spalten in neue Dateien kopieren: Hallo zusammen, ich brauche ein wenig Hilfestellung: Ich habe eine Tabelle (exemplarisch) Titel A Titel B Spalte A Spalte B...
  4. Zugriff auf andere Excel Datei ohne aktives Öffnen

    in Microsoft Excel Hilfe
    Zugriff auf andere Excel Datei ohne aktives Öffnen: Liebe Community, ich habe mir eine Formel geschrieben um Werte aus einer anderen Excel Datei in meine Haupt Excel Datei einzufügen. Leider muss die Datei aus der ich die Daten haben will immer...
  5. VBA - Fehlermeldung "Excel kann auf Datei nicht zugreifen"

    in Microsoft Excel Hilfe
    VBA - Fehlermeldung "Excel kann auf Datei nicht zugreifen": Hallo, ich habe folgenden Code bei dem ich leider immer eine Fehlermeldung erhalte. Der Fehler ist Folgender Laufzeitfehler '1004" Excel kann auf die Daten in ''Desktop" nicht zugreifen. Die...
  6. VBA verschiedene definierte "nicht leere" Bereiche aus Datei kopieren in neue Datei

    in Microsoft Excel Hilfe
    VBA verschiedene definierte "nicht leere" Bereiche aus Datei kopieren in neue Datei: Hallo zusammen, nachdem ich jetzt vieles hin- und her versucht habe komme ich nicht wirklich zu einem Ergebnis das ich gerne hätte. Ich habe einen Ordner in dem mehrere Excel Dateien...
  7. Bereich aus geschlossener Datei auslesen VBA

    in Microsoft Excel Hilfe
    Bereich aus geschlossener Datei auslesen VBA: Hallo, ich möchte bereiche aus geschlossener Datei Auslesen und ins aktuellen Blatt übernehmen. Beispiel Codes dazu habe ich einige gefunden nur keine passende zu meinem Problem. Die geschlossene...
  8. Ini-Dateien per VBA erzeugen

    in Microsoft Excel Hilfe
    Ini-Dateien per VBA erzeugen: Liebe Community, ich suche nach einer Lösung für folgende Fragestellung: Ich möchte aus einer Liste für jede Zelle einer Spalte eine neue ini-Datei erzeugen, in die der Inhalt der jeweiligen Zelle...
  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