VBA Spalte aus Tabelle3 in Tabelle2 kopieren

Thoakon

Cadet 4th Year
Registriert
Jan. 2006
Beiträge
99
Hi,

irgendwie stell ich mich leider etwas zu doof an und bekommen den Inhalt meiner div. Spalten nicht in eine andere Tabelle kopiert.

Hier erstmal um was es genau geht.

Tabelle1 dient zur Steuerung.
Hier sind Buttons hinterlegt. Button1 liest eine Textdatei, dessen Inhalt in Tabelle3 eingefügt wird.
Button2 soll nun das Formular in Tabelle2 mit den Daten aus Tabelle3 füllen. Dazu werden die Spalten mit Ihren unterschiedlichen längen angesprochen und kopiert. Nur das Kopieren in Tabelle2 funktioniert nicht.

Hier der Ansatz.

Dim WsA As Worksheet
Dim WsB As Worksheet
Dim RngA As Range
Dim RngB As Range
Dim ZA As Integer
Dim SA As Integer

Set WsA = Tabelle3
Set WsB = Tabelle2
Set RngA = WsA.Range("C2")
Set RngB = WsB.Range("B4")

ZA = RngA.EntireRow.Row
SA = RngA.EntireColumn.Column

WsA.Range(Cells(ZA, SA), Cells(Cells(ZA, SA).End(xlDown).Row, SA)).Copy
RngB.PasteSpecial
Application.CutCopyMode = False

Set WsA = Nothing
Set WsB = Nothing
Set RngA = Nothing
Set RngB = Nothing

End Sub

Es kommt jedoch beim Ausführen zum Laufzeitfehler 1004
Die Methode Range für das Objekt _Worksheet ist fehlgeschlagen.

Wo liegt jetzt der Fehler?

Danke für Eure Mithilfe
 
Hallo,

Wo liegt jetzt der Fehler?
erst einmal da, dass du den Code ohne die entsprechende (gerne anonymisierte) Datei hier einstellst. So ist es einfach zu mühsam, den Fehler zu suchen ...
 
Klammer auf… Sortiere doch mal selbst die Begriffe richtig. Tabellen sind Anordnungen von Werten. Was du da meinst müssten Blätter sein. Und Formulare kenne ich vornehmlich in Access, evtl. in Word. Eingelesene Daten an bestimmte Stellen eines Blattes zu schreiben, darauf könnte ich mir was einbilden. Klammer zu.


Mal davon ab, dass ich mich mühsam durch diesen Variablenkrimskarms und Set's durchbeißen musste (weil ich eben lieber direkt lesbar referenziere), und auf Copy-Paste stets verzichte wenn ich nicht explizit die Zwischenablage brauche, vermute ich, der Fehler kommt in dieser Zeile:
WsA.Range(Cells(ZA, SA), Cells(Cells(ZA, SA).End(xlDown).Row, SA)).Copy
Nebenher - dieses End(xlDown) geht durchaus schief wenn da Werte gelöscht werden, der Blattbereich aber für XL noch belegt ist.
Und wie oder wo ist «Tabelle3» definiert? Mein VBA 2010 meint, das müsste z.B. «Set WsA = Worksheets("Tabelle3")» heißen.

Zur Lösung: Du musst treudoof überall referenzieren:
WsA.Range(WsA.Cells(ZA, SA), WsA.Cells(WsA.Cells(ZA, SA).End(xlDown).Row, SA)).Copy
So sollte es funktionieren.

Code:
Sub RangeKopieren()
Worksheets("Blatt4").Range(Worksheets("Blatt4").Cells(1, 12), _
Worksheets("Blatt4").Cells(21, 12)) = _
Worksheets("Blatt5").Range(Worksheets("Blatt5").Cells(1, 4), _
Worksheets("Blatt5").Cells(21, 4)).Value
End Sub
Ohne Set, die Namen könnten in Stringvariablen stehen, die Koordinaten in numerischen. Daran (was ohne Copy-Paste auskommt, ich vermute mehr als Inhalte\Werte werden ja nicht transportiert) müsstest du das Referenzierprinzip ersehen können.
Diese Referenziermöglichkeit ist sehr flexibel und mächtig, im Kleinen aber gerät sie zu harter Arbeit.

CN8
 
Zuletzt bearbeitet:
@CN8

Sry für die unglückliche Formulierung, ja ich meinte die eigentlicher Blätter.

Vielen Dank. nun läuft das Makro problemlos durch und tut was es soll :)

Danke für deine Mühe
 
Zurück
Oben