von balu » Mi, 05.10.2011 16:30
Philipp_19 hat geschrieben:
balu hat geschrieben:Der Text-Cursor ist eingefroren, er blinkt nicht. Und das bedeutet in meinen Augen, dass OOo sehr beschäftigt ist. Es weiß wohl nur nicht so recht was es machen soll, und gibt deshalb den Cursor nicht frei.
Aber warum bewirkt dann das einfügen einer MessageBox (bei mir), dass er, nach deinen Wort, weiß was er tun soll und allem Anschein nach nicht mehr so sehr beschäftigt ist?
Weiß ich nicht, und habe ich nicht weiter nachgeforscht, da keine Zeit mehr war. Und ganz ehrlich, ist aber nicht bös gemeint, habe ich jetzt auch keine Lust dazu das weiter zu untersuchen.
Stephan hat geschrieben:
-Öffnen der Vorlage
-In Tabelle 3 wird EIN "a" eingetragen
-Es passiert nichts weiter.
Bei mir nicht.
Das Makro läuft OHNE Mesage-Box ununterbrochen durch
sowie fortlaufend weitere a. (Windows7, OOo 3.3.0)
Also nun wird es aber endgültig komisch und merkwürdig!
Meine Testumgebung heute Mittag:
WinXP
OOo 3.2.1
Bis auf den eingefrorenen Text-Cursor geschah nichts weiter. Und nun hatte ich die gleiche Datei noch mal unter der 3.3.0 (selbst gemachte Portable) getestet, und keinen Unterschied zu der 3.2.1 festgestellt. Ach ja! Auch die 3.3.0 unter WinXP. Also gleicher Rechner, nur zwei erschiedene OOo-Versionen.
Blöde Frage: "Welches Windows spinnt denn nun, XP oder 7?"
Philipp_19 hat geschrieben:
Ist euch aufgefallen, dass das erste "a" in der Tabelle3 durch das Makro eingefügt wird?
Das heißt, dass das Makro durchaus startet (ohne MsgBox), aber in der Do-Loop-Schleife irgendwie stecken bleibt, oder sehe ich das falsch?
Deine Beobachtung kann ich so weit bestätigen. Das liegt aber wohl an deiner DO-LOOP selbst, denn es gibt da ja verschiedene Variationen wie eine LOOP aufgebaut werden kann. Kenne mich aber noch nicht damit so aus, da mir das Verständnis dazu fehlt. Und außerdem ist die Hilfe (F1) in dieser Hinsicht nicht wirklich hilfreich. Im Wiki habe ich bis jetzt noch keine passende Stelle gefunden wo mehr darüber nacvhzulesen ist. Wenn da jemand den richtigen Link dazu hat, bitte her damit. Würd mich sehr darüber freuen.
Ich habe aber in meinem alten SO 5.2 etwas mehr darüber in der Hilfe gefunden.
Code: Alles auswählen
Do...Loop-Anweisung [Runtime]
Wiederholt die zwischen der Do- und der Loop-Anweisung aufgeführten Anweisungen solange (While) die angegebene Bedingung wahr ist oder bis (Until) die angegebene Bedingung wahr wird.
Syntax:
see Parameter see
Parameter:
Syntax
Do [{While | Until} Bedingung = True]
Befehlsblock
[Exit Do]
Befehlsblock
Loop
oder
Do
Befehlsblock
[Exit Do]
Befehlsblock
Loop [{While | Until} Bedingung = True]
Param./Element
Bedingung : Ein Vergleichsausdruck, numerischer Ausdruck oder Zeichenfolgenausdruck, der wahr (True) oder falsch (False) ist.
Befehlsblock : Die Anweisungen, die wiederholt werden, solange die angegebene Bedingung wahr ist oder sobald die angegebene Bedingung wahr wird.
Die Do...Loop-Anweisung eignet sich, um eine Schleife zu konstruieren, die solange durchlaufen wird, bis oder solange eine bestimmte Bedingung erfüllt ist. Die Abbruchkriterien müssen entweder hinter der Do-Anweisung oder hinter der Loop-Anweisung angegeben werden; beides kombiniert ist nicht statthaft. Folgende vier Kombinationen sind also möglich.
Syntax
Do While Bedingung = True
...Befehlsblock
Loop
Das Programm überprüft, ob die Bedingung wahr ist. Ist sie falsch, geht es mit der Programmausführung direkt hinter Loop weiter. Ist die Bedingung wahr, wird die Schleife durchlaufen, das Programm trifft auf Loop und springt zurück zur Do-Anweisung. Ist die Bedingung jetzt immer noch wahr, wird die Schleife abermals durchlaufen, ansonsten fährt das Programm mit der Ausführung des hinter der Loop-Anweisung stehenden Befehls fort.
Kurz zusammengefaßt: Die Schleife wird nur dann und nur solange, wie die Bedingung wahr ist, ausgeführt.
Do Until Bedingung = True
...Befehlsblock
Loop
Das Programm überprüft, ob die Bedingung wahr ist. Ist sie es, geht es mit der Programmausführung direkt hinter Loop weiter. Ist die Bedingung nicht wahr, wird die Schleife durchlaufen, das Programm trifft auf Loop, springt zurück zur Do-Anweisung. Ist die Bedingung jetzt immer noch nicht wahr, wird die Schleife abermals durchlaufen, ansonsten fährt das Programm mit der Ausführung der hinter der Loop-Anweisung stehenden Anweisung fort.
Kurz zusammengefaßt: Die Schleife wird nur dann ausgeführt, wenn die Bedingung zunächst falsch ist, und dann solange bis die Bedingung wahr ist.
Do
...Befehlsblock
Loop While Bedingung = True
Das Programm tritt sofort in die Schleife ein. Trifft es auf Loop, überprüft es, ob die Bedingung wahr ist. Ist sie es, geht es mit der Programmausführung bei Do weiter - die Schleife wird wiederholt. Erst wenn die Bedingung hinter Loop falsch wird, tritt das Programm aus der Schleife aus.
Kurz zusammengefaßt: Die Befehle innerhalb der Schleife werden in jedem Fall einmal und solange wie die Bedingung wahr ist, ausgeführt.
Do
...Befehlsblock
Loop Until Bedingung = True
Das Programm tritt sofort in die Schleife ein. Trifft es auf Loop, überprüft es, ob die Bedingung wahr ist. Ist sie es nicht, geht es mit der Programmausführung bei Do weiter - die Schleife wird wiederholt. Erst, wenn die Bedingung hinter Loop wahr wird, tritt das Programm aus der Schleife aus.
Kurz zusammengefaßt: Die Befehle innerhalb der Schleife werden in jedem Fall einmal und solange bis die Bedingung wahr wird, ausgeführt.
Wichtigster Unterschied zwischen den ersten beiden und den letzten beiden Konstruktionen: Bei den ersten beiden Konstruktionen wird die Schleife nicht unbedingt, also nur in Abhängigkeit von der Bedingung ausgeführt. Bei den letzten beiden Konstruktionen werden die zwischen Do und Loop stehenden Befehle wenigstens ein einziges Mal ausgeführt.
Mit Hilfe der Anweisung Exit Do kann die Schleife unbedingt verlassen werden. Dieser Befehl befindet sich innerhalb eines Befehlsblocks, der durch Do und Loop umschlossen ist. In der Regel konstruieren Sie hier mit Hilfe der If...Then-Struktur eine Abbruchbedingung im Sinne von:
Do...
Befehle
If Bedingung = True Then Exit Do
Befehle
Loop...
Beispiel:
Sub ExampleDoLoop
Dim sDatei As String
Dim sPath As String
sPath = "c:\"
sDatei = Dir$( sPath ,22)
If sDatei <> "" Then
Do
Msgbox sDatei
sDatei = Dir$
Loop Until sDatei = ""
End If
End sub
Vielleicht hilft ja der Hilfe-Text. Wenn nicht, is auch nicht schlimm.
Gruß
balu
[quote="Philipp_19"]
[quote="balu"]Der Text-Cursor ist eingefroren, er blinkt nicht. Und das bedeutet in meinen Augen, dass OOo sehr beschäftigt ist. Es weiß wohl nur nicht so recht was es machen soll, und gibt deshalb den Cursor nicht frei.[/quote]
Aber warum bewirkt dann das einfügen einer MessageBox (bei mir), dass er, nach deinen Wort, weiß was er tun soll und allem Anschein nach nicht mehr so sehr beschäftigt ist?
[/quote]
Weiß ich nicht, und habe ich nicht weiter nachgeforscht, da keine Zeit mehr war. Und ganz ehrlich, ist aber nicht bös gemeint, habe ich jetzt auch keine Lust dazu das weiter zu untersuchen.
[quote="Stephan"]
[quote]-Öffnen der Vorlage
-In Tabelle 3 wird EIN "a" eingetragen
-Es passiert nichts weiter.[/quote]
Bei mir nicht.
Das Makro läuft OHNE Mesage-Box ununterbrochen durch
sowie fortlaufend weitere a. (Windows7, OOo 3.3.0)
[/quote]
Also nun wird es aber endgültig komisch und merkwürdig!
Meine Testumgebung heute Mittag:
WinXP
OOo 3.2.1
Bis auf den eingefrorenen Text-Cursor geschah nichts weiter. Und nun hatte ich die gleiche Datei noch mal unter der 3.3.0 (selbst gemachte Portable) getestet, und keinen Unterschied zu der 3.2.1 festgestellt. Ach ja! Auch die 3.3.0 unter WinXP. Also gleicher Rechner, nur zwei erschiedene OOo-Versionen.
Blöde Frage: "Welches Windows spinnt denn nun, XP oder 7?"
[quote="Philipp_19"]
Ist euch aufgefallen, dass das erste "a" in der Tabelle3 durch das Makro eingefügt wird?
Das heißt, dass das Makro durchaus startet (ohne MsgBox), aber in der Do-Loop-Schleife irgendwie stecken bleibt, oder sehe ich das falsch?
[/quote]
Deine Beobachtung kann ich so weit bestätigen. Das liegt aber wohl an deiner DO-LOOP selbst, denn es gibt da ja verschiedene Variationen wie eine LOOP aufgebaut werden kann. Kenne mich aber noch nicht damit so aus, da mir das Verständnis dazu fehlt. Und außerdem ist die Hilfe (F1) in dieser Hinsicht nicht wirklich hilfreich. Im Wiki habe ich bis jetzt noch keine passende Stelle gefunden wo mehr darüber nacvhzulesen ist. Wenn da jemand den richtigen Link dazu hat, bitte her damit. Würd mich sehr darüber freuen.
Ich habe aber in meinem alten SO 5.2 etwas mehr darüber in der Hilfe gefunden.
[code]
Do...Loop-Anweisung [Runtime]
Wiederholt die zwischen der Do- und der Loop-Anweisung aufgeführten Anweisungen solange (While) die angegebene Bedingung wahr ist oder bis (Until) die angegebene Bedingung wahr wird.
Syntax:
see Parameter see
Parameter:
Syntax
Do [{While | Until} Bedingung = True]
Befehlsblock
[Exit Do]
Befehlsblock
Loop
oder
Do
Befehlsblock
[Exit Do]
Befehlsblock
Loop [{While | Until} Bedingung = True]
Param./Element
Bedingung : Ein Vergleichsausdruck, numerischer Ausdruck oder Zeichenfolgenausdruck, der wahr (True) oder falsch (False) ist.
Befehlsblock : Die Anweisungen, die wiederholt werden, solange die angegebene Bedingung wahr ist oder sobald die angegebene Bedingung wahr wird.
Die Do...Loop-Anweisung eignet sich, um eine Schleife zu konstruieren, die solange durchlaufen wird, bis oder solange eine bestimmte Bedingung erfüllt ist. Die Abbruchkriterien müssen entweder hinter der Do-Anweisung oder hinter der Loop-Anweisung angegeben werden; beides kombiniert ist nicht statthaft. Folgende vier Kombinationen sind also möglich.
Syntax
Do While Bedingung = True
...Befehlsblock
Loop
Das Programm überprüft, ob die Bedingung wahr ist. Ist sie falsch, geht es mit der Programmausführung direkt hinter Loop weiter. Ist die Bedingung wahr, wird die Schleife durchlaufen, das Programm trifft auf Loop und springt zurück zur Do-Anweisung. Ist die Bedingung jetzt immer noch wahr, wird die Schleife abermals durchlaufen, ansonsten fährt das Programm mit der Ausführung des hinter der Loop-Anweisung stehenden Befehls fort.
Kurz zusammengefaßt: Die Schleife wird nur dann und nur solange, wie die Bedingung wahr ist, ausgeführt.
Do Until Bedingung = True
...Befehlsblock
Loop
Das Programm überprüft, ob die Bedingung wahr ist. Ist sie es, geht es mit der Programmausführung direkt hinter Loop weiter. Ist die Bedingung nicht wahr, wird die Schleife durchlaufen, das Programm trifft auf Loop, springt zurück zur Do-Anweisung. Ist die Bedingung jetzt immer noch nicht wahr, wird die Schleife abermals durchlaufen, ansonsten fährt das Programm mit der Ausführung der hinter der Loop-Anweisung stehenden Anweisung fort.
Kurz zusammengefaßt: Die Schleife wird nur dann ausgeführt, wenn die Bedingung zunächst falsch ist, und dann solange bis die Bedingung wahr ist.
Do
...Befehlsblock
Loop While Bedingung = True
Das Programm tritt sofort in die Schleife ein. Trifft es auf Loop, überprüft es, ob die Bedingung wahr ist. Ist sie es, geht es mit der Programmausführung bei Do weiter - die Schleife wird wiederholt. Erst wenn die Bedingung hinter Loop falsch wird, tritt das Programm aus der Schleife aus.
Kurz zusammengefaßt: Die Befehle innerhalb der Schleife werden in jedem Fall einmal und solange wie die Bedingung wahr ist, ausgeführt.
Do
...Befehlsblock
Loop Until Bedingung = True
Das Programm tritt sofort in die Schleife ein. Trifft es auf Loop, überprüft es, ob die Bedingung wahr ist. Ist sie es nicht, geht es mit der Programmausführung bei Do weiter - die Schleife wird wiederholt. Erst, wenn die Bedingung hinter Loop wahr wird, tritt das Programm aus der Schleife aus.
Kurz zusammengefaßt: Die Befehle innerhalb der Schleife werden in jedem Fall einmal und solange bis die Bedingung wahr wird, ausgeführt.
Wichtigster Unterschied zwischen den ersten beiden und den letzten beiden Konstruktionen: Bei den ersten beiden Konstruktionen wird die Schleife nicht unbedingt, also nur in Abhängigkeit von der Bedingung ausgeführt. Bei den letzten beiden Konstruktionen werden die zwischen Do und Loop stehenden Befehle wenigstens ein einziges Mal ausgeführt.
Mit Hilfe der Anweisung Exit Do kann die Schleife unbedingt verlassen werden. Dieser Befehl befindet sich innerhalb eines Befehlsblocks, der durch Do und Loop umschlossen ist. In der Regel konstruieren Sie hier mit Hilfe der If...Then-Struktur eine Abbruchbedingung im Sinne von:
Do...
Befehle
If Bedingung = True Then Exit Do
Befehle
Loop...
Beispiel:
Sub ExampleDoLoop
Dim sDatei As String
Dim sPath As String
sPath = "c:\"
sDatei = Dir$( sPath ,22)
If sDatei <> "" Then
Do
Msgbox sDatei
sDatei = Dir$
Loop Until sDatei = ""
End If
End sub
[/code]
Vielleicht hilft ja der Hilfe-Text. Wenn nicht, is auch nicht schlimm.
Gruß
balu