Excel "Blatt-Bildschirmschoner"

  • #1
J

Jenz

Mitglied
Themenersteller
Dabei seit
01.03.2005
Beiträge
20
Reaktionspunkte
0
Ort
Thüringen
Hallo zusammen,

ich möchte gerne mal wieder euer Wissen ;)
Folgendes:

Nach einer bestimmten Zeitspanne ohne Eingabe auf Blatt A - z.B. 10 Sekunden - soll automatisch ein bestimmtes Blatt B angezeigt werden. Gibts da ne Möglichkeit?
Dachte evtl. an das Ereignis AfterChange, kenne mich ja nun aber mit Makros nich so aus - soll heißen bis auf das Sheet Select fehlts im Text...

Kann jemand helfen?
Vielen Dank im voraus.
jenz
 
  • #2
Also ich habe selber einen eigens entwickelten Bildschirmschoner, der startet, wenn eine Datei eine Zeit lang nicht genutzt wird. Ich rede hier von einer Excel-Tabelle oder eine Sammlung dieser.

Aber es gibt auch die Möglichkeit, die ich auch einsetze, der Passwortaufforderung bei Inaktivität.

Leider geht nur die Startseite von Deiner Homepage, sonst hätte ich Dir zwei Beispiel gerne gesendet.

Sanny
 
  • #3
Hallo Jenz,

ich hab mal eine Beispielarbeitsmappe mit 2 Blättern erzeugt.
Die Blattnamen sind Arbeitsblatt und Bildschirmschoner.
In die Code-Seite der Arbeitsmappe gehört folgender Code:
Code:
Private Sub Workbook_Open()
 Call myBildschirmschoner
End Sub
In die Code-Seite des Blattes Arbeitsblatt:
Code:
Private Sub Worksheet_Activate()
  l_ZeitZaehler = 0
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  l_ZeitZaehler = 0
End Sub

Dann noch ein Modul einfügen. In dessen Code-Seite muß folgendes stehen:
Code:
Dim b_scrBusy As Boolean
Global l_ZeitZaehler As Long
Sub myBildschirmschoner()
  
 ->Ist der Macro schon aktiv?
  If b_scrBusy Then Exit Sub
  b_scrBusy = True
  
 ->Ist diese Arbeitsmappe aktiv ?
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    
   ->ist das Arbeitsblatt aktiv
    If ThisWorkbook.Worksheets(Arbeitsblatt).Name = ActiveSheet.Name Then
      l_ZeitZaehler = l_ZeitZaehler + 1
     ->Zeit für Arbeitsblatt abgelaufen?
      If l_ZeitZaehler > 1 Then
        l_ZeitZaehler = 0
        ThisWorkbook.Worksheets(Bildschirmschoner).Activate
      End If
    Else
      l_ZeitZaehler = 0
    End If
  End If
  
  Application.OnTime Now() + TimeValue(00:00:10), myBildschirmschoner
  
  b_scrBusy = False
End Sub

Datei speichern und schliessen.

Wenn Du jetzt die Mappe öffnest, ist die Timer-Überwachung aktiv. Wird das Blatt Arbeitsblatt aktiviert und 10 sec keine Eingabe getätigt, schaltet das Makro das Blatt Bildschirmschoner aktiv.

Gruß Matjes  ;)
 
  • #4
Das hab ich ja gleich zu was ganz Bösem umbauen müssen:
Global l_ZeitZaehler As Long
Sub myBildschirmschoner()
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
      l_ZeitZaehler = l_ZeitZaehler + 1
      If l_ZeitZaehler > 1 Then
        l_ZeitZaehler = 0
        MsgBox Los, weiterarbeiten, du faule Sau!
      End If
  End If
  Application.OnTime Now() + TimeValue(00:00:10), myBildschirmschoner
End Sub

Freu mich jetzt schon auf die Gesichter ;D
 
  • #5
Vielen Dank Matjes, funktioniert wunderbar,
musste lediglich die Dauer etwas hochschrauben, da Excels Uhren scheinbar schneller gehen :)

PS: Irgendwie werden meine Arbeitsmappe immer benutzerfreundlicher ;)
 
  • #6
Hallo nochmal,

hab das ganze jetzt ja schon ne Weile im Einsatz, und bin recht zufrieden. Nur eins ist mir aufgefallen, und das ist manchmal ganz schön belastend, da brauch ich noch mal eure Hilfe, bitte.

Denn wenn ich die mappe mit schoner im excel schließe - Excel jedoch geöffnet bleibt - dann läuft der Countdown scheinbar weiter, denn nach der besagten Zeit öffnet Excel die Mappe automatisch wieder, und bringt die Bildschirmschonseite.
Hab schon etwas probiert, mit Close. und so - hat aber nicht geklappt :-\....

Was muss noch rein?
Danke,
jenz.
 
  • #7
Hallo Jenz,

danke für die Nachricht  :)

Hab dem Bildschirmschoner ein Abschalt-Makro spendiert. Der setzt ein Flag b_BilschirmschonerSchliessen.
Bei nächsten Überwachungsschritt wird dann statt des erneuten Timeraufrufs die Mappe automatisch geschlossen.

Gruß Matjes :)

geändert: Code im Modul
Code:
Dim b_scrBusy As Boolean
Global l_ZeitZaehler As Long
Global b_BildschimschonerSchliessen As Boolean
Sub myBildschirmschoner()
  
 ->Ist der Macro schon aktiv?
  If b_scrBusy Then Exit Sub
  b_scrBusy = True
  
 ->Ist diese Arbeitsmappe aktiv ?
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    
   ->ist das Arbeitsblatt aktiv
    If ThisWorkbook.Worksheets(Arbeitsblatt).Name = ActiveSheet.Name Then
      l_ZeitZaehler = l_ZeitZaehler + 1
     ->Zeit für Arbeitsblatt abgelaufen?
      If l_ZeitZaehler > 1 Then
        l_ZeitZaehler = 0
        ThisWorkbook.Worksheets(Bildschirmschoner).Activate
      End If
    Else
      l_ZeitZaehler = 0
    End If
  End If
  
  If b_BildschimschonerSchliessen Then
    ThisWorkbook.Close Savechanges:=False
  Else
    Application.OnTime Now() + TimeValue(00:00:10), myBildschirmschoner
  End If
  b_scrBusy = False
End Sub
Sub myBildschirmschonerSchliessen()
  b_BildschimschonerSchliessen = True
End Sub
 
  • #8
Hallo Matjes,
hab deins mal ergänzt, und den BeforeClose geändert

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Call myBildschirmschonerSchliessen
End Sub

allerdings funktionierts nicht, weiß aber nicht, warum. Nen Fehler gibts nicht, die Mappe wird einfach nochmal geöffnet....
 
  • #9
Hallo Jenz,

die Variable , die das Abschalten signalisiert lebt nur solange die Bildschirmschoner-Mappe geöffnet ist. So wie du es jetzt konstruiert hast, wird die Mappe aber geschlossen. Der Timer-Aufruf öffnet sie dann wieder und die Variable hat dann den default-Wert (nicht beenden).

Für die Benutzung BeforeClose-Ereignis sind die foolgenden Änderungen notwendig.

Gruß Matjes :)

Modul:
Code:
Dim b_scrBusy As Boolean
Global l_ZeitZaehler As Long
Global b_BildschirmschonerSchliessen As Boolean
Global b_BildschirmschonerTimerUnterbrochen As Boolean
Sub myBildschirmschoner()
  
 ->Ist der Macro schon aktiv?
  If b_scrBusy Then Exit Sub
  b_scrBusy = True
  
 ->Ist diese Arbeitsmappe aktiv ?
  If ActiveWorkbook.Name = ThisWorkbook.Name Then
    
   ->ist das Arbeitsblatt aktiv
    If ThisWorkbook.Worksheets(Arbeitsblatt).Name = ActiveSheet.Name Then
      l_ZeitZaehler = l_ZeitZaehler + 1
     ->Zeit für Arbeitsblatt abgelaufen?
      If l_ZeitZaehler > 1 Then
        l_ZeitZaehler = 0
        ThisWorkbook.Worksheets(Bildschirmschoner).Activate
      End If
    Else
      l_ZeitZaehler = 0
    End If
  End If
  
  If b_BildschirmschonerSchliessen Then
    b_BildschirmschonerTimerUnterbrochen = True
    ThisWorkbook.Close Savechanges:=False
  Else
    Application.OnTime Now() + TimeValue(00:00:10), myBildschirmschoner
  End If
  b_scrBusy = False
End Sub
Sub myBildschirmschonerSchliessen()
  b_BildschirmschonerSchliessen = True
End Sub
Code-Seite ThisWorkbook
Code:
Private Sub Workbook_Open()
 Call myBildschirmschoner
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If Not b_BildschirmschonerTimerUnterbrochen Then
    Call myBildschirmschonerSchliessen
   ->close verhindern und auf nächsten Timer warten
    Cancel = True
  End If
End Sub
 
  • #10
irgendwo klemmts noch..
habs jetzt haargenau so, wie du zuletzt schriebst. und jetzt lässt sich die mappe gar nicht mehr schließen :(
 
  • #11
status für mitleser: der bug war ein fehlendes r ;)

funktioniert soweit, dafür erst einmal vielen dank mal wieder an matjes!

eins noch: es ist ja jetzt so, dass nach dem schließen-befehl die restzeit des timers zunächst verstreicht, bevor sich die mappe schließt. kann man dies noch umgehen? so dass die mappe beim klicken des x dann sofort zu geht?
die erstere variante war ja IMO so gedacht, dass per button o.Ä. eine Prozedur zum schließen gestartet wird, ich würde es aber lieber weiterhin so haben, dass es normal zu schließen geht, nur eben gleich ;)

PS: ich kenne doch meine ungeduldigen User :D
 
  • #12
Hallo Jenz,

an den Timer selber komm ich nicht ran.  :'(

Ein Lösungsmöglichkeit wäre das Timer-Interval auf eine Sekunde herunterzuschrauben und dafür die Zaehler-Abfrage zu erhöhen.

Wenn der timer jetzt z.B. 10 sec eingestellt ist, würde die umstellung bedeuten, wenn die aufschaltzeit des Bildschirmschoners gleich bleiben soll:

Timer auf 1 sec und
Code:
l_ZeitZaehler > 10

Gruß Matjes :)
 
  • #13
Japp, jetzt ists genau so wie ich es gern hätte!

Jetzt noch mal abschließend, denn das Thema dürfte jetzt wirklich erledigt sein: Dankeschön!

Grüße,
jenz
 
Thema:

Excel "Blatt-Bildschirmschoner"

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben