Clever-Excel-Forum

Normale Version: vba Sehr langsam
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo!

Habe einen code bei vba eingefügt.


Private Sub Ausgabe_Click()
  Dim iCnt%
  iCnt = 6
  Do While Cells(iCnt, 6) <> "" And iCnt <= 13
    With Cells(Rows.Count, 1).End(xlUp).Offset(1)
      .Value = Date
      .Offset(0, 1).Value = Time
      .Offset(0, 2).Value = Cells(4, 6).Value
      .Offset(0, 3).Value = Cells(5, 6).Value
      .Offset(0, 4).Value = Cells(iCnt, 6).Value
    End With
    iCnt = iCnt + 1
  Loop
End Sub



Er ist extreme langsam und füllt immer nur Zelle für Zelle aus. kann ich den code optimieren, um das zu beschleunigen?

gruß
Hallo,

es wäre einfacher zu helfen, wenn du mal deine Datei hochladen würdest.
Hallo,

gelöscht.
schalte die automatische Berechnung für die Dauer der Programmausführung auf manuell.
evtl. das Screenupdating auch. 
verlagere die Ermittlung der letzten Zeile  auf außerhalb der do while schleife.
Hi Martin,


Zitat:...und füllt immer nur Zelle für Zelle aus....


smile.... nun ja... das ist die Anweisung in Deiner Schleife....  19

2 Vorschläge zur Beschleunigung:

1.: Vor der Schleife Screenupdating und ggf. EnableEvents auf false, nach der Schleife wieder auf true setzen.

2.: Diese Vorschriften:
Code:
   With Cells(Rows.Count, 1).End(xlUp).Offset(1)
      .Value = Date
      .Offset(0, 1).Value = Time
      .Offset(0, 2).Value = Cells(4, 6).Value
      .Offset(0, 3).Value = Cells(5, 6).Value

haben immer wieder den gleichen Wert. Was haben die dann in der Schleife verloren? Das kann man in einem Rutsch erledigen.

Der einzige Wert, der abhängig von der Zelladresse ist, ist der:  .Offset(0, 4).Value = Cells(iCnt, 6).Value

Aber selbst dafür brauchst Du keine Schleife. Benutze am Besten eine formatierte Tabelle, definiere die Startadresse, fülle die jeweils erste Zeile mit den Werten Date, Time usw. (nur die letzte Spalte braucht eine Formel á la = F2 ). Passe die Größe der Tabelle neu an.
Code:
Private Sub Ausgabe_Click()
   sn=cells(4,6).resize(8,5)

   for j=3 to ubound(sn)
     sn(j,5)=sn(j,1)
     sn(j,1)=date
     sn(j,2)=time
     sn(j,3)=sn(1,1)
     sn(j,4)=sn(2,1)
   next

   cells(4,6).resize(8,5)=sn
End Sub
Avoid Do ... Loop is possible.