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

Fortschrittsanzeige

Fortschrittsanzeige
13.11.2003 14:56:06
Russi
Hallo Leute!

Ich füge per VBA hunterte von Formeln in ein Tabellenblatt ein mit dem Erfolg, dass Excel nach beendetem Makro erstmal ca. 80 Sek. im Hintergrund mit Rechnen beschäftigt ist.

Da ich die Datei selbst erstellt habe weiß ich natürlich, was Excel da tut. Aber andere Anwender werden sicherlich etwas irritiert sein, wenn Excel sich so lange "tot stellt".

Gibt es eine Möglichkeit, während der Neuberechnung der Tabellenblätter eine Msgbox oder sogar eine Fortschrittsanzeige anzeigen zu lassen?!?

Russi

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fortschrittsanzeige
13.11.2003 15:39:35
Martin
Hallo Russi,

eine Fortschrittsanzeige ist komplex. Ausserdem hat sie den Nachteil, dass du vorher wissen musst, wie lange der Prozess dauert, da du sie anpassen musst. Eine Alternative wäre eine Userform. Am besten ein Label, das vor dem Berechnen geladen und am Ende wieder geschlossen wird. Der Vorteil von Userformen ist, dass Prozesse im Hintergrund weiterlaufen im Gegensatz zu Messageboxen.

Gruss,
Martin
AW: Fortschrittsanzeige
13.11.2003 15:43:33
Russi
Hallo Martin!

Danke für den Tip! Ich will nicht unverschämt sein, aber könntest Du mir kurz skizzieren, wie ich so ein Label einbinde? Ich habe sowas noch nie gemacht...

Gibt es sowas wie ein "WhileCalculating"-Ereignis, das ich abfragen kann?

Russi
Anzeige
AW: Fortschrittsanzeige
14.11.2003 08:04:35
Carsten
Hallo Martin,

schau aml auf die Seite von John Walkenbach. Da ist ein gutes Beispiel!

http://www.j-walk.com/

Gruß,

Carsten
AW: Fortschrittsanzeige
14.11.2003 08:46:20
Russi
Werde ich tun! Vielen Dank für den Tip!

Russi
AW: Fortschrittsanzeige
14.11.2003 11:39:53
Russi
Hallo Carsten!

So hatte ich Gelegenheit, mir die ganze Seiten einmal anzugucken. Kannte ich noch nicht, die Adresse. Sind ja interessante Dinge dabei!

Russi
Anzeige
Frage nochmal...
14.11.2003 15:29:20
Russi
Hallo Carsten!

Ich habe das Beispiel einmal nachvollzogen, funktioniert alles erstklassig.

In meinem Projekt hätte ich aber gerne eine Fortschrittsanzeige (oder zumindest eine Meldung "Berechnung läuft" oder sowas) für ein Makro, welches aus nur ein paar Zeilen OHNE Schleife besteht.

Die erste Zeile des Tabellenblattes wird mit Formeln gefüllt und dann wird die Seite per Selection.Filldown nach unten ausgefüllt.

Die anschließende Berechnung der Zellen dauert ewig. Deshalb sollte hier eine Meldung angezeigt werden.

Hast Du dazu vielleicht noch eine Idee?!?

Russi
Anzeige
AW: Frage nochmal...
14.11.2003 20:12:33
Carsten
Hallo Russi,

wär das nichts für die Statusbar. Dort könnte man so einen Hinweis gut unterbringen.

Schau mal in der Recherche und Excel-FAQ. Wenn Du nicht wieterkommst, stell mal eine Beispielmappe online. Es wird sich schon was finden!

Gruß,

Carsten
AW: Frage nochmal...
17.11.2003 07:55:58
Russi
Moin Carsten!

Hab mal recherchiert. Aber alle Lösungen zielen darauf ab, während eines MAKROLAUFES einen Hinweis anzuzeigen. Mein Hinweis soll vor oder nach Makrostart erfolgen (soweit selbstverständlich kein Problem) und andauern, bis Excel alle Berechnungen abgeschlossen hat (das Makro wird schon lange vorher beendet).

Mein Code sieht so aus:

With Tabelle1 ' Erste Zeile mit Formeln füllen
.Activate
.Range("N2").Formula = "=R2+V2"
.Range("O2").Formula = "=S2+W2"
.Range("P2").Formula = "=IF(RC[-1]>0,RC[-1]/RC[-2],""0%"")"
.Range("Q2").Formula = "=SUMPRODUCT((Tabelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""KV""))"
.Range("R2").Formula = "=SUMPRODUCT((Tbelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""KV"")*(Tabelle2!R2C17:R2000C17>0))"
.Range("S2").Formula = "=SUMIF(Tabelle2!R2C3:R2000C3,RC4,Tabelle2!R2C19:R2000C19)"
.Range("T2").Formula = "=SUMIF(Tabelle2!R2C3:R2000C3,RC4,Tabelle2!R2C18:R2000C18)"
.Range("U2").Formula = "=SUMPRODUCT((Tabelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""LV""))"
.Range("V2").Formula = "=SUMPRODUCT((Tabelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""LV"")*(Tabelle2!R2C17:R2000C17>0))"
.Range("W2").Formula = "=SUMIF(Tabelle2!R2C3:R2000C3,RC4,Tabelle2!R2C21:R2000C21)"
.Range("X2").Formula = "=SUMIF(Verteilung!R2C3:R2000C3,RC4,Tabelle2!R2C20:R2000C20)"
End With

Tabelle1.Range("N2:X2000").Select
Selection.FillDown

Nach dem letzten Befehl ist Excel natürlich erstmal beschäftigt.

Und damit ein DAU (bekannt, oder? "Dümmster Anzunehmender User") nicht wild auf Escape rumhackt, weil er denkt, da passiert eh nix mehr, möchte ich während der Zeit der Berechnung eine Meldung ausgeben. Das Makro selbst ist ja zu diesem Zeitpunkt schon lange beendet.

Außerdem ist es wichtig, dass der Anwender während der Berechnung nicht weiterarbeiten kann, da alle weiteren Makros auf die Ergebnisse der o.a. Formeln angewiesen sind.

Aber dafür habe ich noch keine Lösung gefunden. Früher gab es meiner Meinung nach mal eine Option "Berechnen im Hintergrund", die man deaktivieren konnte. Sowas würde mir ja schon helfen...

Russi
Anzeige
AW: Frage nochmal...
17.11.2003 14:24:06
Carsten
Hallo Russi,

sorry das ich mich erst jetzt melde!

Probier doch mal bitte folgenden Code (habe ihn nicht getestet), vielleicht lüft das Makro dann schneller. Berechnung und Bildschirmaktualisierung werden ausgeschaltet.

Dim Berechnung
Berechnung = Application.Calculation
Application.Calculation = xlManual
Application.ScreenUpdating = False

With Tabelle1 ' Erste Zeile mit Formeln füllen

.Activate
.Range("N2").Formula = "=R2+V2"
.Range("O2").Formula = "=S2+W2"
.Range("P2").Formula = "=IF(RC[-1]>0,RC[-1]/RC[-2],""0%"")"
.Range("Q2").Formula = "=SUMPRODUCT((Tabelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""KV""))"
.Range("R2").Formula = "=SUMPRODUCT((Tbelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""KV"")*(Tabelle2!R2C17:R2000C17>0))"
.Range("S2").Formula = "=SUMIF(Tabelle2!R2C3:R2000C3,RC4,Tabelle2!R2C19:R2000C19)"
.Range("T2").Formula = "=SUMIF(Tabelle2!R2C3:R2000C3,RC4,Tabelle2!R2C18:R2000C18)"
.Range("U2").Formula = "=SUMPRODUCT((Tabelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""LV""))"
.Range("V2").Formula = "=SUMPRODUCT((Tabelle2!R2C3:R2000C3=RC4)*(LEFT(Tabelle2!R2C9:R2000C9,2)=""LV"")*(Tabelle2!R2C17:R2000C17>0))"
.Range("W2").Formula = "=SUMIF(Tabelle2!R2C3:R2000C3,RC4,Tabelle2!R2C21:R2000C21)"
.Range("X2").Formula = "=SUMIF(Verteilung!R2C3:R2000C3,RC4,Tabelle2!R2C20:R2000C20)"
End With

Tabelle1.Range("N2:X2000").FillDown

Application.Calculation = Berechnung
Application.ScreenUpdating = True

Gruß,

Carsten
Anzeige
Frage erledigt...
17.11.2003 14:31:40
Russi
Hallo Carsten!

Sorry, aber das isses auch nicht. Die Excel-Berechnung auf manuell zu stellen bringt mir nichts, da ich mit der Ergebnissen der Berechnungen arbeiten muss.

Reinhard hatte eine Idee mit einer Schleife statt einfachem Filldown. Da bastel ich zur Zeit an einer ProgressBar rum (und mache sogar mal wieder Fortschritte! ;-) )

Danke für Deine Mühe!!!

Russi
AW: Frage nochmal...
17.11.2003 09:58:17
Reinhard
Hi Russi,
ich hatte mir das Beispiel nicht angesehen, aber nehme an, es wertet die Anzahl von Schleifendurchgängen aus um daraus eine Fortschrittsanzeige zu erstellen.
Bei deinem Makro dauern ja scheinbar nur die Zeilen
Tabelle1.Range("N2:X2000").Select
Selection.filldown
lange. Bau das doch zu ner Schleife um.


For x= 78 to 87 '78=N,87=W
Tabelle1.Range(chr(x) & "2:" & chr(x+1) & "2000").Select
Selection.filldown
next x


Gruß
Reinhard
ps:ungetestet da kaum zeit heute morgen, deshalb teste mal ob
Tabelle1.Range(chr(x) & "2:" & chr(x+1) & "2000").filldown
auch funktioniert.
Anzeige
AW: Frage nochmal...
17.11.2003 10:03:44
Russi
Hallo Reinhard!

Eigentlich wollte ich eine Schleife vermeiden, da Schleifen dieser Größenordnung das Makro insgesamt erheblich ausbremsen. Aber es scheint die einzige Lösung zu sein...

Vielen Dank für den Tip!!! Ich werds wohl so machen.

Viele Grüße

Russi
AW: Frage nochmal...
17.11.2003 10:04:21
Russi
Hallo Reinhard!

Eigentlich wollte ich eine Schleife vermeiden, da Schleifen dieser Größenordnung das Makro insgesamt erheblich ausbremsen. Aber es scheint die einzige Lösung zu sein...

Vielen Dank für den Tip!!! Ich werds wohl so machen.

Viele Grüße

Russi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige