Clever-Excel-Forum

Normale Version: VBA Inhalte in Excelzellen einfügen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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 Angel
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 ...
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
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.
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
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
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 ...
Auch Hallo,

hast Du vielleicht ein Change-Ereignis im Tabellenblatt Treibfähigkeit?
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
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.
Seiten: 1 2