Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Workbook_SheetDeactivate die richtige Lösung?

Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 10:58:36
EasyD
Hallo zusammen
ich habe ein Blatt "Datenerfassung" bei dem ich mit einer Prozedur
"Menue_on" eine Spalten einblende.
mit der Prozedur
"Menue_off" blende ich sie wieder aus.
Beide Codes laufen auf dem Blatt wie gewünscht
Ich möchte, wenn dieses Blatt verlassen wird IMMER "Menue_off" ausführen.
Auch das geht grundsätzlich, allerdings kann ich bei der Ausführung sehen, dass der Code eben nicht beim Verlassen des Blattes ausgeführt wird, sondern erst dann, wenn ich das Blatt wieder aktiviere.... Das versteh ich nicht.
Ideen? Oder andere Lösungsansätze?
Meine Lösung - in der Arbeitsmappe:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Das Menü immer ausblenden, wenn die Datenerfassung verlassen wird
If ActiveSheet.Name = "Datenerfassung" Then
Application.ScreenUpdating = False
Call Menue_off
Application.ScreenUpdating = True
Else
Exit Sub
End If
End Sub
Und nur der Vollständigkeit halber der Code in einem Modul:
Sub Menue_off()
'Das Menü links am Rand ausblenden, gleichzeitig den Bereich zur Datenerfassung wieder frei geben
Call Protect_off
Application.ScreenUpdating = False
'Pfeile über den Menüpunkten wieder weg
ActiveSheet.Shapes.Range(Array("Picture 36")).Visible = msoFalse
'Die Form über der Datenerfassung wieder entfernen
ActiveSheet.Shapes.Range(Array("Rectangle 4")).Select
With Selection.ShapeRange.Fill
.Visible = msoFalse
End With
'Die Menüspalten wieder ausblenden
ActiveSheet.Range("A:I").EntireColumn.Hidden = True
'Hilespalten ausblenden
ActiveSheet.Range("J:Q").EntireColumn.Hidden = True
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 5
Application.ScreenUpdating = True
Call Protect_on
End Sub
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 11:06:10
EtoPHG
Hallo,
ersetze:
If ActiveSheet.Name

durch
If sh.Name
Gruess Hansueli
AW: Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 11:41:55
EasyD
ok, ist ein Ansatz
beißt sich dann aber mit dem Code Menue_off
(Element mit dem angegebenen Namen wurde nicht gefunden)
wie bringe ich im bei, das sh = "Datenerfassung" ist?
Anzeige
AW: Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 11:47:27
Daniel
Hi
innerhalb von "Menue_off" darfst du natürlich auch nicht mehr mit "ActiveSheet" arbeiten.
wenn das nur ein einziges Sheet betrifft, kannst du den Sheetnamen natürlich fest im Code verdrahten, dh ersetze ActiveSheet durch Sheets("Datenerfassung")
sind mehrere Sheets betroffen, müsstest du mit Parameterübergabe arbeiten.
Gruß Daniel
Anzeige
AW: Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 11:50:30
EasyD
Hey Daniel
hab's kapiert
Danke!
sehr aufschlussreich
und klar - wenn ich das Blatt verlasse - dann hab ich es verlassen und das aktive ist ein anderes... leuchtet natürlich ein
habe mit der Lösung von Franz gearbeitet, erscheint mir die unkomplizierte Variante
AW: Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 11:39:07
Daniel
Hi
wenn du das Blatt verlassen hast und der Deaktivate-Fall eintritt, dann hast du das Blatt verlassen und ActiveSheet ist nicht mehr das verlassene Blatt, sondern das neue.
deswegen gibt's ja die Variable SH, in welcher das deaktivere blatt hinterlegt ist und welches du anstelle von ActiveSheet im Code verwenden solltest (das wurde dir ja von HansUeli schon gezeigt)
Was du weiterhin beachten musst, dass das SheetDeactivate nicht ausgeführt wird, wenn du eine andere Mappe aktivierst. (denn innerhalb der Mappe bleibt das Sheet aktiv)
Wenn auch in diesem Fall "Menü off" laufen soll, müsstest du zusätzlich das Workbook_Deactivate-Event einsetzen.
Gruß Daniel
Anzeige
AW: Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 11:39:12
fcs
Hallo EasyD,
die Prozedur "Workbook_SheetDeactivate" ist schon die richtige.
Allerdings ist das deaktivierte Blatt dann nicht mehr das aktive Blatt, sondern verbirgt sich hinter dem Parameter "Sh".
Damit du nicht dein Makr menue_off komplett umschreiben muss, muss das Blatt "Datenerfassung" kurzzeitig wieder zum aktiven Blatt gemacht werden.
LG
Franz
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Das Menü immer ausblenden, wenn die Datenerfassung verlassen wird
Dim objSheet As Object
If Sh.Name = "Datenerfassung" Then
Set objSheet = ActiveSheet        'aktives Blatt merken
'    MsgBox "Sh.name : " & Sh.Name & vbLf & "ActiveSheet : " & ActiveSheet.Name  'Testzeile
Application.EnableEvents = False
Application.ScreenUpdating = False
Sh.Activate
Call Menue_off
objSheet.Activate
Application.EnableEvents = True
Application.ScreenUpdating = True
Else
Exit Sub
End If
End Sub

Anzeige
AW: Workbook_SheetDeactivate die richtige Lösung?
11.10.2019 11:51:32
EasyD
Perfekt Franz
vielen Dank!
hab's verstanden
läuft wie gewünscht!

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige