PDA

Vollständige Version anzeigen : Makro stoppen und sobald Wert in Zelle vorhanden Makro weiter ausführen


mgoffice-soleil
22.02.2018, 22:40
Hallo zusammen,

wie kann ich in Excel ein Makro unterbrechen und sobald beispielsweise in Zelle A1 ein Wert enthalten ist, soll das Makro weiter ausgeführt werden.

Also nicht mit einer IF Abfrage, sondern Excel soll solange warten bis in Zelle A1 ein Wert steht und dann das Makro weiter ausführen.

Hajo_Zi
23.02.2018, 04:46
Du kannst kein Makro mittendrin anhalten, bzw. sehr Aufwendig.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Luschi
23.02.2018, 08:43
Hallo mgoffice-soleil,

wie kommt der der Wert in die Zelle:
- per Excel-Formel
- mit Vba
- oder???
Bastle eine Endlos-Schleife mit Abbruchbedingung:Sub test1()
Dim i As Integer
i = 1
Do While True
i = i + 1
If i = 5 Then
Range("A1").Value = i
End If
If Not IsEmpty(Range("A1").Value) Then
Exit Do
End If
Loop
End SubGruß von Luschi
aus klein-Paris

mgoffice-soleil
25.02.2018, 02:49
also ich starte aus Excel heraus mittels Makro ein externes Programm. Das Programm gibt nach einiger Zeit einen Wert zurück, der in Zelle A1 kopiert wird.

Dies kann je nach Internetverbindung dauern. Der Wert wird erfahrungsgemäß nach ca. 1 Minute in Excel kopiert. Ich lasse daher das Makro mit der Application.Wait Methode für 60 Sekunden warten. Danach läuft das Makro auch weiter.

Mir gefällt die application.wait Methode nicht so sehr. Es könnte theoretisch möglich sein, dass das Kopieren des Wertes aus dem externen Programm in Zelle A1 mehr oder weniger Zeit in Anspruch nimmt.

Deshalb ist die Lösung einer Dauerschleife eigentlich besser. Nur wenn ich z. B. statt if i = 5, if i = 999999 schreibe, kommt es in Excel zur Fehlermeldung



Sub test1()
Dim i As Integer
i = 1
Do While True
i = i + 1
If i = 999999 Then
Range("A1").Value = i
End If
If Not IsEmpty(Range("A1").Value) Then
Exit Do
End If
Loop
End Sub



Ich möchte eigentlich nur von der "starren" application.wait Methode wegkommen.

Luschi
25.02.2018, 08:18
Hallo mgoffice-soleil,

meine Schleife sieht so aus:Sub test1()
Dim rg As Range, v As Variant

Set rg = Worksheets("meineTabelle").Range("A1")
ws.Value = ""
'jetzt externes Programm starten
Do While True
v = rg.Value
If v <> "" Then
'Endlos-Schleife verlassen
Exit Do
Else
'weiter in der Schleife bleiben
DoEvents
End If
Loop
'weiter gehts mit dem Excel-Makro

Set ws = Nothing
End SubGruß von Luschi
aus klein-Paris

PS: Integer hat nur einen Wertebereich von -32.768 bis +32.767
deshalb der Fehler wegen Bereichsüberschreigung, aber in der Endlosschleife braucht man 'i' nicht, es sei denn, Du willst wissen, wieviele Runden gedreht wurden