ich habe ein Problem, das ich bisher nicht lösen konnte. Vielleicht
könnt ihr mir da ja weiterhelfen.
Ich habe in einem Worksheet über Namen -> Definieren eine Variable
definiert und diese auch mit einem Wert belegt.
Auf diesen Wert möchte ich nun in einem Makro zugreifen. Ich habe das
versucht folgendermaßen zu realisieren:
Dim Variablenname as String
With ActiveSheet
Variablenname = .Range("Variablenname").Value
End With
Leider führt das immer zu einer Fehlermeldung und ich verstehe das ganze
nicht so richtig.
Für Anregungen bin ich dankbar.
Gruss
Jörg
Hier ein funktionsfähiges Beispiel mit 3 Varianten der Ansprache:
Option Explicit
Sub Variable()
Dim Variablenname As String
Variablenname = "Test"
MsgBox Range("Test")
MsgBox Range(Variablenname).Value
MsgBox [Test]
End Sub
Gruß
Berti
--
***********************************************************
Email: mailto:be...@excelabc.de
Homepage: http://www.Excelabc.de/index.htm
Tipps & Tricks & Makros rund um Excel
***********************************************************
"Jörg Walter" <joerg....@gmx.de> schrieb im Newsbeitrag
news:adjc8p$10v0ut$1...@ID-66169.news.dfncis.de...
Hallo Bert,
vielen Dank für deine Antwort,
>Du hast 2 Denkfehler drin:
>1. V-Name = Range("V-Name") kann nicht funktionieren, da Du gleichzeitig die
>Variable als String deklarierst
Ok, hab ich probiert führt aber auch nicht zum Ziel. Es muss also noch
etwas anderes sein.
>2. Die Namen sind nicht auf ein Tabellenblatt bezogen, sondern gelten in der
>gesamten Arbeitsmappe.
Ich glaube das ist nicht ganz richtig. Wenn ich in Excel (also nicht im
VBA-Editor) über Einfüfen -> Name -> Definieren... einen Name wie folgt
festlege: 'Tabelle1'!Variablenname und ihm dann z.B. den Wert = 1
zuordne, dann ist diese Variable nur in diesem einen Arbeitsblatt
Tabelle1 gültig.
>
>Hier ein funktionsfähiges Beispiel mit 3 Varianten der Ansprache:
>
>Option Explicit
>
>Sub Variable()
> Dim Variablenname As String
> Variablenname = "Test"
> MsgBox Range("Test")
> MsgBox Range(Variablenname).Value
> MsgBox [Test]
>End Sub
Mit diesem Makro greife ich doch aber nicht auf eine definierte
Variable im Arbeitsblatt zu, sondern spreche lediglich eine Variable im
Makro an.
Vielleicht habe ich mich nicht ganz richtig ausgedrückt gestern. War
schon etwas müde.
Gruss
Jörg Walter
Jörg Walter schrieb:
>
> >2. Die Namen sind nicht auf ein Tabellenblatt bezogen, sondern gelten in der
> >gesamten Arbeitsmappe.
>
> Ich glaube das ist nicht ganz richtig. Wenn ich in Excel (also nicht im
> VBA-Editor) über Einfüfen -> Name -> Definieren... einen Name wie folgt
> festlege: 'Tabelle1'!Variablenname und ihm dann z.B. den Wert = 1
> zuordne, dann ist diese Variable nur in diesem einen Arbeitsblatt
> Tabelle1 gültig.
Wenn Du das Tabellenblatt mit angeibst, stimmt das.
Wenn Du die Bezeichnung _ohne_ Angabe des Tabellenblattes machstgilt sie
tatsächlich für die gesamte Mappe; da hat Berti recht :-)
> >Hier ein funktionsfähiges Beispiel mit 3 Varianten der Ansprache:
> >
> >Option Explicit
> >
> >Sub Variable()
> > Dim Variablenname As String
> > Variablenname = "Test"
> > MsgBox Range("Test")
> > MsgBox Range(Variablenname).Value
> > MsgBox [Test]
> >End Sub
>
> Mit diesem Makro greife ich doch aber nicht auf eine definierte
> Variable im Arbeitsblatt zu, sondern spreche lediglich eine Variable im
> Makro an.
Wenn Du auf die Bereichsnamen im Tabellenblatt zurückgreifen willst,
musst du dies über die Names-Auflistung tun.
Im Prinzip sind diese Namen nicht dazu gedacht einen Variablenwert
anzunehmen, sondern einen Tabellenbereich (Range) zu benennen.
Aber was Du hier ansprichst kannst Du folgendermassen tun:
Namen definieren --> Wert1 = 1
In VBA:
Public Sub Test()
MsgBox Names("Wert2")
End Sub
--
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
---"Jörg Walter" <joerg....@gmx.de> schrieb im Newsbeitrag
news:adk8qt$11m30c$1...@ID-66169.news.dfncis.de...
> Ich glaube das ist nicht ganz richtig. Wenn ich in Excel (also nicht im
> VBA-Editor) über Einfüfen -> Name -> Definieren... einen Name wie folgt
> festlege: 'Tabelle1'!Variablenname und ihm dann z.B. den Wert = 1
> zuordne, dann ist diese Variable nur in diesem einen Arbeitsblatt
> Tabelle1 gültig.
>
> Mit diesem Makro greife ich doch aber nicht auf eine definierte
> Variable im Arbeitsblatt zu, sondern spreche lediglich eine Variable im
> Makro an.
Du sprichst von einer "benannten Formel" (im Gegensatz zu einem
Bereichsnamen).
Für die MitleserInnen ein kleines Beispiel:
- Einfügen / Name(n) / Definieren (bzw. in älteren Excel-Versionen:
Festlegen)
- Namen in der Arbeitsmappe - z. B.: USD
- Bezieht sich auf: =0,9405 (entspricht dem Dollarkurs)
Eine Verwendung der "benannten Formel" kann dann anschließend in der
Arbeitsmappe z. B. wie folgt aussehen:
=100/USD
' ergibt 106,326422115896
An Jörg: Der Begriff "Variable" hat hier scheinbar eher verwirrt. (Obwohl es
technisch eine ist.)
Anyway, zu deiner Frage:
Da du hier keinen Bereichsnamen (d. h. einen Namen, der sich auf einen
Bereich bezieht) definiert hast, ist die Anweisung
Range("Variablenname").Value zum Scheitern verurteilt. Schließlich gibt es
ja auch keinen Zellbereich, der diesen Namen trägt.
Die einzigen beiden Möglichkeiten, hier zum Wert dieses "Namens" zu
gelangen, sind daher folgende:
(1) Direkt über die RefersTo- bzw. RefersToLocal-Eigenschaft des
Name-Objekts:
Dabei musst du jedoch beachten, dass du eine Zeichenkette (String) erhältst:
MsgBox ActiveWorkbook.Names("Variablenname").RefersTo
' ergibt: "=0.9405"
bzw.:
MsgBox ActiveWorkbook.Names("Variablenname").RefersToLocal
' ergibt: "=0,9405"
Dementsprechend gilt es zunächst, das führende "=" zu entfernen:
MsgBox Mid(ActiveWorkbook.Names("Variablenname").RefersToLocal, 2)
Schließlich solltest Du auch noch dafür sorgen, dass eine Zahl übergeben
wird:
MsgBox CDbl(Mid(ActiveWorkbook.Names("Variablenname").RefersToLocal, 2))
(2) Indirekt über eine Zelle.
Wenn obiges nicht funktioniert oder zu komplex wird, kannst du den Namen
vorübergehend in eine leere Zelle eintragen und anschließend wie gewohnt
auslesen:
With ActiveSheet.Range("A1")
.Formula = "=Variablenname"
MsgBox .Value
.ClearContents
End With
--
In der Hoffnung geholfen zu haben, verbleibe ich mit einem leisen
Servus aus Wien,
-Robert Gelbmann-
---
MS MVP für Excel
EML: rgel...@mvps.org
Excel-FAQ's: http://www.roehrenbacher.at/erc/faq/
vielen Dank für Eure schnelle Hilfe.
Das mit dem Name-Objekt kannte i´ch noch nicht. Damit ist das Problem
aber gelöst.
Danke an alle.
Gruss
Jörg
Benenne einfach einmal eine Zelle mit dem Namen "Test" und schreibe in diese
Zelle irgendeinen Text oder Wert. Dann lass noch einmal das Makro laufen.
Definieren musst Du deshalb den Namen mit zum Beispiel Tabelle1!$A$1, da es
ja auch in allen anderen Tabellen die Zelle A1 gibt.
Zum Test kannst Du ja mal in einer anderen Tabelle folgende Miniformel
eingeben:
=Test
Du wirst auch hier den Zellinhalt sehen.
Die Sonderform des Namens Tabelle1!Name kannte ich bisher in der Form nicht
:-(
Aber man lernt ja nie aus. Ist nur eine Beschränkung auf ein bestimmtes
Tabellenblatt.
Ansprechen kannst Du sie so, auch wenn ein anderes gerade aktiv ist:
Sub Namen_auslesen2()
MsgBox [Tabelle1!Test2]
End Sub
Gruß
Berti
--
***********************************************************
Email: mailto:be...@excelabc.de
Homepage: http://www.Excelabc.de/index.htm
Tipps & Tricks & Makros rund um Excel
***********************************************************
"Jörg Walter" <joerg....@gmx.de> schrieb im Newsbeitrag
news:adk8qt$11m30c$1...@ID-66169.news.dfncis.de...