Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1656to1660
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

Makro läuft nur im Einzelschritt korrekt durch

Makro läuft nur im Einzelschritt korrekt durch
12.11.2018 15:47:31
Andreas
Hallo zusammen,
folgendes Problem:
Ich habe ein Makro geschrieben, welches einen Barcode anhand bestimmter Formularfelder erzeugt mit dem Plugin ActiveBarcode. Das sind nichts anderes als OLEObjects die man auch entsprechend ansprechen kann.
Nun habe ich eine Schleife erzeugt, die unter anderem den Inhalt des Barcodes verändert.
Abschließend wird das ganze als einzelne PDFs exportiert. (Später mal gedruckt)
Gehe ich per F8 im Einzelschritt durch ist alles in Ordnung, die Schleife zählt hoch und das Objekt aktualisiert richtig.
Lasse ich das Makro so laufen aktualisiert sich der Barcode nicht. Ich habe schon ein Application.Wait von 10 Sekunden eingefügt - bringt auch nichts.
Hat jemand eine Idee?
Anbei noch der Ausschnitt des Codes:

x = InputBox("Wie viele Kopien sollen gedruckt werden?")
ANester = Sheets("Lieferschein").Range("C8") 'Anzahl Nester speichern
Sheets("Lieferschein").Range("C8") = 1 'Beim ersten Nest beginnen
For i = 1 To ANester
'Anpassen eindeutige ID
Sheets("Lieferschein").Range("C15") = Sheets("Lieferschein").Range("C14") & "_" & Sheets("   _
_
_
Lieferschein").Range("C13") & "_" & Sheets("Lieferschein").Range("C8")
Sheets("CSV").Range("A" & i + 1) = Sheets("Lieferschein").Range("C2")
Sheets("CSV").Range("B" & i + 1) = Sheets("Lieferschein").Range("C3")
Sheets("CSV").Range("C" & i + 1) = Sheets("Lieferschein").Range("C4")
Sheets("CSV").Range("D" & i + 1) = Sheets("Lieferschein").Range("C8")
Sheets("CSV").Range("E" & i + 1) = Sheets("Lieferschein").Range("C9") & "_" & Sheets(" _
Lieferschein").Range("C10")
Sheets("CSV").Range("F" & i + 1) = Sheets("Lieferschein").Range("C11") & "_" & Sheets(" _
Lieferschein").Range("C12")
Sheets("CSV").Range("G" & i + 1) = Sheets("Lieferschein").Range("C13")
Sheets("CSV").Range("H" & i + 1) = Sheets("Lieferschein").Range("C14")
Sheets("CSV").Range("I" & i + 1) = Sheets("Lieferschein").Range("C15")
'Update DMC
Sheets("Lieferschein").OLEObjects("DMC1").Object.Text = Sheets("Lieferschein").Range("C15")
Application.Wait (Now + TimeValue("00:00:10"))
' +++ Aktivieren um später zu drucken +++
'ActiveWorkbook.Worksheets("Lieferschein").PrintOut Copies:=x
' +++ PDF Export fürs Testen +++
Sheets("Lieferschein").ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:CSV" & Worksheets(" _
Lieferschein").Range("C15") & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True,   _
_
IgnorePrintAreas:=False, OpenAfterPublish:=False
'Nest erhöhen
If Sheets("Lieferschein").Range("C8") 

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
XP MSOF
12.11.2018 16:02:38
lupo1
AW: Makro läuft nur im Einzelschritt korrekt durch
12.11.2018 16:07:25
Daniel
Hi
der Wait-Befehl ist meistens nutzlos, weil er dein komplettes Excel quasi in Tiefschlaf versetzt, dh nach dem Wait-Befehl macht Excel genau an der Stelle weiter, an der es mit dem Wait-Befehl angehalten hat.
das Problem ist, dass Excel mache Aktualisierungen erst dann durchführt, wenn alle Makros vollständig durchgelaufen sind und der Anwender wieder die Kontrolle bekommt.
Das Neuzeichnen von Grafikelementen ist meinen Erfahrungen nach hiervon betroffen.
Die Lösung wäre hier also, dass man das Ändern der Werte in ein eigenes Makro schreibt und das Ausdrucken des Blattes in ein zweites Makro.
dann führt man erst das Ändern aus und danach das Drucken.
Damit der Anwender davon nichts merkt oder gar gezungen ist, einen zweiten Button zu klicken um das Druckmakro zu starten, ruft man das zweite Makro mit Applicaiton.Ontime auf.
ein mit Applicaiton.Ontime gestartetes Makro wird im Gegensatz zu einem mit Call gestarteten Makro nicht sofort gestartet, sondern erst dann wenn das aufrufende Makro vollständig durchgelaufen ist.
in dieser Lücke zwischen den beiden Makros hat dann Excel zeit, die notwendigen Aktualisierungen durchzuführen.
Gruß Daniel
Anzeige
AW: Makro läuft nur im Einzelschritt korrekt durch
12.11.2018 16:24:30
Daniel
oh da war ich wohl mit meiner Antwort zu schnell.
Hättest vielleicht ... :-)
12.11.2018 16:26:23
lupo1
Wait einbauen müssen - oder zwei Beiträge verfassen :-)
AW: Hättest vielleicht ... :-)
12.11.2018 16:29:59
Daniel
man könnte seine Antwort ja auch schön über alle Foren verteilen, so in jedem Forum ein satz.
Schließlich erwartet der Fragesteller ja auch in jedem Forum eine Antwort.
Gruß Daniel
AW: Makro läuft nur im Einzelschritt korrekt durch
13.11.2018 09:18:22
Andreas
Hi Daniel,
gibt es beim Aufruf per OnTime einen Trick den ich nicht kenne?
Application.OnTime Now + TimeValue("0:0:1"), "Druckenp"
Führt dazu, dass mir Excel erzählt das Makro "Druckenp" sei in der Arbeitsmappe nicht verfügbar oder Makros deaktiviert. Das Sub steht im selben Modul genau unter dem aufrufenden Sub?
Anzeige
Makronamen richtig schreiben, das dürfte
13.11.2018 09:43:23
Daniel
der entscheidende Trick sein.
Der Fehler kommt dann wenn du den Makronamen im Application.Ontime falsch geschrieben hast.
Sollte das aufgerufene Makro nicht in einem allgemeinen Modul stehen sondern beispielsweise in einem Tabellenblattmodul, so musst du den Modulnamen voranstellen, damit VBA weiß in welchem Modul es das Makro suchen muss:
Application.OnTime Now + TimeValue("0:0:1"), "Tabelle1.Druckenp"
Gruß Daniel
AW: Makronamen richtig schreiben, das dürfte
13.11.2018 11:15:24
Andreas
Hallo Daniel,
das Kopieren in ein Allgemeines Modul (und Ergänzen) lässt zumindest das Makro loslaufen. Allerdings startet er in der Schleife die Prozedur nicht mehrfach, sodass ich nur noch ein PDF erhalte.
Ich habe es inzwischen etwas unelegant so gelöst:
Do
DoEvents
Application.Calculate
z=z+1
Loop Until z=10
Grundsätzlich würde es mich aber schon interessieren wieso ich den Aufruf nicht mehrfach starten kann.
Hatte beim OnTime auch schon versucht vorher das Now in eine Variable zu packen, trotzdem ruft er die Prozedur kein zweites Mal auf.
Per Google habe ich viele gefunden, die das Makro zyklisch aufrufen wollten und damit aus sich heraus erneut angesprochen haben. Das hilft mir aber nicht weiter, ich muss ja zurückspringen und mit aktualisierten Informationen aus der Schleife neustarten.
Anzeige
AW: Makronamen richtig schreiben, das dürfte
13.11.2018 11:24:46
Daniel
naja die klassische For-Next-Schleife funktioniert dann nicht mehr
um eine Schleife zu erzeugen, musst du am Ende des Druckmakros das erste Makro wieder mit Application.Ontime aufrufen, so dass eine Schleife entsteht.
als Schleifenvariable nimmst du eine Globlale Variable, diese behalten ihren Wert nach Makroende bzw bei einem erneuten Start des Makros und stehen in allen Makros zur Verfügung
im Druckmakro machst du natürlich eine Abfrage auf diesen Schleifenzähler, um entscheiden zu können ob das erste Makro nochmal aufgerufen werden muss oder ob die Schleife beendet werden kann.
Aber wenn es mit 10 DoEvents und Calculate auch funktioniert, ist es natürlich auch gut.
Gruß Daniel
Anzeige
XP auch in OL/p
12.11.2018 16:08:00
lupo1

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige