Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Inhalte in Excelzellen einfügen
#1
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
Antworten Top
#2
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!
Antworten Top
#3
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
Antworten Top
#4
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!
Antworten Top
#5
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
Antworten Top
#6
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)
Antworten Top
#7
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!
Antworten Top
#8
Auch Hallo,

hast Du vielleicht ein Change-Ereignis im Tabellenblatt Treibfähigkeit?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#9
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)
Antworten Top
#10
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)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste