Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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
Inhaltsverzeichnis

Range festlegen - komische Sache mit Worksheet

Range festlegen - komische Sache mit Worksheet
Holger
Hallo,
ich habe zwei Tabellenblätter:
Set wsContracts = Worksheets("Contracts")
Set wsShipments = Worksheets("Shipments")
Ich will einen Rangebereich von Contracts in Shipments kopieren.
Obwohl ich den Worksheet davor angeben, funktioniert folgende Zeile nur,
wenn ich das Worksheet auch aktiviere. Wie kann das sein, was mache ich falsch?
Set rngSource = wsContracts.Range(Cells(rngmyCell.Row, 1), Cells(rngmyCell.Row, 14))
Set rngTarget = wsShipments.Range(Cells(intRowShipments, 1), Cells(intRowShipments, 14)) -SO NICHT
Aber so klappt es , warum?:
wsShipments.Activate
Set rngTarget = wsShipments.Range(Cells(intRowShipments, 1), Cells(intRowShipments, 14))
Range festlegen - komische Sache mit Worksheet
27.07.2010 16:00:06
Anton
Hallo Holger,
Auszug aus OH:
Cells-Eigenschaft
Wenn Sie diese Eigenschaft ohne einen Objektkennzeichner verwenden, wird ein Range-Objekt
zurückgegeben, das alle Zellen im aktiven Arbeitsblatt darstellt.
mfg Anton
AW: Range festlegen - komische Sache mit Worksheet
27.07.2010 16:03:25
Holger
Hallo Anton,
ich verstehe nicht ganz, ich habe doch das Tabellenblatt mit angegeben!?!?
Ich kann nur Cells benutzen, da ich ja schleife mit
For each c in Range
Und hier habe ich ja nur Cells zur Verfügung und nicht etwa A1 oder so !?!?
next c
Noch was dazu zum Kopieren in andere Sheets
27.07.2010 16:01:38
Holger
Schon wieder ich ;).
Das Problem ist wirklich kurios. Anscheinend muss ich vor jedem Copy Vorgang
immer das Tabellenblatt aktivieren, indem ich es hinkopieren möchte.
Das wäre ja total kompliziert, weil ich nach jedem Kopiervorgang immer wieder
zum ursprünglichen Tabellenblatt zurück müßte, also pro Kopiervorgang zwei Activates.
Das kann doch nicht sein, wo liegt mein Denkfehler?
Anzeige
AW: Noch was dazu zum Kopieren in andere Sheets
27.07.2010 16:09:09
xr8k2
Hallo Holger,
du musst das Quellsheet vor jedem Range-Objekt angeben:
Set rngTarget = wsShipments.Range(wsShipments.Cells(intRowShipments, 1), wsShipments.Cells(intRowShipments, 14))
Gruß,
xr8k2
Teil-Widerspruch
27.07.2010 17:26:19
Erich
Hi xr8k2 ;-),
das hier reicht sicher auch:

Set rngTarget = Range(wsShipments.Cells(intRowShipments, 1), wsShipments.Cells(intRowShipments, 14))
Wesentlich ist nur die Angabe des Blatts vor den beiden Cells.
Mit den beiden Cells ist festgelegt, wozu der davon aufgespannte neue Bereich gehört.
Hilfreich ist bei derartigen Gelegenheiten meist eine With-Klammer:

With wsShipments
Set rngTarget = Range(.Cells(intRowShipments, 1), .Cells(intRowShipments, 14))
' oder
Set rngTarget = .Range(.Cells(intRowShipments, 1), .Cells(intRowShipments, 14))
End With
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Teil-Widerspruch eingesehen ...
27.07.2010 17:54:49
xr8k2
Hallo Erich,
danke für den Hinweis ... war mir bis jetzt noch gar nicht bewusst ... beim näheren Nachdenken erscheint´s aber logisch ;-)
Gruß,
xr8k2
PS: Wieviele unnütze bzw. überflüssige Codezeilen das dann bislang wohl schon waren ?
auch Teil-Widerspruch ;-)
27.07.2010 18:30:43
Tino
Hallo,
ich würde den Punkt mit schreiben, es kommt darauf an von wo der Code ausgeführt wird.
In einem Modul kein Problem da gehts auch ohne,
aber wenn der Code aus einem anderen Tabellenblatt aufgerufen wird knallt es.
https://www.herber.de/bbs/user/70783.xls
Gruß Tino
Anzeige
kein Widerspruch :-)
27.07.2010 19:46:00
Erich
Hi Tino,
da stimme ich dir völlig zu. Ich schreibe auch (fast) immer auch vor Range den Punkt.
Man ist dann einfach auf der sicheren Seite, auch wenn der Code mal in ein Klassenmodul verschoben wird.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
dachte ich mir schon bei Dir ;-) oT.
27.07.2010 19:49:07
Tino
Widerspruch gegen Teil-Widerspruch
27.07.2010 18:52:11
Anton
Hallo Erich,
Auszug aus OH:
Range-Auflistung
Bei Verwendung ohne Objektkennzeichner (das Objekt links vom Punkt)
gibt die Range-Eigenschaft einen Bereich im aktiven Blatt zurück.
Ist das aktive Blatt kein Arbeitsblatt, schlägt die Methode fehl.
mfg Anton
Wid. gegen Wid. gegen Teil-Widerspruch
27.07.2010 19:50:52
Erich
Hi Anton,
was die VBA-Hilfe hier sagt, gilt für nur "normale" Module - nicht aber für Klassenmodule von Tabellen.
Das wird auch schon aus Tinos Beispielmappe klar.
Noch was:
Was heißt hier OH? Online-Hilfe? Was ist da "online"? Die VBA-Hilfe gibt's billseidank auch offline... ;-)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Range festlegen - komische Sache mit Worksheet
27.07.2010 16:07:15
Anton
Hallo Holger,
Set rngTarget = wsShipments.Range(wsShipments.Cells(intRowShipments, 1), wsShipments.Cells(intRowShipments, 14))
mfg Anton
Range festlegen - Referenzierungen
27.07.2010 16:12:39
Erich
Hi Holger,
noch was zum Ansehen:

Option Explicit
Sub abc()
Dim wsCont As Worksheet, rngS As Range
Set wsCont = Worksheets("Contracts")
' falsch, denn Cells(77, 1) gehört zum aktiven Blatt
Set rngS = wsCont.Range(Cells(77, 1), Cells(77, 14))
' richtig ist:
Set rngS = Range(wsCont.Cells(77, 1), wsCont.Cells(77, 14))
Set rngS = wsCont.Range(wsCont.Cells(77, 1), wsCont.Cells(77, 14))
' besser ist:
With wsCont
Set rngS = .Range(.Cells(77, 1), .Cells(77, 14))
End With
' ab hier nicht mehr wichtig
wsCont.Activate
' Cells(77, 1) gehört zum aktiven Blatt
Set rngTarget = Range(Cells(77, 1), Cells(77, 14)) ' ist ok
' wsCont. ist hier überflüssig, da aktiv!
Set rngTarget = wsCont.Range(Cells(77, 1), Cells(77, 14))
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
An Anton und xr8k2: VIELEN DANK!!!
27.07.2010 16:12:41
Holger
Hallo ihr beiden,
ihr habt ja beide die gleiche Lösung gepostet, Vielen Dank euch.
Auf diese Syntax wäre ich nicht gekommen und stand auch nicht so
in der OnlineHilfe. Damit is mir sehr geholfen!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige