Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1252to1256
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

Application.OnTime in mehreren offenen Dateien?

Application.OnTime in mehreren offenen Dateien?
Mathias
Hallo zusammen!
Ich habe mittlerweile ein bisschen rumgespielt und die Automatisierung für mich entdeckt. Das ganze funktioniert tadellos, solange ich das nur in einzelnen Dateien mache.
Sobald ich zwei ähnlich aufgebaute Dateien gleichzeitig offen habe, läuft er mir nach kurzer Zeit auf einen Fehler. Der Debugger steht dann aber auch nicht immer an der gleichen Stelle oder in der gleichen Datei...
Hier mal meine Vorgehensweise:
Sub Aufruf()
Dim gdatZEIT As Date
Application.DisplayAlerts = False
Call ODBC_Verbindung_Refresh
Call Diagramm_einblenden
Sheets(3).Select
gdatZEIT = Now + Range("C23")
Application.OnTime gdatZEIT, "Aufruf"
End Sub
Im entsprechenden Excel-Tabellenblatt habe ich in C23 das Abfrageintervall hinterlegt, dass man es variabel ändern kann.
Die ODBC-Verbindung und die Aktualisierung funktionieren ohne Probleme. Das Makro läuft bei einem Testintervall von 1Minute den ganzen Morgen ohne Meckern durch...
Die andere(n) Dateie(n), sind nach dem gleichen Schema aufgebaut, auch heißen die Variablen oder auch die Tabellenblätter teilweise gleich, es sind aber eigenständige Dateien (Auto1.xlsm, Auto2.xlsm, etc.).
Ist der Fehler auf eine allgemeine Application.OnTime-Routine zurückzuführen oder bin ich in den einzelnen Sub-Blöcken zu unspezifisch was die Adressierung innerhalb der Dateien angeht oder liegt es daran, dass die Zeitintervall sich irgendwann genau überschneiden (Bsp. einmal jede 5 Minuten, einmal jede 6 Minuten, bei 30Minuten kracht es dann)?
Ich hoffe ich habe mich nicht zu kryptisch ausgedrückt und die Profis können ein wenig Licht ins Dunkel bringen (gerne auch mit Verweis auf einen bestehenden Thread).
Grüße
Mathias

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Application.OnTime in mehreren offenen Dateien?
23.02.2012 16:26:25
fcs
Hallo Mathias,
wenn du mit OnTime arbeitest und dann in Excel weiterarbeitest oder mit mehreren Dateien gleichzeitig arbeitest, dann muss du die im Makro involvierten Objekte (Arbeitsmappen, Diagramme, Tabellen, Zellbereiche etc) immer vollständig referenzieren, sonst gibt es Probleme, weil sich sonst die Objekte oft auf die jeweils gerage aktive Arbeitsmappe beziehen. Verwende im Code "ThisWorkbook" als Stellvertreter für die Arbeitsmappe in der das Makro gespeichert ist, dann ist das Referenzieren auf Diagrame und Tabellen problemlos.
Versuche auf Select-Befehle vollständig zu verzichten. Diese setzen voraus, dass die entsprechende Selektion im aktiven Fenster auch möglich ist.
Gruß
Franz
Beispiel:
Sub Aufruf()
Dim gdatZEIT As Date
Dim wb As Workbook
Set wb = ThisWorkbook
Application.DisplayAlerts = False
Call ODBC_Verbindung_Refresh
Call Diagramm_einblenden
wb.Activate
wb.Sheets(3).Select
gdatZEIT = Now + wb.Worksheets(1).Range("C23")
Application.OnTime gdatZEIT, "Aufruf"
End Sub

Anzeige
AW: Application.OnTime in mehreren offenen Dateien?
24.02.2012 10:09:22
Mathias
Hallo Franz,
vielen Dank für deine schnelle Antwort.
Es funktioniert jetzt einwandfrei, dass alle stabil parallel laufen und sich aktualisieren.
allerdings habe ich mir jetzt ein neues Problem eingehandelt:
Wenn ich eine Datei schließe (oder auch alle) und Excel noch offen ist, öffnen sich die Dateien wieder von selbst nach dem angegebenen Intervall.
Dass das mit Application.Ontime zusammenhängt, ist mir auch klar. Ich hatte in den Einzeldateien auch einen Code-Teil zum Beenden mit drin, aber dieser funktioniert nicht mehr.
Sub Stop()
Dim gdatZEIT As Date
On Error Resume Next
If IsEmpty(gdatZEIT) Then Exit Sub
Application.OnTime _
earliesttime:=gdatZEIT, _
procedure:="Aufruf", schedule:=False
End Sub

Auch wenn ich das um folgenden Block erweitere, funktioniert es nicht:
Sub Stop()
Dim gdatZEIT As Date
Dim wb As Workbook
Set wb = ThisWorkbook
Application.DisplayAlerts = False
wb.Activate
On Error Resume Next
If IsEmpty(gdatZEIT) Then Exit Sub
Application.OnTime _
earliesttime:=gdatZEIT, _
procedure:="Aufruf", schedule:=False
End Sub

Der Code wird dann über folgendes Makro, dass ich zum Schließen nicht im Modul sondern in der Arbeitsmappe habe aufgerufen:
"PrivateSubWorkbook_BeforeClose(Cancel As Boolean)"
Sub x()' wenn ich privatesubworkbook hier hin schreibe, werden die anderen beiden Codes nicht  _
mehr fürs Forum formatiert?!
Dim wb As Workbook
Set wb = ThisWorkbook
Application.DisplayAlerts = False
wb.Activate
On Error Resume Next
Application.DisplayAlerts = False
Call Stop
ActiveWorkbook.Save
End Sub

Wo liegt mein (Denk-)Fehler?
wäre super, wenn mir nochmal jemand auf die Sprünge helfen kann.
Grüße
Mathias
Anzeige
AW: Application.OnTime in mehreren offenen Dateien?
24.02.2012 16:37:48
fcs
Hallo Mathias,
die Variable "gdatZEIT" für die Startzeit muss anders deklariert werden, damit sie auch in der Stop-Prozedur verfügbar ist.
Sie darf nur eimal in einem allgemeinen Mosul als Public-Variable deklariert werden und nicht in jeder Prozedur per Dim.
"Stop" solltest du nicht als Prozedurnamen verwenden, da Stop ein VBA-Befehl ist.
Gruß
Franz
'Code in einem allgemeinen Modul
Option Explicit
Public gdatZEIT As Date
Sub Stop_Ontime()
On Error Resume Next
If IsEmpty(gdatZEIT) Then Exit Sub
Application.OnTime _
earliesttime:=gdatZEIT, _
procedure:="Aufruf", schedule:=False
End Sub
Sub Aufruf()
Dim wb As Workbook
Set wb = ThisWorkbook
Application.DisplayAlerts = False
Call ODBC_Verbindung_Refresh
Call Diagramm_einblenden
wb.Activate
wb.Sheets(3).Select
gdatZEIT = Now + wb.Worksheets(1).Range("C23")
Application.OnTime gdatZEIT, "Aufruf"
End Sub

Die Workbook_BeforeClose-Prozedur kannst du etwas vereinfachen.
'Code unter DieseArbeitsmappe
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Stop_Ontime
ThisWorkbook.Save
End Sub

Anzeige
AW: Application.OnTime in mehreren offenen Dateien?
28.02.2012 06:40:22
Mathias
Guten Morgen!
Vielen Dank für die neuerliche Hilfe. Ich kam noch nicht dazu es umzusetzen, aber es wird schon klappen. Ich melde mich, auch da ich noch eine zweite Prozedur "Slideshow" einbauen werde.
Sub Auto_Slideshow()
Dim chrt As Chart
For Each chrt In ThisWorkbook.Charts
chrt.Activate
Application.Wait Now + TimeSerial(0, 0, 6)
Next
End Sub
Da sich die Dateien "nur" alle 30-60min aktualisieren lassen, soll in der Zwischenzeit alle x Sekunden (momentan 6) die Diagramme nacheinander eingeblendet werden.
Mein Ansatz, den ich verfolgen werden ist irgend etwas in Richtung "do until" und wieder auf den gdazeit-Faktor einzugehen. Ich bastel mal alles zusammen und schreibe dann wieder.
Grüße
Mathias
Anzeige

54 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige