Anzeige
Archiv - Navigation
1720to1724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Abfrage ActiveSheet in Blatt 1 bis 12

VBA: Abfrage ActiveSheet in Blatt 1 bis 12
04.11.2019 21:32:41
Peer
Hallo.
Ich habe mir gerade aus einigen Internetschnipseln einen Code zum Versenden von Sheets gebastelt und er funktioniert auch schon ganz gut.
Nun möchte ich prüfen lassen, ob das aktive Sheet im dem Workbook eines der ersten 3 Blätter ist. Sie heißen "Januar" bis "März". Wenn nicht, soll es eine MsgBox anzeigen, ansonsten die Email-Routine ausführen.
Irgendwie stehe ich auf den Schlauch.
"If then else" funktioniert nur für ein Blatt (denke ich) und mit Arrays will es auch nicht klappen.
Hier mein bisheriger Versuch:
Dim mePDFD As String 'Anhang-Name
Dim MyOutApp As Object    'Email Client
Dim MyMessage As Object   'Email-Kopf
Dim Adressat As Object    'Empfänger
Dim arrMonat()
'Anhang-Name definieren
mePDFD = ThisWorkbook.Path & "\" & "Erfassungsbeleg für den Monat " & Format(ActiveSheet. _
Range("E4"), "MMMM"" ""YYYY") & ".pdf"
'aktuelle Tabelle in die Zwischenanlage kopieren
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mePDFD, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveWorkbook.Close False
Set MyOutApp = CreateObject("Outlook.Application")    'Email-Client festlegen
Set MyMessage = MyOutApp.CreateItem(0)                'neue Email erstellen
Set Adressat = Sheets("Parameter").Cells(30, 1)       'Empfänger aus Tabelle "Parameter"
arrMonat = Array("Januar", "Februar")
If ThisWorkbook.ActiveSheet = arrMonat Then
With MyMessage
.To = Adressat  'oder "peer.roedel@gmx.de"
.Subject = "Erfassungsbeleg" 'Betreffzeile
.body = "Lieber Kollege" & vbCrLf & vbCrLf _
& "Im Anhang der Erfassungsbeleg" & vbCrLf & vbCrLf & _
"Mit freundlichen Grüßen" & vbCrLf & ActiveSheet.Cells(5, 5)
.Attachments.Add mePDFD     'Anhang aus Zwischenanlage einfügen
.Display                    'alles anzeigen
End With
Else: MsgBox "kein Monat ausgewählt"
End If
Kill mePDFD
Set MyMessage = Nothing
Set MyOutApp = Nothing
Kann jemand helfen.
Vielen Dank
Peer

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Abfrage ActiveSheet in Blatt 1 bis 12
04.11.2019 22:37:28
Werner
Hallo Peer,
so;
Dim mePDFD As String 'Anhang-Name
Dim MyOutApp As Object    'Email Client
Dim MyMessage As Object   'Email-Kopf
Dim Adressat As Object    'Empfänger
Dim arrMonat()
'Anhang-Name definieren
mePDFD = ThisWorkbook.Path & "\" & "Erfassungsbeleg für den Monat " _
& Format(ActiveSheet.Range("E4"), "MMMM"" ""YYYY") & ".pdf"
'aktuelle Tabelle in die Zwischenanlage kopieren
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=mePDFD, Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
ActiveWorkbook.Close False
Set MyOutApp = CreateObject("Outlook.Application") 'Email-Client festlegen
Set MyMessage = MyOutApp.CreateItem(0)            'neue Email erstellen
Set Adressat = Sheets("Parameter").Cells(30, 1) 'Empfänger aus Tabelle "Parameter"
Select Case ActiveSheet.Name
Case "Januar", "Februar", "März"
With MyMessage
.To = Adressat  'oder "peer.roedel@gmx.de"
.Subject = "Erfassungsbeleg" 'Betreffzeile
.body = "Lieber Kollege" & vbCrLf & vbCrLf _
& "Im Anhang der Erfassungsbeleg" & vbCrLf & vbCrLf & _
"Mit freundlichen Grüßen" & vbCrLf & ActiveSheet.Cells(5, 5)
.Attachments.Add mePDFD     'Anhang aus Zwischenanlage einfügen
.Display                    'alles anzeigen
End With
Case Else
MsgBox "kein Monat ausgewählt"
End Select

Gruß Werner
Anzeige
AW: VBA: Abfrage ActiveSheet in Blatt 1 bis 12
05.11.2019 16:46:27
Peer
Hallo Werner. Entschuldige die späte Antwort.
Funktioniert super. Wie einfach es manchmal erscheint, wenn man zu kompliziert denkt.
Bis jetzt läuft erst die Prüfroutine ab und dann erfolgt entweder der "Email"-Block oder die MsgBox. Gerade hier merkt man, wenn das Blatt nicht im Prüfblock ist, wie z.B. "April", dann ist die Prüfroutine langsamer und bringt nach Feststellung, dass es nicht drin liegt, nach gewisser Zeit die MsgBox.Je nach Anzahl der Blätter einer Mappe fällt es merklich auf.
Hier meine Frage. Kann man den Code so "umbasteln", dass es schneller läuft oder dass erst die MsgBox und danach das Email öffnet?
Gruß
Peer
Anzeige
Rückfrage
05.11.2019 17:00:00
Werner
Hallo Peer,
mir stellt sich die Frage, ob man die Prüfung nicht einfach ganz an den Anfang des Codes stellen kann/soll.
So wie ich das sehe, könnte man ja auch auf die Erstellung der PDF verzichten wenn es sich nicht um die Blätter Januar bis März handelt, oder sehe ich das falsch?
Gruß Werner
AW: Rückfrage
05.11.2019 17:07:52
Peer
Hallo Werner.
Genau. Du siehst das richtig. Eigentlich soll das pdf erst erzeugt und ins Email angehängt werden, wenn die Gültigkeit außerhalb liegt.
Aber wie soll das dann aussehen?
Kleine Hilfe?
LG
Peer
AW: Rückfrage 2
05.11.2019 17:16:42
Werner
Hallo Peer,
ich nehme mal an, dass du weitere "Monatsblätter" in deiner Datei hast und das nicht nur auf die Monate Januar bis März gelten soll.
Dann würde ich das Pferd von hinten aufzäumen und nicht die Blätter abfragen bei denen der Code ausgeführt werden soll, sondern die Blätter, bei denen der Code nicht ausgeführt werden soll.
Dazu müsste ich aber die Namen aller Blätter wissen, bei denen der Code nicht laufen soll.
Gruß Werner
Anzeige
AW: Rückfrage 2
05.11.2019 17:37:12
Peer
Hallo Werner.
Ich habe eine Übungsdatei, bei der ich einige Blätter gelöscht habe. Bei der Original-Datei sind alle 12 Monate vorhanden (also 1 bis 12), und alle anderen Blätter sollten ausgenommen werden. Später könnte noch weitere Blätter als Hilfstabellen dazukommen. Derzeitige Blätter wären "Ferien", "Parameter", "Feiertage", die nicht die Routine durchlaufen sollen, also kein "Monat" sind.
Ich habe den Code einfach mal so geändert...
Dim mePDFD As String 'Anhang-Name
Dim MyOutApp As Object    'Email Client
Dim MyMessage As Object   'Email-Kopf
Dim Adressat As Object    'Empfänger
Dim arrMonat()
Select Case ActiveSheet.name
Case "Januar", "Februar"
'Anhang-Name definieren
mePDFD = ThisWorkbook.Path & "\" & "Erfassungsbeleg für den Monat " & Format(ActiveSheet. _
Range("E4"), "MMMM"" ""YYYY") & ".pdf"
'aktuelle Tabelle in die Zwischenanlage kopieren
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mePDFD, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveWorkbook.Close False
Set MyOutApp = CreateObject("Outlook.Application")    'Email-Client festlegen
Set MyMessage = MyOutApp.CreateItem(0)                'neue Email erstellen
Set Adressat = Sheets("Parameter").Cells(30, 1)       'Empfänger aus Tabelle "Parameter"
'arrMonat = Array("Januar", "Februar")
'  Select Case ActiveSheet.name
'  Case "Januar", "Februar"
With MyMessage
.To = Adressat  'oder "peer.roedel@gmx.de"
.Subject = "Erfassungsbeleg" 'Betreffzeile
.body = "Lieber Kollege" & vbCrLf & vbCrLf _
& "Im Anhang der Erfassungsbeleg" & vbCrLf & vbCrLf & _
"Mit freundlichen Grüßen" & vbCrLf & ActiveSheet.Cells(5, 5)
.Attachments.Add mePDFD     'Anhang aus Zwischenanlage einfügen
.Display                    'alles anzeigen
End With
Case Else
MsgBox "kein Monat ausgewählt"
  Kill mePDFD
Set MyMessage = Nothing
Set MyOutApp = Nothing

End Select
'  Kill mePDFD
'  Set MyMessage = Nothing
'  Set MyOutApp = Nothing

... bekomme aber beim Aufruf, wenn ich das Blatt aktive mache, dass nicht "Januar" bis "März" ist und die Routine laufen lasse, eine Debuggermeldung mit Verweis auf
Kill mePDFD
Set MyMessage = Nothing
Set MyOutApp = Nothing
Gruß
Peer
Anzeige
AW: Rückfrage 2
05.11.2019 17:46:29
Werner
Hallo Peer,
teste mal:
Dim mePDFD As String, MyOutApp As Object
Dim MyMessage As Object, Adressat As Object
Select Case ActiveSheet.Name
Case "Ferien", "Parameter", "Feiertage"
MsgBox "kein Monat ausgewählt"
Exit Sub
Case Else
'Anhang-Name definieren
mePDFD = ThisWorkbook.Path & "\" & "Erfassungsbeleg für den Monat " _
& Format(ActiveSheet.Range("E4"), "MMMM"" ""YYYY") & ".pdf"
'aktuelle Tabelle in die Zwischenanlage kopieren
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=mePDFD, Quality:=xlQualityStandard, _
IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
ActiveWorkbook.Close False
Set MyOutApp = CreateObject("Outlook.Application") 'Email-Client festlegen
Set MyMessage = MyOutApp.CreateItem(0)            'neue Email erstellen
Set Adressat = Sheets("Parameter").Cells(30, 1) 'Empfänger aus Tabelle "Parameter"
With MyMessage
.To = Adressat  'oder "peer.roedel@gmx.de"
.Subject = "Erfassungsbeleg" 'Betreffzeile
.body = "Lieber Kollege" & vbCrLf & vbCrLf _
& "Im Anhang der Erfassungsbeleg" & vbCrLf & vbCrLf & _
"Mit freundlichen Grüßen" & vbCrLf & ActiveSheet.Cells(5, 5)
.Attachments.Add mePDFD     'Anhang aus Zwischenanlage einfügen
.Display                    'alles anzeigen
End With
Kill mePDFD
Set MyOutApp = Nothing: Set MyMessage = Nothing: Set Adressat = Nothing
End Select
Wenn später weitere Blätter dazu kommen, die ausgenommen werden sollen, dann musst du die in der Case Anweisung mit aufnehmen.
Gruß Werner
Anzeige
AW: Rückfrage 2
05.11.2019 17:52:18
Peer
Perfekt, Werner.
Noch eine Frage.
Ist es sinnvoll, statt den Sheetnamen den Index des Blattes zu nutzen? So bräuchte man nur noch die Zahlen der Blätter zu ändern.
LG
Peer
AW: Rückfrage 2
05.11.2019 18:09:30
Werner
Hallo,
ich arbeite fast nie mit dem Index. Was für einen Mehrwert soll dir das denn bringen. Ob ich jetzt den Index als Zahl da rein schreibe oder den Blattnamen, der Unterschied macht den Kohl jetzt auch nicht fett.
Beim Index hast du das Problem, wenn du die Reihenfolge der Blätter veränderst indem du z.B. einen Blatt-Tab verschiebst, dann passt dein Index nicht mehr.
Gruß Werner
AW: Rückfrage 2
05.11.2019 18:23:00
Peer
Verständlich. Danke Werner.
Einen schönen Abend
Peer
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
05.11.2019 19:05:24
Werner

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige