Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Tabellenblätter abspeichern und per Mail versenden
#1
Hallo zusammen

Ich habe mir mit Mühe einen Code zusammengestellt (wird wohl ein wenig umständlich geschrieben sein) und bin auf zwei Probleme gestossen.
Der Code macht eigentlich nichts anderes, als die einzelnen Tabellenblätter in einer Datei temporär abzuspeichern und packt diese in eine E-Mail.

Nun zu meinen Problemen:

1. In der Quelldatei sind viele Formeln, welche ich nicht mitschicken möchte. Gibt es die Möglichkeit, dass nur die Werte kopiert werden?
2. Neben dem einzelnen Tabellenblatt, generiert es noch ein zweites welches 'Sheet1' heisst. Ist eigentlich nicht weiter schlimm. Wäre nur schön, wenn das nicht erscheint.

Kann mir jemand weiterhelfen? Ich komme nicht weiter...

Gruss
Mexx


Zitat:Sub SendMailtoSCorEcPO()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
           Dim ws As Worksheet
           Dim AWS As Workbook
           Dim NameDatei As String
           Dim Pfad As String
                
           For Each ws In ThisWorkbook.Worksheets
          
           NameDatei = ws.Range("E7") & "_" & ws.Range("E4") & ".xlsx"
          
           If Not ws.Name = "Übersicht" Then
               Set objOL = CreateObject("Outlook.Application")
          
               Set objMail = objOL.CreateItem(0)
                  
                  
                    Set AWS = Workbooks.Add
                    Pfad = "C:\Users\" & Environ("Username") & "\Desktop\" & NameDatei
                    AWS.SaveAs Pfad
                    ws.Copy Before:=Workbooks(NameDatei).Sheets(1)
                    AWS.SaveAs Pfad
                    ws.UsedRange.Copy
                    xMailBody = "Please check file enclosed"
          
               With objMail
              
                   .To = ws.Range("H4")
                   .CC = ws.Range("H5")
                   .BCC = ""
                  
                   .Attachments.Add Pfad
                        
                   .Subject = "Cost" & " " & Range("E7") & " " & "-" & " " & Range("E4")
                  
                   .Body = xMailBody
          
          
                   .Display
                  
               End With
              
               Set objOL = Nothing
               AWS.Close
               Set AWS = Nothing
                End If
               Next
               Kill Pfad
           Application.DisplayAlerts = True
           Application.ScreenUpdating = True
End Sub
Antworten Top
#2
Hallöchen,

1) kopiere nach dem SaveAs in der temp. Datei den benutzten Bereich und füge anschließend die Werte ein
2) eine neue Mappe hat immer ein erstes Blatt. Lösche das Blatt nach dem Einfügen der Übersicht oder kopiere die Übersicht in eine neue Datei, dann brauchst Du Workbooks.Add nicht.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Moin auch von mir!
Da nur die Werte gewünscht sind, wäre es das Einfachste, die einzelnen Blätter als PDF anzuhängen.
Dazu gibt es die Worksheet.ExportAsFixedFormat-Methode.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#4
Hi Ralf,

Zitat:Da nur die Werte gewünscht sind, wäre es das Einfachste, die einzelnen Blätter als PDF anzuhängen.

ich schließe da nicht gleich draus, dass eine pdf für den Empfänger ausreicht. Ich ärgere mich gefühlt 100 Jahre meines Berufslebens über solche pdf, wenn ich die Daten später selber weiterverarbeiten will Sad (... zumindest macht einen das nicht jünger Smile )

Ansonsten ja, wäre sicher der einfachere und bessere Weg Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallo zusammen

Ich habe folgendes zum 1. Punkt probiert, aber irgendwie will es nicht so wie ich es will. Findet ihr den Fehler?


Zitat:Sub SendMailtoSCorEcPO()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
           Dim ws As Worksheet
           Dim AWS As Workbook
           Dim NameDatei As String
           Dim Pfad As String
                
           For Each ws In ThisWorkbook.Worksheets
          
           NameDatei = ws.Range("E7") & "_" & ws.Range("E4") & ".xlsx"
          
           If Not ws.Name = "Übersicht" Then
               Set objOL = CreateObject("Outlook.Application")
          
               Set objMail = objOL.CreateItem(0)
                  
                  
                    Set AWS = Workbooks.Add
                    Pfad = "C:\Users\" & Environ("Username") & "\Desktop\" & NameDatei
                    AWS.SaveAs Pfad
                    ws.Copy Before:=Workbooks(NameDatei).Sheets(1)
                    ws.UsedRange.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
                         SkipBlanks:=False, Transpose:=False

                    AWS.SaveAs Pfad
                    ws.UsedRange.Copy
                    xMailBody = "Please check file enclosed"
          
               With objMail
              
                   .To = ws.Range("H4")
                   .CC = ws.Range("H5")
                   .BCC = ""
                  
                   .Attachments.Add Pfad
                
                   .Subject = "Cost" & " " & Range("E7") & " " & "-" & " " & Range("E4")
                  
                   .Body = xMailBody
          
          
                   .Display
                  
               End With
              
               Set objOL = Nothing
               AWS.Close
               Set AWS = Nothing
                End If
               Next
               Kill Pfad
           Application.DisplayAlerts = True
           Application.ScreenUpdating = True
End Sub

Ich muss die Datei leider unbedingt in Excel versenden, da der Empfänger diese weiterverwenden muss..

Gruss
Mexx
Antworten Top
#6
Hallöchen,

Zitat:aber irgendwie will es nicht so wie ich es will.

was ist anders?

**************************

warum

ws.UsedRange.PasteSpecial

und nicht z.B.

ws.Range("A1").PasteSpecial

???
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
Hallo schauan

Ich habe es mit ws.Range("A1").PasteSpecial versucht, aber es kommt folgender Fehler: "PasteSpecial method of Range class failed".
Jetzt wird eine neue Datei erstellt mit dem 1. Blatt, aber nicht im Mail angehängt und die Formeln hat es leider auch übernommen.

Gäbe es noch andere Möglichkeiten?

Gruss
mexx
Antworten Top
#8
Hallöchen,

mit Deinem code gibt es eigentlich ein paar Probleme in der Reihenfolge. Ein paar Kommentare würden das verdeutlichen

'Kopie des Blattes in eine andere Datei vor das Blatt 1
ws.Copy Before:=Workbooks(NameDatei).Sheets(1)
'Einfügen des benutzten Bereiches als Werte
ws.UsedRange.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'"Speichern als" der anderen Datei
AWS.SaveAs Pfad
'Kopieren des benutzten Bereiches
ws.UsedRange.Copy


Schaue Dir speziell mal die Aktionen mit dem benutzten Bereich an. Ich würde den erst kopieren und dann einfügen und möglichst beides vor dem "Speichern als". Dann passt vermutlich auch die Alternative mit ..A1..
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo nochmals

Ich habe nun ws.UsedRange.Copy durch ws.Range("A1).Copy abgeändert und über ws.Range("A1").PasteSpecial gesetzt. Nun macht das Makro wieder was es soll, danke schonmal!
Es fügt mir aber nach wie vor die Formeln ein und nicht die Werte... Gibt es da noch einen anderen Ansatz?

Gruss
mexx
Antworten Top
#10
Hallöchen,

das mit den copy hat schon gepasst. Nur beim Einfügen würde A1 reichen.
Das ist wie wenn Du so was manuell machst. Du markierst einen größeren Bereich, kopierst, und dann reicht es wenn Du zum Einfügen auf eine Zelle klickst.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste