Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1212to1216
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
Probleme mit Bereichsnamen
pastinake
Hallo Forum,
ich habe noch einmal eine Frage zu Bereichsnamen. In meinem Fall eine Range mit dem Namen "db".
In einem Standardmodul kann ich problemlos den Bereich übergeben:

Sub test1()
Dim rngBereich As Range
Set rngBereich = Range("db")
End Sub

Steht der Code jedoch in einem Worksheet,- gibt es eine Fehlermeldung.
Ich würde gerne den Grund verstehen...
Lieben Dank
Bernd

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
was ist Range("db")
12.05.2011 10:02:41
Matthias
Hallo
meinst Du vielleicht: Range("D:B")
Sub test1()
Dim rngBereich As Range
Set rngBereich = Range("D:B")
rngBereich.Select
End Sub
das klappt auch aus der Tabelle heraus
Gruß Matthias
habs falsch verstanden kwT
12.05.2011 10:10:14
Matthias
AW: habs falsch verstanden kwT
12.05.2011 10:36:37
pastinake
Hallo Matthias,
kein Problem ;-)
Vielen Dank dennoch für Deine Rückmeldung
Bernd
AW: Probleme mit Bereichsnamen
12.05.2011 10:03:47
Tino
Hallo,
wenn der Code in der Tabelle steht, bezieht sich ein einfaches Range auf diese Tabelle.
Wenn es dort nun diesen Bereich nicht gibt, knallt es.
Der Code muss also in einem Modul stehen oder Du musst die entsprechende Tabelle voranstellen.
Set rngBereich = Tabelle2.Range("db")
oder
Set rngBereich = sheets("Tabelle2").Range("db")
Gruß Tino
Anzeige
AW: Probleme mit Bereichsnamen
12.05.2011 10:29:06
pastinake
Hallo Tino,
lieben Dank für Deine Hilfe. Scheint wohl das Problem zu sein, dass Bereichsnamen sowohl Global als auch Blattbezogen sein können (Bereichsnamen können mehrfach vorhanden sein, verlieren dann aber den globalen Bezug).
Da es mir nicht gelingt, auf Blattebene mit dem globalen Name zu arbeiten und ich auch nicht das Blatt auslesen kann, auf den sich der Bereichsname bezieht, bleibt mir wohl nur diese Version:
Sub test1()
Dim rngBereich As Range
Application.Goto ("db")
Set rngBereich = Selection
End Sub

Noch einmal lieben Dank für Deine nette und schnelle Hilfe !
Bernd
Anzeige
das ist nicht nur der Grund...
12.05.2011 10:42:02
Tino
Hallo,
wie schon geschrieben bezieht sich Range auf die Tabelle wo der Code steht.
Wenn der Code in einem Modul steht,
bezieht sich Range normalerweise auf die aktive Tabelle,
VBA bekommt das aber irgendwie geregelt wenn in der
Klammer auf ein Range- Objekt zu einer anderen Tabelle verwiesen wird.
Aber was hintert dich daran den Code in ein Modul zu stellen?
Gruß Tino
AW: das ist nicht nur der Grund...
12.05.2011 10:48:30
pastinake
Hallo,
ich möchte aus dem Blatt heraus bei einem Clickereignis die Range eines bereichsnamen an ein Standardmodul übergeben.
Bernd
Verstehe ich nicht ganz...
12.05.2011 11:14:30
Tino
Hallo,
wenn Du dies an einen Code in einem Standardmodul sowieso übergeben willst,
warum nicht gleich im Modul- Code dies einbauen?!
Aber mal anders,
Du kannst den Bereich über einen Code Sub oder Funktion in einem
Standardmodul ermitteln und diesen zurückgeben.
Beispiel mit Sub:
kommt als Code in Tabelle
Option Explicit 
 
Sub Beispiel() 
Dim rng As Range 
Call Range_DB(rng) 
MsgBox rng.Address 
End Sub 
 
kommt als Code in Modul
Option Explicit 
'ByRef ist Standard, muss nicht angegeben werden 
Sub Range_DB(ByRef rngBereich As Range) 
    Set rngBereich = Range("db") 
End Sub 
Gruß Tino
Anzeige
ander herum..
12.05.2011 11:38:16
pastinake
Hallo Tino,
ich habe in Blatt 1 einen Button.
Das Clickereignis löst folgende Module aus:
* Abfrage, ob sich die *.mdb Datei im Pfad der Arbeitsmappe befindet
* Datenbankabfrage via ODBC
* Befüllung einer Combobox, sortiert und ohne doppelte Einträge
Konkret geht es um die Befüllung der Combobox. Dieses Makro habe ich mal modular programmiert um es für verschiedene Aufgaben nutzen zu können.
Erwartet werden die Parameter:
* ComboBox (MSForms.ComboBox)
* Datenbereich(Range)
* Spalte die eingelesen werden soll
Jetzt möchte ich aus dem Click EreignisModul die Range eines Bereichsnamen übergeben.
Es funktioniert mit der von mir beschriebenen Methode Goto("Bereichsname") und Set rngDatenbereich = Selection, wobei ich aktuell die konkrete Range via Tabelle.Range("a1").CurrentRegion verwende.
Läuft also. Nur fände ich die Übergabe des Bereichsnamen als Range eleganter. Die Select Methode spricht doch ein wenig gegen meinen Wunsch möglichst objektbasiert zu programmieren.
Danke für Deine Mühe
Bernd
Anzeige
und wie ist es mit meinem Vorschlag?...
12.05.2011 12:10:47
Tino
Hallo,
Deine Variante war so
Sub test1()
Dim rngBereich As Range
Application.Goto ("db")
Set rngBereich = Selection
End Sub
könntest auch mal so versuchen.
kommt als Code in Tabelle
Sub test1()
Dim rngBereich As Range
Call Range_DB(rngBereich,"db")
msgbox rngBereich.address
End Sub
kommt als Code in Modul
Option Explicit
'ByRef ist Standard, muss nicht angegeben werden
Sub Range_DB(ByRef rngBereich As Range,strBereichName as string)
Set rngBereich = Range(strBereichName)
End Sub 

Anzeige
AW: ander herum..
12.05.2011 12:13:35
Rudi
Hallo,
so geht das auch aus 'nem Tabellenmodul heraus:
  Set rng = ActiveWorkbook.Names("DB").RefersToRange

Gruß
Rudi
AW: ander herum..
12.05.2011 12:18:37
pastinake
DAS ist die Lösung !
Vielen Dank Rudi
gute Idee ...
12.05.2011 12:53:17
Tino
Hallo,
das hat mich dazu bewogen etwas zu experimentieren.
Sub test1()
Dim rng As Range

Set rng = [Db]
MsgBox rng.Address(External:=True)

'oder 

Set rng = Evaluate("db")
MsgBox rng.Address(External:=True)

End Sub
Gruß Tino
Anzeige
AW: gute Idee ...
12.05.2011 13:04:32
pastinake
Hallo Tino,
Evaluate (oder Direktaufruf über Eckige Klammern mit StringArgument) gefällt mir auch sehr gut.
Wieder was gelernt !
DANKE und Gruß
Bernd

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige