PDA

Vollständige Version anzeigen : Auto-Funktion


NeoKortex
29.06.2015, 09:18
Hallo,

ich hätte eine Excel Datei die als visuelle Oberfläche für eine Accessdatenbank fungiert.

Es soll zum Beispiel immer um 4 Uhr Morgens eine Email losgeschickt werden.
Ich habe schon gesucht bei Google nach Timer-Funktion aber die wird meistens beim Aslösen von einem bestimmten Ereignis ausgelöst.

Könnt ich iwie ein Ereignis setzen, sobald ein bestimmtes Datenblatt angeklickt wird?

Generell sollen Statistiken von einem Datenblatt als Emails automatisch Morgens verschickt werden.

Gruß,
Neorkortex

EarlFred
29.06.2015, 09:34
Hallo Neorkortex,

ich hätte eine Excel Datei die als visuelle Oberfläche für eine Accessdatenbank fungiert.
verstehe ich nicht. Hast Du eine oder hättest Du gerne eine solche Datei?

Es soll zum Beispiel immer um 4 Uhr Morgens eine Email losgeschickt werden.
Was hat das mit der "visuellen Access-Oberfläche" zu tun? Das ist doch losgelöst davon, oder?

Könnt ich iwie ein Ereignis setzen, sobald ein bestimmtes Datenblatt angeklickt wird?
Was heißt "iwie"? Was nun: Timer auf 4:00 Uhr stellen oder Tabellenblatt anklicken?
Ersteres:
Aufgabenplanung von Windows nutzen?

Letzeres:
'Objektmodul Workbook
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
End Sub
oder
'Objektmodul des betreffende Blattes
Private Sub Worksheet_Activate()
End Sub

Ich bin irgendwie ratlos.

Grüße
EarlFred

NeoKortex
29.06.2015, 09:40
Ich habe eine Access-Datenbank.
Die Daten in der Access-Datenbank werden in Excel dargestellt.
In Excel gibt es eine Statstik.

Ich möchte diese Statistik immer um 4 Uhr Nachts losgeschickt bekommen per E-Mail. Die Exceldatei ist immer geöffnet.

Gibt es eine Methode/Funktion/Makro die mir immer um 4 Uhr Nachts, sofern Datei geöffnet ist, code x ausführt?

Hoffe das wahr verständlicher, Gruß NeoKortex

EarlFred
29.06.2015, 09:41
Hallo NeoKortex,

Gibt es eine Methode/Funktion/Makro die mir immer um 4 Uhr Nachts, sofern Datei geöffnet ist, code x ausführt?
na frag das doch gleich! Nutze Application.OnTime.

Der Timer hängt dann allerdings an der Application, nicht der Datei! (Was aber kein Problem ist, da dieser beim Öffnen der Datei initialisiert werden kann).

Grüße
EarlFred

NeoKortex
29.06.2015, 09:47
Aber wenn der Timer für 4 uhr abgelaufen ist, geht der dann auch noch die Nacht darauf etc.?
Also ist das so ein einmaliges Event oder macht er immer zur gewählten Zeit?

Gruß, NoeKortex

EarlFred
29.06.2015, 09:48
Hallo NoeKortex,

beim Eintritt des Timers kannst Du doch gleich einen neuen setzen.

Edit: Beispiel
Option Explicit

Private Sub Workbook_Open()
starteTimer True, 0
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
starteTimer False, 0
End Sub

Function starteTimer(ByRef blnTimerAn As Boolean, ByRef intTagAufschlag As Integer)

If intTagAufschlag = 0 Then intTagAufschlag = IIf(Time < 1 / 6, 0, 1)
Application.OnTime EarliestTime:=Date + intTagAufschlag + 1 / 6, Procedure:="DieseArbeitsmappe.StarteMich", Schedule:=blnTimerAn

End Function

Sub StarteMich()
MsgBox "Ich arbeite!"
starteTimer True, 1
End Sub

Der Code gehört in das Modul "DieseArbeitsmappe". Sofern die Nicht-Ereignis-Prozeduren in ein anderes Modul ausgelagert werden sollen, müssen die Aufrufe entsprechend angepasst werden.

Grüße
EarlFred

NeoKortex
29.06.2015, 10:04
Das nehme ich an, mache ich in der Timer Funktion.

Also iwie so:


public Sub Startzeit()
Application.OnTime TimeValue("04:30:00"), "Ausfuhren"
End Sub

private Sub Ausfuhren()
...
Sleep(100)
Startzeit
End Sub


und sleep ( oder wie das bei VBA geht ) habe ich gewählt, damit nicht direkt wieder die gleiche Prozedur losgetreten sondern auf den nächsten Tag gewartet wird.

Wenn ich Startzeit z.B. immer beim Aufruf des Datenblattes ausführen lasse,
ruft er mir dann mehrere Instanzen von Ausführen auf oder aktiviert nur den Timer erneut?

Gruß

EarlFred
29.06.2015, 10:08
Hallo Gruß,

definiere den Zeitpunkt als Angabe aus Datum und Zeit (NICHT als "reine" Uhrzeit).

Siehe Beispielcode in der Antwort #6 davor.

Grüße
EarlFred

NeoKortex
29.06.2015, 11:25
Hallo,

ich verstehe nicht genau, wie sich daraus die Zeit berechnet
If intTagAufschlag = 0 Then intTagAufschlag = IIf(Time < 1 / 6, 0, 1)

Danke für die Hilfe bis hier hin :)

NeoKortex
29.06.2015, 11:50
Achso ich denke ich verstehs jetzt :)
Danke