Array zeilenweise iterativ kopieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Array zeilenweise iterativ kopieren
von: Bernhard
Geschrieben am: 24.06.2015 11:32:29

Hallo,
Excel soll eine Kurve langsam aufbauen. Pro 0.5 Sekunden einen neuen Wert einzeichnen.
Ich habe in den Spalten B bis E Zahlen, Zeile 3 ist die Kopfzeile.
Die Spaltenlänge ist variabel, je nach Input.
Ein vba soll nun Zeile für Zeile nacheinander in die Zielspalten G bis J rein kopieren inkl. Kopfzeile, also nicht alles auf einen Schlag. Mit einer for next Schleife oder so.... also alle 0.5 Sekunden Ausgangszeile auf leer prüfen, falls nein, kopieren und in den Zielbereich rein kopieren. Dann weiter mit der nächsten Zeile. Bei der ersten Leerzeile soll er aufhören.
Mit diesen Zielspalten ist eine Datenreihe in der x,y Grafik verknüpft.
Ich möchte sehen, wie sich die Kurve langsam aufbaut durch alle 0.5 Sekunden Hinzufügen von Datenpunkten via vba.
Weiss jemand einen Code hierzu?
Besten Dank und Gruss,
Bernhard

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Jack_d
Geschrieben am: 24.06.2015 12:29:27
Hallo Bernhard.
1. Eine Mustermappe ist immer von Vorteil
2. ist der Befehl den du suchst Application.Wait
3. der Rest sollte die Als Excel Profi ja eigentlich leicht fallen
Grüße Jack

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Bernhard
Geschrieben am: 24.06.2015 13:28:49
https://www.herber.de/bbs/user/98432.xlsx
Hier eine Beispieldatei.
Es geht mir nur um das vba, die Grafik wird er automatisch updaten, wenn neue Zeilen eingefügt sind.
Das müsste doch irgendwie mit for next i und applicationwait (0,0,0.5) gehen, dann stoppt er zwischen jedem einzelnen Kopiervorgang eine halbe Sekunde... oder nicht?
Danke und Grüsse,
Bernhard

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Jack_d
Geschrieben am: 24.06.2015 13:44:41
Hallo Bernhard,
ich weiss ehrlich gesagt nicht, was wo reinzukopieren ist.
Hast du schon einen Makroansatz angefangen?
Grüße

Bild

Betrifft: Hier aber erstmal eine Lösung zum Warten
von: Jack_d
Geschrieben am: 24.06.2015 14:06:18
Hab gelesen, das es wohl so günstiger ist.
Grüße

Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)
Private Sub CommandButton1_Click()
   For i = 1 To 10
   
    'Copy and Paste Makro
    'xxxxxxxxx
    'xxxxxxxxx
    
    'Warten
    Call Sleep(500) '0,5 Sekunden
   Next i
End Sub


Bild

Betrifft: AW: Hier aber erstmal eine Lösung zum Warten
von: Bernhard
Geschrieben am: 24.06.2015 17:59:38
Danke für die Wartelösung!
Ich hänge nochmal ein Beispiel dran, vielleicht wirds dann klarer. Das copy paste vba fehlt mir noch.
https://www.herber.de/bbs/user/98445.xls
Grüsse,
Bernhard

Bild

Betrifft: AW: Hier aber erstmal eine Lösung zum Warten
von: Werner
Geschrieben am: 24.06.2015 20:34:44
Hallo Bernhard,
so vielleicht? Ungetestet.

Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
 
Private Sub CommandButton1_Click()
Dim loletzte AS Long
loLetzte = ActiveSheet.Cells(RowsCount, 2).End (xlUp).Row 'letzt Zeile in Spalte B
For i = 4 To loLetzte 'von Zeile 4 bis letzt Zeile
'Copy and Paste Makro
With ActiveSheet
.Range(.Cells(i, 2), .Cells(i, 5)).Copy .Cells(i, 7)
End With   
'Warten
Call Sleep(500) '0,5 Sekunden
Next i
 End Sub
Gruß Werner

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Bernhard
Geschrieben am: 27.06.2015 12:37:39
Hallo Werner,
vielen Dank für deinen Code.
Nur meldet er mir jetzt in Zeile:
loletzte = ActiveSheet.Cells(RowsCount, 2).End(xlUp).Row 'letzt Zeile in Spalte B
Laufzeitfeler 1004: Anwendungs- oder Objektdefinierter Fehler.
Was habe ich falsch gemacht?
Viele Grüße,
Bernhard

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Daniel
Geschrieben am: 27.06.2015 12:56:20
Hi
es muss heißen:
Rows.Count
und steht für : Zeilen.Zählen
ohne den Punkt dazwischen interpretiert dein VBA-Editor das RowsCount als neue Variable und die hat dann den Wert 0, was dann zu dem Fehler führt, weil es eine Zelle mit der zeilennummer 0 nicht gibt.
kleiner Tip: verwende Option Explicit und deklariere deine Variablen immer, dann fallen solche Fehler schneller auf.
Gruß Daniel

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Werner
Geschrieben am: 27.06.2015 13:47:02
Hallo Bernhard,
sorry, ich habe das auf die Schnelle mit dem Handy runter geklimpert, da ist mir das mit dem fehlenden Punkt bei Rows.Count nicht aufgefallen.
Daniel hat dir das ja schon geschrieben.
Gruß Werner

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Werner
Geschrieben am: 27.06.2015 14:20:04
Hallo Bernhard,
hier noch mal mit einer kleinen Ergänzung.
Als Erstes wird dein Zielbereich geleert, 0,5 Sekunden warten, dann wird der Quellbereich zeilenweise mit 0,5 Sekunden Wartezeiten in den Zielbereich kopiert.

Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Public Sub Kopieren()
Dim loLetzteZiel As Long
Dim loletzte As Long
loLetzteZiel = ActiveSheet.Cells(Rows.Count, 7).End(xlUp).Row 'letzte Zeile in Spalte G
With ActiveSheet
.Range(.Cells(4, 7), .Cells(loLetzteZiel, 10)).ClearContents
End With
Call Sleep(500)
loletzte = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row  'letzt Zeile in Spalte B
For i = 4 To loletzte 'von Zeile 4 bis letzt Zeile
'Copy and Paste Makro
With ActiveSheet
.Range(.Cells(i, 2), .Cells(i, 5)).Copy .Cells(i, 7)
End With
'Warten
Call Sleep(500) '0,5 Sekunden
Next i
End Sub
Gruß Werner

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Bernhard
Geschrieben am: 29.06.2015 07:03:35
Hallo zusammen,
vielen Dank, jetzt macht er, was er soll....
Nur: das vba läuft nur, wenn ich es aus dem sheet heraus starte, wo es arbeitet... in dem Falle das sheet "gefiltert".
Ich möchte aber sehen, wie er die Grafik sukzessive zeichnet, d.h., das vba soll aus dem Sheet "Grafik" heraus "startbar" sein, und er soll während des Kopiervorgangs nur eben das sheet "Grafik" anzeigen.
Wie kann ich das erreichen?
Besten Dank und Grüße,
Bernhard

Bild

Betrifft: AW: Array zeilenweise iterativ kopieren
von: Werner
Geschrieben am: 29.06.2015 20:25:54
Hallo Bernhard,
einfach im Code jeweils
ActiveSheet durch Worksheets("gefiltert") ersetzen.
Gruß Werner

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Array zeilenweise iterativ kopieren"