Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
732to736
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
732to736
732to736
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Unterbrechung eines Makros

Unterbrechung eines Makros
georg
Hallo weite Excel Welt,
ich zücke die weiße Fahne. Wisst Ihr dazu was?
Mittels eines Makros füge ich im ersten Schritt eine Matrixfunktion hinter eine Datentabelle. Nach den Ergebnissen dieser Matrixfunktion soll das Makro weiter auswerten. Jetzt dauert arbeitet das Markro (2. Schritt) aber schon weiter (Filtern der Top10), wenn die eingefügte Funktion noch berechnet wird und daher wirft das Makro falsche Ergebnisse aus.
Die Frage: wie kann ich ein Makro so lange unterbrechen, bis die Berechnung der Matrix beendet ist?
Geht das überhaupt? (bestimmt, aber ich bin dazu zu blöd, oder so...)
Gruß
Georg

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

Betreff
Benutzer
Anzeige
AW: Unterbrechung eines Makros
16.02.2006 17:48:17
ChrisL
Hallo Georg
Die Krückenlösung wäre vermutlich ein fixes "Wait" z.B. 10 Sekunden einzubauen. Besser vermutlich die Aufgabe gleich in VBA zu lösen. Vielleicht wäre es dir möglich die Matrixformel kurz zu erklären und ein Beispiel hochzuladen.
Gruss
Chris
AW: Unterbrechung eines Makros
17.02.2006 09:35:17
georg
Hallo Chris,
danke für das Angebot. Ich habe hier ein kurzes Beispiel drin, das ich bereits auf eine SummeWenn geändert habe, da das schneller rechnet und ich die Matrix garnicht brauche.
https://www.herber.de/bbs/user/31129.xls
Logik der Datei: Tabelle 1 ist die Quelle (im Orginal ca. 6.000 Zeilen), wobei in Spalte U die gleiche Nummer mehrmals auftauchen kann (s. gelbe Markierung). Darum verdichte ich per Makro über den Spezialfilter "keine Duplikate" auf Tabelle 2 und ziehe die Werte aus Tabelle1 Spalte O per "SummeWenn" nach. Soweit so gut. Bei 6.000 Datensätzen braucht Excel einen Moment zur Berechnung. Das Makro geht gleich weiter und selektiert die Top10 aus Tabelle2. Eine MsgBox "Bitte warten" hilft hier leider auch nicht weiter, da Excel dann nicht rechnet.
Ich habe auch das Makro mal angehängt. Vielleicht fällt Dir ja was dazu ein.
Vielen Dank auf alle Fälle schon mal vorab!

Sub Makro5()
'       soll Top 30 Proj selektieren:
'       1.Opp.Nr in neues Blatt kopieren, 2.dort auf einzelne Nrn filtern,
'       3.SummeWenn auf Vol.Unwghtd, 4.selektion der Top 30 in weiteres Blatt
Sheets.Add
Sheets("Tabelle1").Select
Columns("U:U").Select
Selection.Copy
Sheets("Tabelle2").Select
Range("A1").Select
ActiveSheet.Paste
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Range("A2:A6000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"C2"), Unique:=True
Range("D3").Select
Selection.FormulaArray = _
"=+SUM(IF(RC[-1]=Tabelle1!R3C21:R6000C21,Tabelle1!R3C15:R6000C15))"
Selection.NumberFormat = "#,##0"
Selection.AutoFill Destination:=Range("D3:D6000")
Range("C2:D2").Select
' hier muß Makro unterbrechen, da Berechnung der Formel noch nicht fertig ist
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="30", Operator:=xlTop10Items
Range("C2:D6000").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Tabelle2").Select
Sheets.Add
ActiveSheet.Paste
End Sub

Gruß
Georg
Anzeige
AW: Unterbrechung eines Makros
17.02.2006 11:12:13
georg
Hallo Chris,
danke - manchmal sieht man den Wald vor lauter Bäumen nicht!
Aber gleich eine Anschlußfrage: Dein String aktualisiert genau eine Pivottabelle. Gibt es auch die Möglichkeit gleichzeitig alle Pivots der Mappe zu aktualisieren, egal wo sie stehen und wie sie heißen?
Gruß
Georg
Anzeige
AW: Unterbrechung eines Makros
17.02.2006 11:29:57
ChrisL
Hallo Georg

Sub t()
Dim i As Integer
Dim WS As Worksheet
For Each WS In Worksheets
If WS.PivotTables.Count > 0 Then
For i = 1 To WS.PivotTables.Count
WS.PivotTables(i).RefreshTable
Next i
End If
Next WS
End Sub

Viel Spass und Gruss
Chris
Suprageil
17.02.2006 11:44:51
georg
Muchas gracias senor - oder so ähnlich. Zumindest: VIELEN DANK
Gruß
Georg
AW: Unterbrechung eines Makros
16.02.2006 18:01:48
MichaV
Hallo,
manchmal hilft es auch, an der entsprechenden Stelle des Makros ein

DoEvents

zu schreiben.
Gruß- Micha
PS: Rückmeldung wäre nett.
AW: Unterbrechung eines Makros
17.02.2006 09:10:17
georg
Hallo Micha,
danke für den Hinweis, aber was mach ich denn genau damit? Muß ich nicht irgendwie sagen, daß das Makro stoppen soll, bis fertig berechnet ist? Das steckt doch noch nicht in dem Befehl "DoEvents",oder?
Gruß Georg
Anzeige
AW: Unterbrechung eines Makros
17.02.2006 21:19:22
MichaV
Hallo,
Du hast ja eine Lösung, hier die Antwort auf Deine Fragen zu DoEvents:
Du baust das so ein:

Sub Bla()
MakroMakroMakro
DoEvents
MakroMakroMakro
End Sub

Es ist also eine zusätzliche Zeile im Makro an der Stelle, wo das Makro darauf warten soll, daß das Betriebssystem alle wartenden Vorgänge abgearbeitet hat. Zu diesen wartenden Vorgängen könnte auch das Excel- Rechnen gehören. In der Hilfe steht aber auch, daß bei längeren Vorgängen besser ein Zeitgeber verwendet werden sollte, das wäre die zuerst vorgeschlagene 10s- Wait- Variante. Ist aber wirklich eine Krücke und nun ja nicht mehr relevant.
Ein kleiner Blick in die Hilfedatei verrät:
DoEvents übergibt die Ablaufsteuerung an das Betriebssystem. Das Programm erhält erst dann die Steuerung wieder zurück, wenn das Betriebssystem alle wartenden Ereignisse verarbeitet hat und alle wartenden Tastenanschläge in der SendKeys-Warteschlange abgearbeitet sind.
DoEvents ist für einfache Operationen besonders hilfreich, wenn z.B. einem Benutzer die Möglichkeit gegeben werden soll, einen Prozeß abzubrechen, nachdem er begonnen wurde, beispielweise die Suche nach einer Datei. Bei länger andauernden Vorgängen sollte die Steuerung besser mit Hilfe eines Zeitgebers an den Prozessor abgegeben werden, oder die Aufgabe sollte einer ActiveX-EXE-Komponente übertragen werden. Im zweiten Fall kann die Aufgabe vollkommen unabhängig von Ihrer Anwendung durchgeführt werden, und das Betriebssystem übernimmt das Multitasking und die Zuteilung der Prozessorzeit.
Gruß- Micha
Anzeige
Klick gemacht
20.02.2006 09:33:41
georg
Hallo Micha,
vielen Dank, daß du trotz der anderen Lösung geantwortet hast. So habe ich auch diese Variante jetzt begriffen.
Gruß
Georg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige