09.01.2018, 11:48
Hallo,
bräuchte nochmal Hilfe.
Ich habe hier einen Code der soweit auf meinem Rechner mit 64bit läuft. Ich hab hier vor Funktion immer PtrSafe geschrieben.
Allerdings scheint das ganze nicht unter Excel 2007 32bit zu laufen.
Wie muss das ganze angepasst werden, damit es unter 64/32 bit und Excel 2007 läuft?
Da ich mich nicht wirklich damit auskenne, wäre es schön wenn mir jemand behilflich sein würde...
bräuchte nochmal Hilfe.
Ich habe hier einen Code der soweit auf meinem Rechner mit 64bit läuft. Ich hab hier vor Funktion immer PtrSafe geschrieben.
Allerdings scheint das ganze nicht unter Excel 2007 32bit zu laufen.
Wie muss das ganze angepasst werden, damit es unter 64/32 bit und Excel 2007 läuft?
Da ich mich nicht wirklich damit auskenne, wäre es schön wenn mir jemand behilflich sein würde...
Code:
Option Explicit ' Variablendefinition erforderlich
Option Private Module ' damit Makros nich von Hand gestartet werden können
Public Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare PtrSafe Function SetWindowPos Lib "User32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare PtrSafe Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Public Enum Parameter
HWND_TOPMOST = -1
SWP_NOSIZE = &H1
SWP_NOMOVE = &H2
SWP_NOACTIVATE = &H10
SWP_SHOWWINDOW = &H40
End Enum
Public DaEt As Date ' Prüfzeit für Eingabe in der Tabelle
Public DaET1 As Date ' Prüfzeit für Reaktion in Userform
Public DaET2 As Date ' Zeit zum Wechsel der Anzeige
Public BoZu As Boolean ' Variable Zustand
Public Const DaZeit As Date = "00:10:00" ' Zeitabstand prüfen, Eingabe Tabelle
Public Const DaZeit1 As Date = "00:01:00" ' Zeitabstand prüfen, Userform
Public Const DaZeit2 As Date = "00:00:01" ' Zeitabstand für Restzeit
Public BoEnde As Boolean ' Variable Beenden
Sub Zeitmakro() ' Zeitmakro Eingabe Tabelle
BoZu = False
On Error Resume Next ' Fehlerbehandlung ausschalten
' Makro anhalten
Application.OnTime EarliestTime:=DaET1, Procedure:="Zeitmakro", Schedule:=False
On Error GoTo 0 ' Fehlerbehandlung einschalten
DaEt = Now + DaZeit ' neue Startzeit setzen
Application.OnTime DaEt, "Start" ' Makro zum festgelegten Zeitpunkt starten
End Sub
Sub Start() ' Zeitmakro Anzeige Userform
DaET1 = Now + DaZeit1 ' Zeit für das schließen der Datei festlegen
Application.OnTime DaET1, "Schließen" ' Makro zum festgelegten Zeitpunkt starten
SetActiveWindow FindWindow("xlMain", vbNullString)
frm_Abfrage.Show ' UserForm starten
End Sub
Sub Schließen()
'Unload UserForm1
If BoZu = False Then
ThisWorkbook.Save ' Datei speichern
' falls nur eine Datei auf Excel schließen
' ess erfolgt eine Abfrage zum speichern
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End If
End Sub
Sub Zeitabstand() ' Makro für laufende Zeit in UserForm
With frm_Abfrage
' neue Zeit auf das Label schreiben
.LbL_Zeit.Caption = "Restzeit: " & CDate(CDate(Application.Substitute(.LbL_Zeit.Caption, "Restzeit: ", "")) - DaZeit2)
' Prüfen ob Zeit abgelaufen ist
If CDate(Right(.LbL_Zeit.Caption, 8)) > 0 Then
DaET2 = Now + DaZeit2 ' neue Startzeit setzen
Application.OnTime DaET2, "Zeitabstand" ' Makro zum festgelegten Zeitpunkt starten
End If
End With
End Sub