Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Prüfe ob Berechnung fertig

Forumthread: Prüfe ob Berechnung fertig

Prüfe ob Berechnung fertig
21.12.2016 08:44:59
Rainer
Hallo Excelfreunde,
ich hatte schon ähnliches gefragt: https://www.herber.de/cgi-bin/callthread.pl?index=1530080#1530080
aber habe mich nun umentschieden. Da es offensichtlich nicht möglich ist "Datentabellen" zum seperaten Berechnen zu erstellen, habe ich die Berechnungen in ein seperates Worksheet umgelagert, welches ich mit einem Button und dem Code:
Worksheets("Tabelle2").EnableCalculation = True
Worksheets("Tabelle2").EnableCalculation = False
MsgBox "Calculation ok!"

neu berechnen lasse. ABER!
Die Berechnung dauert ein paar Sekunden, aber auf langsameren Computern auch etwas länger. Wenn der Nutzer während der Berechung irgendetwas klickt, dann unterbricht die Berechnung.
Wie kann man das verhindern? Application.OnTime erscheint mir nicht sinnvoll, da die Berechnungszeit ja abhängig vom Computer und seiner Systemauslastung ist.
Vielen Dank und viele Grüße,
Rainer
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfe ob Berechnung fertig
21.12.2016 09:30:01
Werner
Hallo Rainer,
was hältst du davon, während der Berechnung eine UserForm mit einem Label darauf anzeigen zu lassen? Im Label kannst du ja einen Hinweistext anzeigen lassen "Bitte warten, Berechnung läuft." Die Standardeinstellung der UserForm ist Show Modal = True. Das bedeutet, solange die Userform angezeigt wird kann in der Tabelle nicht bearbeitet werden. Wenn die Berechnung die h ist dann die Userform wieder schließen.
Ergänze deinen Code:
UserForm1.Show
Worksheets("Tabelle2").EnableCalculation = True
Worksheets("Tabelle2").EnableCalculation = False
Unload UserForm1
MsgBox "Calculation ok!"

Dann noch ins Codemodul der UserForm:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = 1
End If
End Sub

Verhindert das Schließen der UserForm über das X
Gruß Werner
Anzeige
AW: Prüfe ob Berechnung fertig
21.12.2016 09:54:52
Rainer
Hallo Werner,
ich probiere es mal aus.
Aber ich habe es mir so gedacht:

Private Sub CommandButton1_Click() 'Starte Berechnung
Range("T107") = Int((999 * Rnd) + 1) 'Zufahlszahl in T107
update                               'update von "matrix"
End Sub
"matrix" hat viele Zeilen und Spalten, um die grässliche Bestie der Statistik zu füttern.
Am Ende (rechts unten) habe ich in Zelle JQ4011 die Formel "=coil!T107" eingefügt.

Public Sub update()
Worksheets("matrix").EnableCalculation = True
Worksheets("matrix").EnableCalculation = False
If ThisWorkbook.Sheets("matrix").Range("JQ4011") = ThisWorkbook.Sheets("coil").Range("T107")  _
Then
MsgBox "Calculation ok!"
End If
End Sub
Ich dachte mir, so sehe ich die MessageBox immer dann, wenn alle Zellen neu berechnet wurden.
Aber ich sehe sie nie?
Welchen dummen Fehler habe ich eingebaut?
Gruß,
Rainer
Anzeige
AW: Prüfe ob Berechnung fertig
21.12.2016 10:28:42
Werner
Hallo Rainer,
das musst du mit call aufrufen
Private Sub CommandButton1_Click() 'Starte Berechnung
Range("T107") = Int((999 * Rnd) + 1) 'Zufahlszahl in T107
Call update                               'update von "matrix"
End Su
Gruß Werner
AW: Prüfe ob Berechnung fertig
21.12.2016 10:52:13
Rainer
Hallo Werner,
ja so kommt die Messsage Box, aber Excel ist klüger als ich.
Obwohl die Zelle "am Ende" der Matrix steht, wird sie dennoch zuerst berechnet. Also die Zelle ist aktualisiert, aber der Rest der Berechnungnen nicht, wenn man während der Berechnung klickt und die Berechnung damit abbricht.
Kurios.
Gruß,
Rainer
Anzeige
AW: Prüfe ob Berechnung fertig mit Userform
21.12.2016 10:47:02
Rainer
Hallo Werner,
ich habe die UserForm eingefügt im VBA Editor mit deinem Quellcode.
Aber die Userform verschwindet nicht!
Auch zeigt mir Excel in der Statusleiste nicht an, dass eine Berechnung ausgeführt wird. Es findet auch tatsächlich keine statt. Es scheint, dass die Userform das Makro unterbricht.
Ich habe versucht das zu testen mit:

Public Sub update()
UserForm1.Show
Application.Wait (Now + TimeValue("0:00:10"))
Unload UserForm1
End Sub
Aber auch da verschwindet die UserForm nie! Wo liegt mein Fehler?
Gruß,
Rainer
Anzeige
AW: Prüfe ob Berechnung fertig mit Userform
21.12.2016 11:05:01
Werner
Hallo Rainer,
nicht dein Fehler sondern meiner. Wenn die UserForm im ShowModal = True aufgerufen wird, dann wird die Abarbeitung des Makros gestoppt, so lange die UserForm angezeigt wird.
Lass mal die Einstellung der UserForm auf ShowModal = True (kein Arbeiten in der Tabelle möglich) und benutze folgende Makros. Das macht jetzt bei deinem Beispielcode zwar nicht viel Sinn, weil das Makro zu schnell fertig ist, aber versuch es mal in deiner Arbeitsdatei.
In ein allgemeines Modul:
Sub Schaltfläche1_Klicken()
UserForm1.Show
End Sub
Public Sub update()
Worksheets("matrix").EnableCalculation = True
Worksheets("matrix").EnableCalculation = False
Unload UserForm1
If ThisWorkbook.Sheets("matrix").Range("JQ4011") = ThisWorkbook.Sheets("coil").Range("T107") _
Then
MsgBox "Calculation ok!"
End If
End Sub
Ins Modul der UserForm:
Private Sub UserForm_Activate()
Range("T107") = Int((999 * Rnd) + 1)
Call update
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = 1
End If
End Sub
Gruß Werner
Anzeige
AW: Prüfe ob Berechnung fertig mit Userform
22.12.2016 03:59:32
Rainer
Hallo Werner,
vielen Dank, so geht es.
Nut bleibt die UserForm bei mir leer. Konnte ich aber verbessern mit:
'Ins Modul der UserForm:
Private Sub UserForm_Activate()
DoEvents
Range("T107") = Int((999 * Rnd) + 1)
Call update
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = 1
End If
End Sub
Nochmal Danke und schöne Weihnachten!
Rainer
Anzeige
AW: Gerne u. Danke für die Rückmeldung.
22.12.2016 08:57:20
Werner
Hallo Rainer,
dir auch schöne Festtage.
Gruß Werner
;
Anzeige
Anzeige

Infobox / Tutorial

Berechnung in Excel VBA: Warten bis die Berechnung fertig ist


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass eine Berechnung in Excel VBA abgeschlossen ist, bevor der Benutzer weiterarbeiten kann, kannst du eine UserForm verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, um dies umzusetzen:

  1. UserForm erstellen:

    • Öffne den VBA-Editor (Alt + F11).
    • Füge eine neue UserForm hinzu (Einfügen > UserForm).
    • Füge ein Label hinzu, um den Benutzer darüber zu informieren, dass die Berechnung läuft (z.B. "Bitte warten, Berechnung läuft.").
  2. VBA-Code einfügen:

    • In das Modul der UserForm füge folgenden Code ein:

      Private Sub UserForm_Activate()
       DoEvents
       Range("T107") = Int((999 * Rnd) + 1) 'Zufallszahl generieren
       Call update
      End Sub
      
      Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       If CloseMode = 0 Then
           Cancel = 1
       End If
      End Sub
  3. Berechnungsmethode implementieren:

    • In einem allgemeinen Modul füge folgenden Code hinzu:
      Public Sub update()
       Worksheets("matrix").EnableCalculation = True
       Worksheets("matrix").EnableCalculation = False
       Unload UserForm1
       If ThisWorkbook.Sheets("matrix").Range("JQ4011") = ThisWorkbook.Sheets("coil").Range("T107") Then
           MsgBox "Calculation ok!"
       End If
      End Sub
  4. Berechnung starten:

    • Füge einen Button hinzu und verknüpfe ihn mit folgendem Code:
      Private Sub CommandButton1_Click()
       UserForm1.Show
      End Sub

Diese Schritte helfen dir, die Berechnung zu starten und zu warten, bis sie abgeschlossen ist, bevor der Benutzer weiterarbeiten kann.


Häufige Fehler und Lösungen

  1. UserForm bleibt leer:

    • Stelle sicher, dass DoEvents im UserForm_Activate-Ereignis verwendet wird, um die Anzeige der UserForm zu aktualisieren.
  2. Berechnung wird unterbrochen:

    • Vergewissere dich, dass die UserForm im Modus ShowModal = True angezeigt wird, damit der Benutzer die Arbeitsmappe nicht während der Berechnung manipulieren kann.
  3. MessageBox wird nicht angezeigt:

    • Überprüfe, ob du die update-Subroutine korrekt aufrufst und dass die Berechnung tatsächlich durchgeführt wird.

Alternative Methoden

Wenn du keine UserForm verwenden möchtest, kannst du auch Application.Wait einsetzen, um eine festgelegte Zeit zu warten. Dies ist jedoch weniger benutzerfreundlich und könnte die Benutzererfahrung beeinträchtigen. Hier ein Beispiel:

Public Sub update()
    Worksheets("matrix").EnableCalculation = True
    Worksheets("matrix").EnableCalculation = False
    Application.Wait (Now + TimeValue("0:00:10")) ' 10 Sekunden warten
    If ThisWorkbook.Sheets("matrix").Range("JQ4011") = ThisWorkbook.Sheets("coil").Range("T107") Then
        MsgBox "Calculation ok!"
    End If
End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Funktionsweise demonstriert:

Private Sub CommandButton1_Click() 'Starte Berechnung
    Range("T107") = Int((999 * Rnd) + 1) 'Zufallszahl in T107
    UserForm1.Show
End Sub

Public Sub update()
    Worksheets("matrix").EnableCalculation = True
    Worksheets("matrix").EnableCalculation = False
    Unload UserForm1
    If ThisWorkbook.Sheets("matrix").Range("JQ4011") = ThisWorkbook.Sheets("coil").Range("T107") Then
        MsgBox "Calculation ok!"
    End If
End Sub

Dieses Beispiel zeigt, wie du eine Zufallszahl generierst und die Berechnung durchführst, während der Benutzer über die UserForm informiert wird.


Tipps für Profis

  • Effiziente Berechnung: Verwende EnableCalculation korrekt, um die Berechnung gezielt zu steuern. Dies kann die Performance deiner Excel-Anwendungen verbessern.
  • Debugging: Nutze den Debugger im VBA-Editor, um sicherzustellen, dass deine Variablen und Berechnungen erwartungsgemäß funktionieren.
  • Fehlermeldungen: Implementiere Error-Handling in deinen Subroutinen, um unvorhergesehene Fehler elegant zu behandeln.

FAQ: Häufige Fragen

1. Wie kann ich verhindern, dass Benutzer während der Berechnung auf die Tabelle zugreifen? Durch das Anzeigen einer UserForm mit der Einstellung ShowModal = True wird der Zugriff auf die Tabelle während der Berechnung blockiert.

2. Was ist der Unterschied zwischen EnableCalculation und Application.Calculation? EnableCalculation wird verwendet, um die Berechnung für ein bestimmtes Arbeitsblatt zu aktivieren oder zu deaktivieren, während Application.Calculation die Berechnungsart für die gesamte Arbeitsmappe festlegt (z.B. manuell oder automatisch).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige