vba Sehr langsam
#1
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ß
Antworten Top
#2
Hallo,

es wäre einfacher zu helfen, wenn du mal deine Datei hochladen würdest.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hallo,

gelöscht.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
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.
Antworten Top
#5
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.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#6
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.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


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