Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
356to360
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
356to360
356to360
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeilen kopieren bis letzte nichtleere Zeile

Zeilen kopieren bis letzte nichtleere Zeile
29.12.2003 11:43:59
Andre
Hi Leute,

ich möchte Daten aus einem Spreadsheet in eine Tabelle auslesen. Leider reichen meine VBA-Kenntnisse noch nicht aus, um das Ganze etwas geschickter anzustellen.

Jede Zeile des Spreadsheets besteht aus 6 Zellen.

Meine Absicht ist es, die Zeile 1 in den Bereich AA2:AF2 zu schreiben, die Zeile 2 in AG2:AL2, Zeile 3 in AM2:AR2, usw. bis zur Zeile 38.

Das geht doch sicherlich auch einfacher und geschickter?

Also müßte VBA selbständig den Bereich des Spreadsheets von der ersten Zeile bis zur letzten nichtleeren Zeile in die Zeile 2 meines Tabellenblattes "Kontrolle" ab Zelle AA schreiben.

Mein Code:

Public

Sub Posten()
With Rechnungsmaske.Spreadsheet1
[Kontrolle!AA2] = .Cells(1, 1).Value
[Kontrolle!AB2] = .Cells(1, 2).Value
[Kontrolle!AC2] = .Cells(1, 3).Value
[Kontrolle!AD2] = .Cells(1, 4).Value
[Kontrolle!AE2] = .Cells(1, 5).Value
[Kontrolle!AF2] = .Cells(1, 6).Value
[Kontrolle!AG2] = .Cells(2, 1).Value
[Kontrolle!AH2] = .Cells(2, 2).Value
usw.
End With
End Sub


Gruß Andre

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen kopieren bis letzte nichtleere Zeile
29.12.2003 13:09:49
ChrisL
Hi Andre

Option Explicit


Sub t()
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long
Dim Zeile As Long, Spalte As Integer
Set WS1 = ActiveSheet
Set WS2 = Worksheets("Kontrolle")
For iZeile = 1 To WS1.Range("A65536").End(xlUp).Row
Zeile = WorksheetFunction.RoundUp(iZeile / 38, 0) + 1
Spalte = ((iZeile * 6) + 21) - ((Zeile * 228) - 456)
WS2.Range(WS2.Cells(Zeile, Spalte), WS2.Cells(Zeile, Spalte + 5)) = WS1.Range(WS1.Cells(iZeile, 1), WS1.Cells(iZeile, 6)).Value
Next iZeile
End Sub


Gruss
Chris
Danke, aber ...
29.12.2003 15:38:16
Andre
Danke für deine Hilfe, aber leider muß ich jetzt noch irgendwie WS1 sagen, dass er auf meinen Spreadsheet1 zugreifen soll, anstatt auf den aktiveSheet.

Nur leider funktioniert es nicht so richtig.

Also irgendwie muß jetzt "Rechnungsmaske.Spreadsheet1" eingebaut werden.

Gruß Andre
Anzeige
AW: Danke, aber ...
29.12.2003 15:42:47
ChrisL
hi Andre

Set WS1 = Worksheets("Spreadsheet1")
Set WS2 = Worksheets("Kontrolle")

... statt ...

Set WS1 = ActiveSheet
Set WS2 = Worksheets("Kontrolle")

Gruss
Chris
Das haut nicht hin! Sorry.
29.12.2003 16:33:28
Andre
Ich erhalte immer die Meldung: "Index außerhalb des gültigen Bereiches"

Das liegt doch garantiert daran, dass mein Spreadsheet1 keine normale Tabelle ist, sondern in eine UserForm eingebunden ist!

Oder stell ich mich etwas blöd an?

Gruß Andre
AW: Das haut nicht hin! Sorry.
29.12.2003 16:46:28
ChrisL
Hi Andre

Ach so... jetzt weiss ich endlich was "Spreadsheet" in diesem Zusammenhang bedeutet. Habe selber noch nie mit solchen gearbeitet. Jedenfalls versuch mal so...


Sub t()
Dim WS As Worksheet
Dim iZeile As Long
Dim Zeile As Long, Spalte As Integer
Set WS = Worksheets("Kontrolle")
With Rechnungsmaske.Spreadsheet1
For iZeile = 1 To .Range("A65536").End(xlUp).Row
Zeile = WorksheetFunction.RoundUp(iZeile / 38, 0) + 1
Spalte = ((iZeile * 6) + 21) - ((Zeile * 228) - 456)
WS.Range(WS.Cells(Zeile, Spalte), WS.Cells(Zeile, Spalte + 5)) = .Range(.Cells(iZeile, 1), .Cells(iZeile, 6)).Value
Next iZeile
End With
End Sub


Konnte den Code allerdings nicht testen. Falls es nicht funktioniert, muss ich die Frage vermutlich abgeben, da ich wie gesagt keine Erfahrung mit Spreadsheet habe.

Gruss
Chris
Anzeige
Leider nicht...
29.12.2003 17:01:37
Andre
Oh man, ich glaub wir brechen uns damit noch ein ab!

Es scheitert jetzt an folgender Zeile:

For iZeile = 1 To .Range("A65536").End(xlUp).Row

Hab schon versucht, sie anzupassen, aber ohne Erfolg:

For iZeile = .Cells(1, 1) To .Cells(38, 1).End(xlUp).Row
NOCH OFFEN
29.12.2003 17:34:00
ChrisL
Ich weiss leider nicht, wie Spreadsheet auf End(xlUp) reagiert bzw. wieviele Zeilen in Spreadsheet ueberhaupt zur Verfuegung stehen. Kann es leider auch nicht testen.

Vielleicht kennt sonst jemand die Loesung?

Ansonsten wuerde ich die Schlaufe einfach mit fixen Werten laufen lassen...

For i = 1 To 38

Gruss
Chris
Anzeige

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige