Registriert seit: 25.08.2015
Version(en): 2010
Guten Tag liebe Community,
ich habe eine Excel Datei und lerne gerade VBA kennen mit dem ich eine Maske(Userform) erstellt habe.
Beim Klicken von dem Button OK soll er die eingebenen Werte aus der Maske in die Zellen der Excel Datei einfügen, dass dauert aber extrem lange ca.13 sek.
Kann man das irgendwie beschleunigen und wann ja wie?
Hier mal ein Bsp. Code:
Code:
Private Sub cmdOK_Click()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'Beim Klicken von Ok werden die Daten in den Zellen eingefügt
Worksheets("Treibfähigkeit").Range("C7").Value = Me.txtSeil.Value
Worksheets("Treibfähigkeit").Range("C5").Value = Me.cmbTreib.Value
Worksheets("Treibfähigkeit").Range("K71").Value = Me.cmbTriebwerksort.Value
Worksheets("Treibfähigkeit").Range("C22").Value = Me.txtTreibdm.Value
Worksheets("Treibfähigkeit").Range("C23").Value = Me.txtKranzbreite.Value
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Schöne Grüße Joe
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
Moin Joe,
ich kann mir nicht vorstellen, dass dein hier gezeigter Code die Ursache ist. Probiere mal folgendes:
Code:
Private Sub cmdOK_Click()
Dim Start As Double
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Start = Timer
'Beim Klicken von Ok werden die Daten in den Zellen eingefügt
Worksheets("Treibfähigkeit").Range("C7").Value = Me.txtSeil.Value
Worksheets("Treibfähigkeit").Range("C5").Value = Me.cmbTreib.Value
Worksheets("Treibfähigkeit").Range("K71").Value = Me.cmbTriebwerksort.Value
Worksheets("Treibfähigkeit").Range("C22").Value = Me.txtTreibdm.Value
Worksheets("Treibfähigkeit").Range("C23").Value = Me.txtKranzbreite.Value
MsgBox Timer - Start & " Sekunden"
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Welchen Wert gibt die MsgBox aus?
Ich habe deinen Code erst einmal bewusst so gelassen; später wirst du gewiss ein With - Konstrukt verwenden, was etwas weniger Schreibarbeit bedeutet ...
Beste Grüße
Günther
Excel-ist-sexy.de …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Registriert seit: 25.08.2015
Version(en): 2010
Hallo Günther,
ich hab es ausprobiert kam 6,4 sek raus. Ich hab noch einige If Bedingungen gehabt die hab ich zum Test rausgeschmissen dann kam 4,6 sek raus.
Kann es eventuel darin liegen das meine Excel Datei umfangreich ist und das die Datei nach dem einsetzen der Werte die komplette Datei neu rechnet,
wenn ja kann man die neu Berechnung nicht einfach auf zwei Tabellenblätter beschränken?
Gruß Joe
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
Moin Joe,
immer noch entschieden zu lang ...
allerdings kann ich mit kastriertem Code nicht viel anfangen, weil die Ursache irgendwo anders liegen muss. Stelle hier einmal die komplette Mappe (gerne mit anonymisierten Daten) ein, dann sehen wir weiter.
Beste Grüße
Günther
Excel-ist-sexy.de …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Registriert seit: 25.08.2015
Version(en): 2010
Hi,
die Datei darf ich nicht veröffentlichen, von daher muss ich wohl auf eigene Faust herausfinden wo das Problem der Datei liegt.
Trotzdem vielen Dank
Gruß Joe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Joe,
Du kannst die Berechnung auch komplett ausschalten und erst nach allen Deinen Eintragungen berechnen.
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
Application.Calculate
Wenn Du Blätter im Modus manuell einzeln berechnen willst, dann z.B. mit
ActiveSheet.Calculate
Worksheets("Tabelle1").Calculate
Wenn Du Bereiche im Modus manuell einzeln berechnen willst, dann z.B. mit
Selection.Calculate
Worksheets("Tabelle1").Range("A1:B2").Calculate
Wenn Du die Berechnung für ein Blatt während einer Sitzung bzw. bis zum Zurückschalten in dieser Sitzung ausschalten willst, dann mit
Worksheets("Tabelle1").EnableCalculation=False
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
Aber genau das (die globale Abschaltung des Calculate) hat Joe doch gemacht (siehe 1. Beitrag) und diese wirklich mickrigen Zeilen brauchen über 4 Sekunden! Da muss im Hintergrund noch etwas anderes laufen, was wir nicht sehen. Schließlich fehlt ja auch jegliche Fehlerbehandlung und natürlich auch das Calculate nach dem xlCalculationAutomatic ...
Beste Grüße
Günther
Excel-ist-sexy.de …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Registriert seit: 11.04.2014
Version(en): Office 2007
Auch Hallo,
hast Du vielleicht ein Change-Ereignis im Tabellenblatt Treibfähigkeit?
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
03.10.2015, 10:35
(Dieser Beitrag wurde zuletzt bearbeitet: 03.10.2015, 10:36 von RPP63.)
Moin!
Dann beteilige ich mich auch mal an der Kaffesatzleserei. :19:
Zusätzlich zu den Ereignismakros:
- Hast Du viele Matrixformeln in der Mappe? Kann man da den Auswertebereich eingrenzen?
- Gibt es bedingte Formatierungen? Anzahl und evtl. zugrundegelegte Formeln?
- sind volatile Formeln in der Tabelle (siehe: http://www.online-excel.de/excel/singsel.php?f=171 und folgend)
Stelle mal Deine Arbeitsumgebung mit allen normalerweise geöffneten Mappen her und lasse dieses Makro laufen:
Code:
Sub Rechendauer()
Dim Start As Double
Start = Timer
Calculate
MsgBox Timer - Start
End Sub
Ergebnis?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Joe,
Du hast geschrieben, dass Du Dich noch mit einige If's herumgeschlagen hast.
Die Zeitermittlung von Günther umschließt unmittelbar den Bereich der Zelleinträge.
Wenn Du statt 6,4 noch 4,6 Sekunden hat, dann könnte ich mir vorstellen, dass zwischen der Startzeit und der Berechnung immer noch mehr code als nur für 5 Zelleinträge steht.
Du kannst die Zeitberechnung auch beliebig oft und an mehreren Stellen ausführen und z.B. im Direktfenster ausgeben:
Debug.Print Timer - Start & " Sekunden"
Dann siehst Du eventuell Bereiche, die etwas länger dauern und kannst dort gezielt weiter suchen.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)