Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Fehler beim Kopieren eines Bereiches

VBA: Fehler beim Kopieren eines Bereiches
01.12.2012 00:03:05
WalterK
Schönen Abend,
ich komm nicht drauf wo der Fehler ist.
Bei der letzten Zeile kommt der Fehlerhinweis: Anwendungs- und objektdefinierter Fehler.
Der Code sollte derzeit (wird noch erweitert) aus wsQuelle Zellen in das aktive Blatt kopieren. Das aktive Blatt ist das Blatt Namensbearbeitungstabelle und aus diesem Blatt wird der Code auch gestartet.
Sub NamenKorrigieren()
'Änderung dürfen nur im Blatt Namensbearbeitungstabelle durchgeführt werden, hier im Code muss  _
nichts geändert werden.
Dim wsQuelleA As String 'QuelleA = 1. Quelle
Dim wsQuelleB As String 'QuelleB = 2. Quelle
Dim LeZeiQuA As Long 'Letzte Zeile in der angegebenen Spalte in der 1. Quelle
Dim LeZeiQuB As Long 'Letzte Zeile in der nagegebenen Spalte in der 2. Quelle
Dim SpaQuAVSNR As Long 'Spalte mit der VSNR in der 1. Quelle
Dim SpaQuBVSNR As Long 'Spalte mit der VSNR in der 2. Quelle
Dim SpaQuAName As Long 'Namensspalte in der 1. Quelle
Dim SpaQuBName As Long 'Namensspalte in der 2. Quelle
wsQuelleA = [B8] 'String aus Zelle auslesen
wsQuelleB = [B16] 'String aus Zelle auslesen
SpaQuAVSNR = Range("B9") 'Zahl aus Zelle auslesen
SpaQuBVSNR = Range("B17") 'Zahl aus Zelle auslesen
SpaQuAName = Range("B10") 'Zahl aus Zelle auslesen
SpaQuBName = Range("B18") 'Zahl aus Zelle auslesen
LeZeiQuA = Worksheets(wsQuelleA).Cells(Rows.Count, SpaQuAVSNR).End(xlUp).Row
LeZeiQuB = Worksheets(wsQuelleB).Cells(Rows.Count, SpaQuBVSNR).End(xlUp).Row
Worksheets(wsQuelleA).Range(Cells(3, SpaQuAVSNR), Cells(LeZeiQuA, SpaQuAVSNR)).Copy  _
ActiveSheet.Range(Cells(3, 10), Cells(LeZeiQuA, 10))
End Sub
Besten Dank für die Hilfe, Servus Walter

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Copy kopiert, Paste fügt ein, nachlesen! Gruß owT
01.12.2012 00:26:23
Luc:-?
:-?

Richtig referenzieren
01.12.2012 01:56:58
Erich
Hi Walter,
schau dir das mal an:

' falsch (bisheriger Code):
Worksheets(wsQA).Range(Cells(3, SpQAV), Cells(LzQA, SpQAV)).Copy _
ActiveSheet.Range(Cells(3, 10), Cells(LzQA, 10))
' richtig:
Worksheets(wsQA).Range(Worksheets(wsQA).Cells(3, SpQAV), _
Worksheets(wsQA).Cells(LzQA, SpQAV)).Copy _
ActiveSheet.Range(ActiveSheet.Cells(3, 10), ActiveSheet.Cells(LzQA, 10))
' besser:
With Worksheets(wsQA)
.Range(.Cells(3, SpQAV), .Cells(LzQA, SpQAV)).Copy _
Range(Cells(3, 10), Cells(LzQA, 10))
End With
' Beispiel:
' Worksheets(wsQA).Range(Cells(3, SpQAV), Cells(LzQA, SpQAV))
' -------in wsQA-------- in ActiveSheet-  --in ActiveSheet--
Im Beispiel gehören die beiden Cells zum ActiveSheet - weil nichts davor steht.
Range soll aber zum Sheet wsQA gehören. Das geht nicht.
ActiveSheet kann man weglassen (oder auch wegen größerer Klarheit hinschreiben),
wenn der Code in einem "normalen" Modul steht. Dann ist Cells(x,y) dasselbe wie ActiveSheet.Cells(x,y)
Steht der Code im Modul eines Tabellenblatts, ist mit Cells(x,y) eine Zelle des Blattes ("abc") gemeint,
zu dem der Code gehört.
Cells(x,y) ist dann gleichbedeutend mit Me.Cells(x,y) und Sheets("abc").Cells(x,y)

Anzeige
noch was
01.12.2012 02:08:10
Erich
Hi Walter,
du kannst dir die Arbeit um einiges vereinfachen, wenn du statt der String-Variablen für Blattnamen
Blattobjekt-Variablen verwendest. Das könnte etwa so aussehen:

Dim wsQA As Worksheet 'QuelleA = 1. Quelle
Dim wsQB As Worksheet 'QuelleB = 2. Quelle
Set wsQA = Worksheets(Range("B8")) ' besser als [B8]
Set wsQB = Worksheets(Range("B16"))
' richtig:
wsQA.Range(wsQA.Cells(3, SpQAV), _
wsQA.Cells(LzQA, SpQAV)).Copy _
Range(Cells(3, 10), Cells(LzQA, 10))
' besser:
With wsQA
.Range(.Cells(3, SpQAV), .Cells(LzQA, SpQAV)).Copy _
Range(Cells(3, 10), Cells(LzQA, 10))
End With
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
noch nicht ganz
01.12.2012 11:12:41
WalterK
Hallo Erich,
besten Dank für Deine ausführlichen Erklärungen. Ich habe Dein letztes Beispiel bei mir eingetragen, trotzdem bringe ich den Code nicht zum laufen.
Der Code sieht jetzt so aus:
Option Explicit
Sub NamenKorrigieren()
'Änderungen dürfen nur im Blatt Namensbearbeitungstabelle durchgeführt werden, hier im Code  _
muss nichts geändert werden.
Dim wsQA As Worksheet 'QuelleA
Dim wsQB As Worksheet 'QuelleB
Dim LzQA As Long 'Letzte Zeile in der angegebenen Spalte in der QuelleA
Dim LzQB As Long 'Letzte Zeile in der nagegebenen Spalte in der QuelleB
Dim SpQAVSNR As Long 'Spalte mit der VSNR in der QuelleA
Dim SpQBVSNR As Long 'Spalte mit der VSNR in der QuelleB
Dim SpQAName As Long 'Namensspalte in der QuelleA
Dim SpQBName As Long 'Namensspalte in der QuelleB
Set wsQA = Worksheets(Range("B8")) 'Blattname aus Zelle auslesen
Set wsQB = Worksheets(Range("B16")) 'Blattname aus Zelle auslesen
SpQAVSNR = Range("B9") 'SpaltenZahl aus Zelle auslesen
SpQBVSNR = Range("B17") 'SpaltenZahl aus Zelle auslesen
SpQAName = Range("B10") 'SpaltenZahl aus Zelle auslesen
SpQBName = Range("B18") 'SpaltenZahl aus Zelle auslesen
LzQA = Worksheets(wsQA).Cells(Rows.Count, SpQAVSNR).End(xlUp).Row
LzQB = Worksheets(wsQB).Cells(Rows.Count, SpQBVSNR).End(xlUp).Row
With wsQA
.Range(.Cells(3, SpQAVSNR), .Cells(LzQA, SpQAVSNR)).Copy Range(Cells(3, 10), Cells(LzQA, _
10))
End With
End Sub
Bei der Codezeile Set wsQA = Worksheets(Range("B8")) kommt eine Laufzeitfehler 13: Typen unverträglich.
Besten Dank für die Hilfe, Servus Walter

Anzeige
.Value
01.12.2012 11:38:31
Tino
Hallo,
verwende Range("B8").Value, sonst wird dies als Range-Objekt interpretiert.
Gruß Tino

Danke, Tino - Sorry, Walter - SchöWoEnd! owT
01.12.2012 12:44:10
Erich

AW: Danke, Tino - Sorry, Walter - SchöWoEnd! owT
01.12.2012 14:32:51
WalterK
Hallo zusammen,
ich bringe den Code einfach nicht zum funktionieren.
Ich habe jetzt einmal eine Beispieltabelle angehängt, ich kann den Fehler nicht nachvollziehen.
https://www.herber.de/bbs/user/82841.xls
Danke nochmals und Servus, Walter

..ohne Worksheet...
01.12.2012 14:53:16
robert
LzQA = wsQA.Cells(Rows.Count, SpQAVSNR).End(xlUp).Row
LzQB = wsQB.Cells(Rows.Count, SpQBVSNR).End(xlUp).Row
Gruß
robert

Anzeige
Danke an Alle, jetzt funktionierts. Servus Walter
01.12.2012 14:58:12
WalterK

CStr(...) hätt's auch getan! ;-) orT
02.12.2012 19:40:02
Luc:-?
(oder 'ne extra $Variable)
Gruß Luc :-?

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige