Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1400to1404
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

Zwei unterschiedliche Private Sub Workbook_Sheet..

Zwei unterschiedliche Private Sub Workbook_Sheet..
15.01.2015 08:26:00
Alex
Hallo Herr Herber,
ich fürchte, dass ich bei einer Kombination aus zwei VBA-Codes nicht weiterkomme.
Ich habe einen Urlaubsplaner auf der Arbeit.
Bei diesem habe ich den Code (aus dem Netz) eingebettet, der die Datei nach 10 unbenutzten Minuten automatisch schließt.
Link: http://www.office-loesung.de/ftopic442760_0_0_asc.php
Code in der Arbeitsmappe:
==================================================
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime dteCloseTime, "DoClose", , False
End Sub

Private Sub Workbook_Open()
dteCloseTime = Now + TimeSerial(0, 9, 0)
Application.OnTime dteCloseTime, "DoClose"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Application.OnTime dteCloseTime, "DoClose", , False
dteCloseTime = Now + TimeSerial(0, 9, 0)
blnCloseNow = False
Application.OnTime dteCloseTime, "DoClose"
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
On Error Resume Next
Application.OnTime dteCloseTime, "DoClose", , False
dteCloseTime = Now + TimeSerial(0, 9, 0)
blnCloseNow = False
Application.OnTime dteCloseTime, "DoClose"
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Application.OnTime dteCloseTime, "DoClose", , False
dteCloseTime = Now + TimeSerial(0, 9, 0)
blnCloseNow = False
Application.OnTime dteCloseTime, "DoClose"
End Sub

================================================
Zusätzlicher Code für die Meldung im Modul:
================================================
Option Explicit
Public dteCloseTime As Date, blnCloseNow As Boolean
Public Sub DoClose()
Dim strMsg As String
If blnCloseNow = False Then
strMsg = "Diese Datei wurde seit 9 Minuten nicht bearbeitet und" & vbCrLf & _
"wird bei weiterer Inaktivität in 1 Minute geschlossen."
CreateObject("WScript.Shell").PopUp strMsg, 10, ThisWorkbook.Name, _
vbOKOnly + vbInformation + vbSystemModal
blnCloseNow = True
dteCloseTime = Now + TimeSerial(0, 1, 0)
Application.OnTime dteCloseTime, "DoClose"
Else
If Workbooks.Count = 1 Then
If ThisWorkbook.Saved = False Then
ThisWorkbook.Save
End If
Application.Quit
Else
ThisWorkbook.Close True
End If
End If
End Sub

================================================
Danach wollte ich noch in einer zusätzlichen Tabelle noch einen Protokoll laufen lassen, denn ich gerne ausblenden würde. Diesen Code habe ich von Ihnen.
Link: https://www.herber.de/forum/archiv/1320to1324/1320137_Protokoll_mit_VBA_erstellen.html
================================================
Option Explicit
Dim LoLetzte As Long
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
With Worksheets("Tabelle3")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
.Cells(LoLetzte, 1) = Target.Address
.Cells(LoLetzte, 2) = Target
.Cells(LoLetzte, 3) = Sh.Name
.Cells(LoLetzte, 4) = Environ("Username")
End With
Application.EnableEvents = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Sicherungen Protokollieren
With Worksheets("Tabelle3")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
.Cells(LoLetzte, 1) = Now
.Cells(LoLetzte, 2) = Environ("Username")
End With
End Sub

Private Sub Workbook_Open()
' die letzten 10 Veränderungen anzeigen
Dim LoI As Long
Dim LoJ As Long
Dim StMeldung As String
With Worksheets("Tabelle3")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
If LoLetzte > 10 Then LoJ = LoLetzte - 11
For LoI = LoJ + 1 To LoLetzte
StMeldung = StMeldung & .Cells(LoI, 1).Text & " " & .Cells(LoI, 2) & Chr(13)
Next LoI
MsgBox StMeldung
End With
End Sub

================================================
Auch diesen Code wollte ich in die Arbeitsmappe kopieren.
Leider bekomme ich ständig einen Fehler, weil ich zwei "Privat Sub Workbook_SheetChange" an unterschiedlichen Stellen getrennt nutze. Habe versucht einen Code in den anderen einzuarbeiten. Leider funktionieren dann beide Makros fehlerhaft. Der eine Code schließt die Datei evtl. schon nach ein bis zwei Minuten, anstatt nach 10 Minuten. Oder das Protokoll funktioniert nicht mehr, bzw. wird nicht gefüllt.
Könnten Sie mir bei diesem Problem weiterhelfen?
Vielen Dank im Voraus.
Mit freundlichen Grüßen
Alex

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwei unterschiedliche Private Sub Workbook_Sheet..
15.01.2015 08:58:04
Hajo_Zi
Hallo Alex,
Ich baue keine Datei nach, die Zeit hat schon jemand investiert.
Ein Nachbau sieht bestimmt anders aus als das Original.
Ein Link zur Datei wäre nicht schlecht.
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)
Der Dateiname sollte was mit dem Problem zu tun haben.
Ich habe mir z.B. einen Ordner angelegt in dem ich alle Dateien aus dem Internet speichere. Bei Dateinamen wie Test..., Mappe…, Beispiel… wird eine vorhandene überschrieben.
Ein Bild in Excel geöffnet sieht anders aus als das Bild.
Ich habe kein Tool um ein Bild in Excel zu importieren.

Anzeige

142 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige