Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
800to804
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
800to804
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Blatt löschen überwachen

Blatt löschen überwachen
19.09.2006 18:48:02
Oberschlumpf
Hallo Leute
google.de hat nix Gescheites gefunden :-)
Hintergrund:
Ich habe viele Sheets (mit Detailangaben zu bestimmten Themen), aus denen Zellwerte in andere Sheets (Listen, Statistik, etc) übertragen werden.
Problem:
Wenn ich nun eines der Detail-Sheets löschen will (was öfter vorkommt und auch gewünscht ist), möchte ich gerne aus den Listen-Sheets, etc mit VBA die Zeilen löschen, die die Werte aus einem gelöschten Detail-Sheet enthalten.
Frage:
Wie kann ich das mit VBA erreichen?
Es gibt leider kein WorkbookSheet_BeforeDelete-Ereignis - oder ich finde es (noch) nicht :-)
Wie kann ich kontrollieren/überwachen, wenn ein Blatt gelöscht wird und um welches es sich handelt?
Wie man mit VBA Zeilen löscht, weiß ich.
Vielen Dank für eure Antworten.
Ciao
Thorsten

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Blatt löschen überwachen
19.09.2006 19:13:34
Philipp
Hallo Thorsten
Ein BeforeDelete-Ereignis leider existiert nicht. Man kann jedoch die Anzahl Blätter abfragen und so eine Art AfterDelete-Ereignis nachbauen. Füge diesen Code in das Modul 'DieseArbeitsmappe' ein:
Public intSheets As Integer
Public strSheet As String

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If ThisWorkbook.Sheets.Count < intSheets Then
If ThisWorkbook.Sheets.Count - 1 = intSheets Then
Debug.Print "Blatt " & strSheet & " wurde gelöscht"
Else
Debug.Print "Blatt " & strSheet & " und weitere wurden gelöscht"
End If
End If
End Sub


Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
intSheets = ThisWorkbook.Sheets.Count
strSheet = Sh.Name
End Sub

Da eine Blattlöschung immer zwischen SheetDeactivate- und SheetActivate-Event stattfindet, kann man so den Namen des gelöschten Blattes herausfinden. Wenn mehrere Blätter gelöscht werden (als Gruppe), wird SheetDeactivate nur für das gerade aktive Blatt ausgelöst.
Gruss
Philipp von Wartburg
www.xlam.ch
Anzeige
AW: Blatt löschen überwachen
19.09.2006 19:52:19
Oberschlumpf
Hallo Phillip
Ich habs geahnt :-)
Aber trotzdem vielen Dank für deine Idee. Obs so funktioniert, wie ich es mir vorstelle, kann ich heute wohl nicht mehr testen.
Aber ohne deine Idee hätte ich diese nicht mal :-) - Danke!
Ich gebe Rückmeldung, bevor dieser Thread im Archiv verschwindet.
Ciao
Thorsten
AW: es funzt! - Blatt löschen überwachen
20.09.2006 12:59:27
Oberschlumpf
Hi Phillip!
Noch mal Danke! :-) Ohne deinen Beitrag hätte ich wohlö noch länger zu denken gehabt.
Ich hab deinen Code etwas geändert - so ist es für mich nun möglich, auch dann reagieren zu können, wenn mehr als nur ein Sheet gelöscht werden.
Ich habe es nun so gelöst: (der Code wird in der Reihenfolge ausgeführt wie hier aufgeführt)

Private Sub Workbook_Open()
'Anzahl der Sheets beim Öffnen der Datei
piBlattDel = ThisWorkbook.Sheets.Count
SheetsCollect
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'die aktuelle Anzahl der Sheets wird bei jedem Sheetwechsel neu übergeben
piBlattDel = ThisWorkbook.Sheets.Count
End Sub
Sub SheetsCollect()
'in dieser Sub werden alle Sheetnamen einem globalen Array zugewiesen
Dim liSuche As Integer
ReDim pstrAllSheets(ThisWorkbook.Sheets.Count)
For liSuche = 0 To ThisWorkbook.Sheets.Count - 1
pstrAllSheets(liSuche) = ThisWorkbook.Sheets(liSuche + 1).Name
Next
End Sub
Sub NewProj()
'ein neues Sheet wird über einen Button hinzugefügt
Application.ScreenUpdating = False
Sheets("Project").Copy After:=Sheets(Sheets.Count)
SheetsCollect 'die Sheetnamen werden dem Array neu übertraen, da ja ein neues Sheet
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'wenn ein Sheet gelöscht wird, dann...
If ThisWorkbook.Sheets.Count < piBlattDel Then
SheetRowsDel
End If
End Sub
Sub SheetRowsDel()
Dim liSuche As Integer, liIndex As Integer, lboNoDel As Boolean
Application.EnableEvents = False
'es wird verglichen, welches Sheet gelöscht wurde
Do Until pstrAllSheets(liIndex) = ""
For liSuche = 1 To ThisWorkbook.Sheets.Count
If pstrAllSheets(liIndex) = ThisWorkbook.Sheets(liSuche).Name Then
lboNoDel = True
Exit For
End If
Next
If lboNoDel = True Then
lboNoDel = False
Else
'Sub mit entsprechenden Löschbefehlen (in diesem Fall Zeilen löschen) wird gestartet
Call DelRows(pstrAllSheets(liIndex))
End If
liIndex = liIndex + 1
Loop
Application.EnableEvents = True
End Sub

So funktioniert es bei mir - vielleicth kann ich ja dem Einen oder der Anderen hiermit helfen.
Ciao
Thorsten
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige