2016-10-21 2 views
2

Ich habe ein Excel-Benutzerformular, das ungefähr 15 Felder (Textfelder und Dropdown-Listen) enthält und die Daten in ein Blatt kopiert, wenn eine Schaltfläche gedrückt wird. es hat ca. 15 min Laufzeit und nach durch die nur Linien treten, die eine beachtliche Menge Zeit in Anspruch nahmen warenGibt es eine schnellere Alternative zu target.value = me.textbox.value?

With ws 
    .Unprotect Password:="password" 
    .Cells(iRow, 1).Value = Me.Textbox1.Value 
    .Cells(iRow, 1).Value = Me.time.Value 
    .Cells(iRow, 2).Value = Me.card.Value 
    .Cells(iRow, 1).Value = Me.nature.Value 
    .Cells(iRow, 2).Value = Me.ma.Value 
    .Cells(iRow, 1).Value = Me.mem1.Value 
    .Cells(iRow, 2).Value = Me.mem2.Value 
    .Cells(iRow, 3).Value = Me.mem3.Value 
    .Cells(iRow, 4).Value = Me.mem4.Value 
    .Cells(iRow, 5).Value = Me.mem5.Value 
    .Cells(iRow, 6).Value = Me.mem6.Value 
    .Cells(iRow, 7).Value = Me.mem7.Value 
    .Cells(iRow, 8).Value = Me.mem8.Value 
    .Cells(iRow, 9).Value = Me.mem9.Value 
    .Cells(iRow, 10).Value = Me.mem10.Value 
    .Protect Password:="password" 
End With 

jeder der Kopierlinien etwa 1 Minute dauerte zu laufen. Ich habe gelesen, dass die Verwendung von Value2 schneller ist, aber keinen spürbaren Unterschied macht.

Während dieser Zeit wird kein anderer Code ausgeführt und ich deaktiviere automatische Updates für die Funktionen in Zellen.

+2

' Ich habe automatische Updates für die Funktionen in Zellen deaktiviert. - Meinst du, du hast den Berechnungsmodus auf manuell gestellt? – GSerg

+3

Sie scheinen zunächst Zellen zu überschreiben. – Comintern

+0

Haben Sie Arbeitsblatt/Arbeitsmappe Ereignisprozeduren aktiv? – h2so4

Antwort

2

Jedes Mal, wenn Sie können einen einzelnen Schreibvorgang in das Arbeitsblatt anstelle mehrere machen schreibt man mehr Leistung sehen soll, so ein Array statt gehen Zelle-für-Zelle unter Verwendung wahrscheinlich Dinge verbessern:

With ws 
    .Unprotect Password:="password" 

    .Cells(iRow, 1).Resize(1,10).Value = _ 
     Array(Me.mem1.Value, Me.mem2.Value, _ 
      Me.mem3.Value, Me.mem4.Value, _ 
      Me.mem5.Value, Me.mem6.Value, _ 
      Me.mem7.Value, Me.mem8.Value, _ 
      Me.mem9.Value, Me.mem10.Value) 

    .Protect Password:="password" 
End With 
Verwandte Themen