Anzeige
Archiv - Navigation
1700to1704
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 Überprüfung bei schließen der Arbeitsmappe

VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 11:44:22
Andreas
Hallo Zusammen,
in meiner Arbeitsmappe möchte ich einen Wert (in untersch. Tabellenblättern - je nach dem wo sich der Nutzer gerade befindet, der Wert selbst steht immer in der Zelle AH45) beim schließen der Arbeitsmappe überprüfen.
Bei erfolgreicher Überprüfung (größer als 5%) soll das Makro SUB SendNotesMail() gestartet werden (welches manuell angesteuert ohne Probleme läuft)
Das dafür notwendige Makro zur Überprüfung beim schließen habe ich programmiert aber leider läuft es noch nicht wie geplant:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wks As Worksheet: Set wks = ActiveSheet
If wks.Cells(46, 34).Value > 0.05 Then
Call SendNotesMail
End If
End Sub

Ich hoffe jemand kann mir weiterhelfen.

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 11:54:47
Rainer
Hallo Andreas,
kennst du die Debugger Funktion? Lasse den Code mit F8 zeilenweise laufen und gucke, wo er sich "unzüchtig benimmt".
Gruß, Rainer
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 12:13:05
Andreas
Hallo Rainer,
leider bin ich kein VBA Profi.
Bei dem Versuch das Makro zu debuggen ertönt leider immer der Fehlerton von Windows.
(Bei anderen Makros funktioniert der Debugger mit den Einzelschritten und den gelben Zeilen wie gewohnt.)
Gruß Andreas
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 13:42:31
Rainer
Hallo Andreas,
ganz doof gesagt: Bei mir geht es!
Ich habe deinen Code vereinfacht zu:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
test = Cells(1, 1).Value
If Cells(1, 1).Value > 0.05 Then
Call SendNotesMail
End If
Cancel = True
End Sub
Private Sub SendNotesMail()
MsgBox "Geht doch!"
End Sub
Die Deklaration von "wks" ist überflüssig, da du nur mit dem Activesheet arbeiten willst.
"Cancel = True" musst du wieder löschen, das ist nur zum Testen. Es verhindert, dass die Mappe geschlossen wird nach Ablauf des Makros.
Jetzt setze doch mal einen Haltepunkt in deine Prozedur (Zeile wählen, F9 drücken) und sage, wo der Code klemmt? Beobachte auch, welchen Wert "test" annimmt.
Gruß, Rainer
Anzeige
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 12:14:52
Marco
Hallo Andreas,
da Dein Makro so wie Du es hier gepostet ist korrekt ist (zumindest die Abfrage) können wir ohne Beispieldatei nicht bestimmen wo der Fehler ist.
Viele Grüße
Marco
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 12:30:51
Andreas
Hallo Marco,
vielen Dank für die Info.
Kann einen Teil der Datei später hochladen, evtl. kann man da mehr sehen.
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 13:17:44
Andreas
Hallo Marco,
kann die Datei im Moment nicht hochladen.
Anbei der ganze Code, evtl. kannst du da schon etwas erkennen.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wks As Worksheet: Set wks = ActiveSheet
If wks.Cells(46, 34).Value > 0.05 Then
Call SendNotesMail
End If
End Sub

Sub SendNotesMail()
Dim wks As Worksheet: Set wks = ActiveSheet
Dim Maildb As Object
Dim MailDoc As Object
Dim session As Object
Dim Recipient As Variant
Dim Signature As String
Dim rtitem
Dim EmbedObj As Object
Dim AttachME As Object
Set session = CreateObject("Notes.NotesSession")
Set Maildb = session.CURRENTDATABASE
Set MailDoc = Maildb.CREATEDOCUMENT
Recipient = "Beispiel@beispiel.de"
MailDoc.Form = "Memo"
MailDoc.sendto = Recipient
MailDoc.CopyTo = ""
MailDoc.Subject = "Meldegrenze f?r " & wks.Cells(3, 5) & " " & wks.Cells(4, 5) & " ?berschritten"
Signature = Maildb.GETPROFILEDOCUMENT("CalendarProfile").GETITEMVALUE("Signature")(0)
Set rtitem = MailDoc.CREATERICHTEXTITEM("Body")
With rtitem
.APPENDTEXT ("Die Meldegrenze des " & wks.Cells(3, 5) & " " & wks.Cells(4, 5) & " wurde ?berschritten. Die GFZ liegt bei " & wks.Cells(46, 34) * 100 & "%")
.ADDNEWLINE (2)
Call .EMBEDOBJECT(1454, "", "C:\Eigene Dokumente\Makro\Test1.xls")
.ADDNEWLINE (2)
.APPENDTEXT Signature
End With
MailDoc.SAVEMESSAGEONSEND = True
MailDoc.PostedDate = Now()
MailDoc.SEND 0, Recipient
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set session = Nothing
Set EmbedObj = Nothing
End Sub
Anzeige
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 12:20:35
Torsten
Hallo,
ich denke der Fehler liegt hier. Du schreibst:
der Wert selbst steht immer in der Zelle AH45

