Live-Forum - Die aktuellen Beiträge
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

Fehler im Workbook_BeforeClose

Fehler im Workbook_BeforeClose
03.11.2019 14:24:18
EasyD
Hallo zusammen
habe derzeit ein ziemlich großes "Projekt" am Laufen und deshalb in den letzten Tagen immer mal wieder Hilfe gesucht (und meistens hier auch gefunden).
Problem - ich kann die Mappe zur Anschauung nicht hochladen!
Und genau danach wurde in den letzten Tagen eigentlich immer gefragt...
Ich kann das natürlich nachvollziehen, dass ihr das gerne sehen wollt um mein Problem zu verstehen. Aber wenn ich das machen wollte, dann würde ich ungelogen einen halben Tag davor sitzen um die Mappe wieder zu entfremden, da wirklich massenhaft vertrauliche Inhalte drin sind. Und das möchte ich mir gerne sparen.
Also - wen jemand die Muße hat sich mein Problem mal anzuschauen - ich beschreibe das so gut ich kann:
In dem Worksheet_Change des Blattes "Datenerfassung" mache ich neben ganz vielen anderen Sachen unter anderem das hier:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim  CellsGeb As Range
Dim Alter As Date
Set CellsGeb = Range("Y25, AD25, AN26, AN27, AN28")
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'Altersprüfung bei den Kindern:
If Not Intersect(CellsGeb, Target) Is Nothing Then
'In Offset(10, 0) wird per Formel die Altersdifferenz ermittelt
'In Offset(10, 1) wird per Formel ermittelt ob alle anderen Angaben zu dem jeweiligen Kind  _
gemacht wurden (wenn 1 Eintrag enthalten, dann ist das Formelergebnis "Eintrag")
If Not IsEmpty(Target) And Target.Offset(10, 1).Value = "Eintrag" Then
Alter = Target.Offset(10, 0).Value + 1
If Format(Alter, "d") >= 20 Then
MsgBox "Der xxxxxx ist bei Posteingang bereits " & Format(Alter, "d") & " Jahre  _
alt! Sind Sie sicher?", vbOKOnly, "Achtung!"
End If
End If
End If
Set CellsGeb = Nothing
End Sub
Was soll das Ganze?
Ich habe 5 Bereiche für die Eintragungen von Kindern nebst ihrem Geburtstag. Dazu habe ich die 5 Geburtstage als CellsGeb deklariert. Wenn das Alter des Kindes >= 20, dann kommt die MsgBox als Hinweis.
Klappt auch wunderbar.
Nun mache ich aber zwingend (!!) im Workbook_BeforeClose alle ausgefüllten Zellen auf diesem Blatt mit einem anderen Makro CellsEmpty wieder leer - unter anderem auch die Geburtstage.
Das Makro dazu ist:
Sub CellsEmpty()
Application.ScreenUpdating = False
Sheets("Datenerfassung").Activate
Call Protect_off
'alle Eingaben wieder löschen
Dim rngZelle As Range, CellsEmpty As Range
Set CellsEmpty = Sheets("Datenerfassung").Range("Y11, BG25, AD19, AD25, AC17, AC21, AC23, BB9, BB11, BB13, BB15, BB17, BB19, BB21, BB23, BB25, BF9, BF11, BF14, Y7, Y9, Y19, Y25, X17, X21, X23, AL9:AM9, AL11:AM11, AQ9, AQ11, AQ17, AQ19:AR19, AQ21:AR21, AQ26:AQ28, AS26:AS28, AL17, AL19:AM19, AL21:AM21")
If Not CellsEmpty.MergeCells Then
CellsEmpty.ClearContents
Else
For Each rngZelle In CellsEmpty
rngZelle.MergeArea.ClearContents
Next
End If
Set CellsEmpty = Nothing
'das hier geht irgendwie nicht mehr rein oben ins CellsEmpty, keine Ahnung wieso
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Range("AL26:AN28").ClearContents
Call Protect_on
Sheets("Aktenvermerk").Activate
Call Protect_off
Sheets("Aktenvermerk").Range("D40").ClearContents
Call Protect_on
Sheets("Datenerfassung").Activate
Application.ScreenUpdating = True
End Sub
Nun zeigt er mir bevor die Speicherabfrage kommt einen Laufzeitfehler 13, Typen unverträglich
und zwar hier:
If Not IsEmpty(Target) And Target.Offset(10, 1).Value = "Eintrag" Then
Kann jemand erkennen wo ich die Prozedur falsch gebaut habe? Scheint mir ein grundsätzliches Problem zu sein....
Hinweis:
Die Berechnung zu
If Format(Alter, "d") >= 20
mag etwas seltsam aussehen, ich hab's nicht anders hinbekommen da ich mir in diesen Zellen stets das Alter als Ganzzahl ausrechne und dabei natürlich die Datumsangaben verwende... da hat's mir im VBA Code bei einem 21-jährigen Kind als Ergebnis immer 21.01.1900 angezeigt wenn ich nur geprüft habe If Alter >= 20 ...
Der Code läuft aber wie gewünscht, von daher ist mir das wurscht....
Danke an alle die sich das reinziehen wollen!

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Workbook_BeforeClose
03.11.2019 14:27:56
EasyD
und da sehe ich gerade, dass ich in dem CellsEmpty auch Schwierigkeiten hatte die Geburtstage der letzten 3 Kinder leer zu machen....
'das hier geht irgendwie nicht mehr rein oben ins CellsEmpty, keine Ahnung wieso
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Range("AL26:AN28").ClearContents
hängt das irgendwie zusammen?
AW: Fehler im Workbook_BeforeClose
03.11.2019 14:43:00
Nepumuk
Hallo,
in der Change-Routine fragst du den Wert einer einzelnen Zelle ab. Im Close-Event änderst du mehrere Zellen auf einmal, daher umfasst Target im Change-Event auch mehrere Zellen und da kannst du keinen einzelnen Wert abfragen. Unterdrücke im Close-Event das Change-Event mit:
Application.EnableEvents = False
nicht vergessen die Events wieder einzuschalten !!!
Sinnvoller wer es aber im Change-Event auf das Ändern mehrerer Zellen vorbereitet zu sein. Denn wenn dein Benutzer 2 Zellen markiert und auf Entf drück läufst du in den selben Fehler.
Gruß
Nepumuk
Anzeige
AW: Fehler im Workbook_BeforeClose
03.11.2019 14:46:15
EasyD
Aha...
na das werd ich mal checken!
Danke erstmal, ich melde mich wieder
AW: Fehler im Workbook_BeforeClose
03.11.2019 14:56:07
EasyD
Danke Nepomuk
An solchen Sachen merke ich immer wieder, dass ich einfach noch nicht fit genug bin um so eine doch für meine Verhältnisse recht komplizierte Mappe wirklich auch mal alleine und ohne Hilfe zu bauen.
Vollkommen logisch was du sagst!
Hätte ich auch wissen können, da ich mir ja auch drüber im klaren bin dass ich im before_close gleich mehrere Zellen ändere. Aber dass sich das mit der Prüfroutine für EINE dieser Zellen beißt, fällt mir immer nicht auf...
hab die Events jetzt im Before_close vor dem Aufruf von CellsEmpty abgeschaltet und danach wieder an. Perfekt!
Kannst du mir nochmal auf die Sprünge helfen wegen des löschens von mehreren Zellen? Du hast es ja oben schon angedeutet, dass ich da in den gleichen Fehler laufe:
wie behebe ich das?
Anzeige
AW: Fehler im Workbook_BeforeClose
03.11.2019 15:11:00
Nepumuk
Hallo,
ein Beispiel:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim objRange As Range, objCell As Range
    Set objRange = Intersect(Target, Range("A1:A10"))
    If Not objRange Is Nothing Then
        For Each objCell In objRange
            MsgBox objCell.Address
        Next
        Set objRange = Nothing
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Fehler im Workbook_BeforeClose
03.11.2019 15:19:43
EasyD
Ich hab's anders gelöst!
(Mensch denk nach Alter! *Schlag vor den Kopf*)
Aber Danke für das Bsp Nepomuk!
Das merke ich mir mal für Fälle, in denen ich nicht so viele Sachen gleichzeitig mache in dem worksheet_change. In meiner Mappe müsste ich deine Range oben auf ziemlich viele Zellen ausbauen, halte ich dann für etwas unübersichtlich...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim  CellsGeb As Range
Dim Alter As Date
Set CellsGeb = Range("Y25, AD25, AN26, AN27, AN28")
' _
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'Altersprüfung bei den Kindern:
If Not Intersect(CellsGeb, Target) Is Nothing Then
If Target.Columns.Count = 1 And Target.Rows.Count = 1 Then
'In Offset(10, 0) wird per Formel die Altersdifferenz ermittelt
'In Offset(10, 1) wird per Formel ermittelt ob alle anderen Angaben zu dem jeweiligen Kind   _
_
gemacht wurden (wenn 1 Eintrag enthalten, dann ist das Formelergebnis "Eintrag")
If Not IsEmpty(Target) And Target.Offset(10, 1).Value = "Eintrag" Then
Alter = Target.Offset(10, 0).Value + 1
If Format(Alter, "d") >= 20 Then
MsgBox "Der xxxxxx ist bei Posteingang bereits " & Format(Alter, "d") & "  _
Jahre  _
alt! Sind Sie sicher?", vbOKOnly, "Achtung!"
End If
End If
End If
End If
Set CellsGeb = Nothing
End Sub

Anzeige
AW: Fehler im Workbook_BeforeClose
03.11.2019 15:23:07
Nepumuk
Hallo,
an Stelle von: If Target.Columns.Count = 1 And Target.Rows.Count = 1 Then
einfach
If Target.Count = 1 Then
Gruß
Nepumuk
AW: Fehler im Workbook_BeforeClose
03.11.2019 15:28:35
EasyD
Ok
danke
hab's gleich geändert.
Jetzt funktioniert nur die eigentliche Altersprüfung wieder nicht mehr... irgendwas hab ich mir gerade zerschossen....
Aber dank dir nochmal für die Hilfe, ich denke das eigentliche Problem ist gelöst!
AW: Fehler im Workbook_BeforeClose
03.11.2019 16:25:39
EasyD
ich blick's nicht
ich werd das jetzt erstmal beiseite legen weil ich den Wald vor lauter Bäumen nicht sehe.
Danke nochmal Nepomuk.
Ich muss jetzt raus bekommen, warum jetzt auf einmal die Altersprüfung nicht mehr geht.
Am enableevents liegt's nicht, hatte ich zuerst im Verdacht, hab's aber nun vorher mal manuell wieder eingeschaltet, ohne Ergebnis...
Selbst wenn ich die zusätzliche Bedingung
If Target.Count = 1 Then
wieder raus nehme, läuft die Prüfung nicht mehr...
wenn ich das Brett vor meinem Kopf weg bekommen habe, gebe ich Bescheid
Anzeige
AW: Fehler im Workbook_BeforeClose
03.11.2019 14:30:00
Hajo_Zi
nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)

Anzeige
AW: Fehler im Workbook_BeforeClose
03.11.2019 14:45:17
EasyD
Hallo Hajo
Ich weiß...
Und ich bin mir auch bewusst darüber, dass es für euch sicher nicht leicht ist das Problem zu erkennen wenn ihr die Mappe nicht seht...
Aber genau deshalb habe ich ja das große Palawer an den Anfang meiner Frage gestellt.
Wenn ich das Ding anonymisieren will, dann habe ich echt zu tun....
Ich werde jetzt aber trotzdem mal versuchen das ganze Problem in einer leeren Mappe nach zu bauen. Mal schauen wie lange das dauert.... Wen ich das vor heute nacht um 12 hin bekomme, dann lade ich das noch hoch....
Frage an dieser Stelle:
Ist es clever von Anfang an IMMER eine Demo-Mappe parat zu haben ohne sensible Daten um dann immer eine Datei hochladen zu können? Wie gewährleiste ich, dass diese Demo-Mappe IMMER exakt genauso läuft wie mein Original? Oder ist es unclever in den Bezeichnungen meiner Variablen bspw Begriffe zu verwenden, die genau erkennen lassen was mit der Variable gemeint ist?
Bspw würde ich - wenn ich so was wie eine Mappe mit Bezug auf Kundendaten bauen würde - für die Variablen Begriffe verwenden wie "Kundenadresse" oder "Kundennummer" ezc pp. Das mache ich ja genau damit ich auch nach 2 Jahren noch weiß was der ganze Quatsch soll...
Vielleicht stelle ich mich da beim Programmieren auch noch zu dämlich an...
Anzeige

85 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige