Thema Datum  Von Nutzer Rating
Antwort
16.04.2004 15:09:35 exonix
NotSolved
16.04.2004 15:47:27 Rasta
NotSolved
16.04.2004 16:15:15 Exonix
NotSolved
17.04.2004 23:51:57 Rasta
NotSolved
19.04.2004 12:11:43 exonix
NotSolved
Blau Aw:Makro blockiert PC
21.04.2004 11:35:08 Rasta
NotSolved

Ansicht des Beitrags:
Von:
Rasta
Datum:
21.04.2004 11:35:08
Views:
1122
Rating: Antwort:
  Ja
Thema:
Aw:Makro blockiert PC
Hi Exonix,

freut mich, wenn ich Dir etwas weiterhelfen konnte. Folgend wie versprochen eine "bessere" Lösung des Problems.

Normalerweise programmiert man solche Zeit-Folgen mit dem TIMER-Steuerelement. Das kann so eingestellt werden, das z.B. alle 60 Sekunden ein Sub abgearbeitet wird.

Verwende normal VB6 - Habe dieses Timer-Steuerelement jedoch nicht in VBA finden können. Auch eine ähnliche API-Funktion fand ich nicht. Deswegen habe ich als Schnellschuß die Sleep-Funktion verwendet.

Zunächst habe ich mir eine UserForm eingefügt und darauf einen "Start"- und einen "Abbruch"-Button eingefügt.

------------------------

Option Explicit

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub CommandButton1_Click()
'start

Xabbruch = False

Do Until Xabbruch = True
Sleep (60000)
If LCase(Dir("c:\Zenker\Testfile.csv")) = "testfile.csv" Then
Call sub_B
Else
Sleep (2000) 'pause von 2 sekunden
End If
Doevents
Loop

End Sub

Private Sub CommandButton2_Click()
'abbruch
Xabbruch = True
End Sub

Public Sub sub_B()
'hier passiert was anderes
End Sub

----------------------------------

dadurch das modular programmiert wurde, ist der Code besser wiederverwendbar und übersichtlicher.

Mögliche Api-Calls findest Du im übrigen hier:

http://www.vbapihelpline.de/


Viele Grüße


Rasta


exonix schrieb am 19.04.2004 12:11:43:

Hallo Rast!

Vielen, vielen Dank!
Du hast vollkommen Recht gehabt!
Wenn ich an der Stelle (nach Else vor End If) DoEvents einfüge, macht sich das im Hintergrung laufende Makro nicht bemerkbar. Und das ist sehr wichtig, da der PC mehrere Prozesse verkraften muss!
;-)

Nochmals danke,
exoni


Rasta schrieb am 17.04.2004 23:51:57:

Hallo Exnoix,

meiner Meinung nach blockiert der PC nicht innerhalb der Schleife, in der Du die 2 Minuten misst, sondern bei der Prüfung der "nullsekunde". Baue an dieser Stelle noch ein DoEvents ein, meiner Meinung sollte es dann besser laufen. Eine Alternative zur Goto-Programmierung werde ich Dir nachliefern.

A: secnow = Second(Now)
If secnow = 0 Then
'Dateiexistenzprüfung
If LCase(Dir("c:\Zenker\Testfile.csv")) = "testfile.csv" Then
GoTo B:
Else
'Pause von 2 Sekunden
Pausenlänge = 2
Start = Timer
Do While Timer < Start + Pausenlänge
DoEvents
Loop
Ende = Timer
Gesamtdauer = Ende - Start
GoTo A:
End If
Else
DOEVENTS
GoTo A:
End If

Viele Grüße

Rasta


Hallo Rasta und alle anderen, die sich beteiligen!

Erst einmal ein großes Dankeschön für die prompte Antwort!

Möchte dir das Problem noch etwas genauer schildern.
DoEvents hatte ich schon in einer Pause mit DoWhile verarbeitet, dort entsteht auch nicht das Problem, meiner Meinung nach. Andere Makros, in denen ich ebenfalls Pausen eingebaut habe, blockieren nichts.
Hier erst mal der Quellcode:

A: secnow = Second(Now)
If secnow = 0 Then
'Dateiexistenzprüfung
If LCase(Dir("c:\Zenker\Testfile.csv")) = "testfile.csv" Then
GoTo B:
Else
'Pause von 2 Sekunden
Pausenlänge = 2
Start = Timer
Do While Timer < Start + Pausenlänge
DoEvents
Loop
Ende = Timer
Gesamtdauer = Ende - Start
GoTo A:
End If
Else
GoTo A:
End If

Wieso tritt die Blockade auf, wenn das Makro einmal pro Minute die Existenz einer Datei prüfen soll?
Es wird den PC doch nicht so sehr belasten, nebenher auf die Sekunden aufzupassen und bei 00 einen Schritt weiter zu gehen!

Hast du mir jetzt noch einen Rat?

"Unübersichtlich" bekomme ich durch Anmerkungen und Tabs in den Griff, aber was meinst du mit unsauber?
Alternative zu GoTo?

Danke,
exonix

Rasta schrieb am 16.04.2004 15:47:27:

Hallo Exonix,

baue ein

DoEvents

innerhalb der Schleife ein.

Gruß

Rasta

Ps: "Goto"-Anweisungen machen den Code unübersichtlich und unsauber


exonix schrieb am 16.04.2004 15:09:35:

Hallo alles zusammen!

Wer kann/wer möcht mir helfen?
Habe ein Makro in VBA geschrieben.
Im ersten Teil prüft das Makro jede Minute, ob eine ganz bestimmt Datei vorhanden ist, um dann zum nächsten Schritt zu gehen.
Realisiert habe ich das durch a: If Secnow = 0 then bla, bla, bla, else GoTo a: bla bla bla.
Allerdings ist der komplette PC blockiert, so lange es nicht Sekunde 0 geschlagen hat!

Hat jemand einen Tip, um das ganze zu entblockieren?

Danke,
exonix

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
16.04.2004 15:09:35 exonix
NotSolved
16.04.2004 15:47:27 Rasta
NotSolved
16.04.2004 16:15:15 Exonix
NotSolved
17.04.2004 23:51:57 Rasta
NotSolved
19.04.2004 12:11:43 exonix
NotSolved
Blau Aw:Makro blockiert PC
21.04.2004 11:35:08 Rasta
NotSolved