mit
If wks.Cells(46, 34).Value > 0.05 Then

pruefst du aber AH46
Gruss Torsten
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 12:28:04
Andreas
Hallo Torsten,
damit habe ich leider für Verwirrung gesorgt.
Die Adresse hab ich temporär geändert, um einen gerundeten Wert anzusteuern, was leider auch nicht funktioniert hat.
Also war die Adresse im Prinzip schon richtig.
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 13:40:08
peterk
Hallo
In welchem Modul hast Du diesen Code? Da es ein Workbook Event ist, muss er im Modul Arbeistmappe stehen. Des weiteren könnte das ActiveSheet auch ein Diagram sein und damit würde die Abfrage nicht funktionieren.
Anzeige
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 17:05:24
Andreas
Den Code hab ich in einem separaten Modul, ist das der Fehler? Wenn ja, wie kann ich den Code schreiben, um diesen im Modul lassen zu können und diesen nicht für jedes Tabellenblatt extra einfügen zu müssen?
Viele Grüße
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 18:02:07
Rainer
Hallo Andreas,
ein "Workbook_BeforeClose" kann natürlich nur funktionieren, wenn er in "DieseArbeitsmappe" steht. Das gilt dann auch für alle Blätter in der Mappe.
Die Sub "SendNotesMail" kann im Modul stehen.
Gruß, Rainer
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 18:20:39
Andreas
Hallo Rainer,
das ist logisch, leider haben dafür meine VBA Kenntnisse noch nicht ausgereicht.
vielen Dank für den Tipp.
Kann ich den Code so umschreiben, um diesen über das Modul steuern zu können?
Oder muss ich das über den Active Workbook Befehl regeln?
Meine Befürchtung ist, wenn z.B. der Monat April (vorherige Arbeitsmappe) über 5% war, dieser Wert stehen bleibt und ich in einem anderen Monat (neue Arbeitsmappe) weiterarbeite, der Befehl so regelmäßig für die Wertüberschreitung im April ausgelöst wird (Ist das begründet?)
Anzeige
AW: VBA Überprüfung bei schließen der Arbeitsmappe
23.07.2019 18:35:59
Rainer
Wenn es unbedingt im Modul sein soll:
'In DieseArbeitsmappe schreiben
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call SubImModul
'Cancel = True ist zum Test, die Mappe kann nicht geschlossen werden!
'Wenn der Code richtig funktioniert, dann False setzen
Cancel = True
End Sub
'Ins Modul schreiben
Private Sub SubImModul()
test = Cells(1, 1).Value
If Cells(1, 1).Value > 0.05 Then
Call SendNotesMail
End If
End Sub
'Ins Modul schreiben
Private Sub SendNotesMail()
MsgBox ActiveWorkbook.Name & vbLf & ActiveSheet.Name
End Sub
Aber es macht keinen Unterschied, es wird immer die Zelle vom ActiveWorksheet ausgelesen.
Probier es doch einfach aus wenn mehrere Mappen offen sind.
Eine Anpassung ist nur notwendig, wenn du aus einer anderen Mappe heraus mit einem VBA-Code die Mappe schließen willst. Ich bin aber davon ausgegangen, dass du einfach aufs "Rote X" drückst.
Gruß, Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige