Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
812to816
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
812to816
812to816
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

globales Range-Objekt

globales Range-Objekt
25.10.2006 14:15:32
Matthias
In meiner Anwendung hatte ich bisher indirekte Zugriffe auf Bereiche, bei denen die Adresse in einer benannten Zelle steht. Unter der Annahme, dass es eine benannte Zelle gibt, die 'Zieladresse' heisst und den Wert 'Tabelle1!B2:D20' enthält, sah der Zugriff bisher so aus:
Range(Range("ZielAdresse").Value)
und lieferte den gewünschten Bereich zurück.
Seit ich aus der Mappe eine weitere Mappe öffne, werden derartige Codezeilen auch ausgeführt, während die Neue Mappe aktiv ist. Das führt zu Laufzeitfehlern, weil die benannten Bereiche nicht mehr gefunden werden (so weit ganz logisch)
Das Workbook-Objekt hat zwar keine Range-Eigenschaft, die benannten Bereiche können aber über die Names-Auflistung angesprochen werden:
ThisWorkbook.Names("Zieladresse").RefersToRange.Value
liefert jetzt den Adressstring unabhängig von der aktiven Mappe.
Den Adressbereich als Range-Objekt zurückzugeben (währen eine andere Mappe aktiv ist) ist mir aber nicht gelungen.
In der VBA-Hilfe steht, dass 'Range' ohne Objektbezeichner ein Shortcut für 'ActiveSheet.Range' sei. Dennoch gibt es einen Unterschied zwischen
Range("Tabelle1!B2:D20")
und
ActiveSheet.Range("Tabelle1!B2:D20")
Ersteres funktioniert auch, wenn 'Tabelle2' aktiv ist, im zweiten Fall wird der Laufzeitfehler 1004 ausgelöst (das gleiche ist auch bei benannten Bereichen der Fall, wenn sie nicht auf dem aktiven Blatt liegen)
Im Gegensatz zu den benannten Bereichen, für die es mit "Names" eine Zugriffsmöglichkeit auf Workbook-Ebene gibt, habe ich hier keine vergleichbare Lösung gefunden. Range ohne Objekt verhält sich zwar, als obe es dem Workbook gehörte, ist dort aber nicht definiert.
Ich sehe drei Umgehungsmöglichkeiten, die mich aber alle nicht ganz zufriedenstellen:
1) Verzicht auf die Angabe des Worksheets in der Adresse in der benannten Zelle und fest codierter Zugriff auf das Sheet mit 'Thisworkbook.Worksheets("Tabelle1").Range(ThisWorkbook.Names("Zieladresse").RefersToRange.Value)'
2) Laden der Zieladresse in eine Variable und Extraktion des Sheetnamens für die korrekte Indizierung des Worksheets
3) 'ThisWorkbook.Activate' und danach die ursprünglichen Zugriffe über das "nackte" 'Range'
Kennt jemand eine andere Lösung (oder die Ursache für dieses eigenartige Verhalten)?
Danke im Voraus
Matthias

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: globales Range-Objekt
25.10.2006 16:23:24
IngGi
Hallo Matthias,
"testname" ist ein benannter Bereich in Mappe1. Folgender Code in Mappe1 funktioniert anstandslos:

Sub Range_uebergeben()
Dim rng As Range
Workbooks("Mappe2").Activate
Set rng = Range(ThisWorkbook.Names("testname"))
End Sub
Gruß Ingolf
AW: globales Range-Objekt
27.10.2006 11:26:27
Matthias
Hi Ingolf!
Der Code funktioniert zwar anstandslos, liefert aber den Inhalt der benannte Zelle. Dort steht bei mir aber die Adresse der eigentlichen Zielzelle und zwar mit Blattreferenz.
Der indirekte Zugriff funktioniert mit
Set Rng = Range(ThisWorkbook.Names("Testname").RefersToRange.Value)
auch, so lange keine andere Mappe aktiv ist. Dann aber findet er mit dem globalen Range-Objekt die Zieladresse nicht mehr. Mein Problem ist (s.o.) dass das Workbook keine Range-Eigenschaft hat und mit ActiveSheet. Range nur Adressen am eigenen Blatt gefunden werden.
Fällt jemandem dazu eine Lösung ein?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige