Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1284to1288
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

Workbook von Range ableiten ohne Aktivierung

Workbook von Range ableiten ohne Aktivierung
03.11.2012 23:17:21
Range
Guten Abend
In meinem Workbook ist in einer Tabelle ein benannter Bereich "Datenbank". Nun möchte ich den Tabellennamen, in welchem dieser Bereich vorkommt der Variable Wsh_Orig zuweisen.
Das klappt, so lange diese Datei aktiv ist. Ich möchte jedoch, dass es auch klappt, wenn die Datei nicht aktiv ist.
Dann müsste ich definieren, in welcher Arbeitsmappe der Range "Datenbank" zu finden ist. Naheliegend wäre eigentlich das über ThisWorkbook zu spezifizieren, doch das klappt nicht.
Kann mir jemand die Lösung sagen (falls es eine gibt :-) ?
Danke, Peter
Sub MappeX
Dim Wbk As Excel.Workbook, Wsh_Orig As Excel.Worksheet, Wsh_Journal As Excel.Worksheet
Set Wbk = ThisWorkbook
Set Wsh_Orig = Wbk.Worksheets(Range("Datenbank".Parent.Name)
End Sub

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

Betreff
Datum
Anwender
Anzeige
Abgesehen davon, dass schon die ...
04.11.2012 00:24:45
Luc:-?
…Zuweisung an Wsh_Orig so nicht fktionieren kann, Peter,
wieso ist die Verwendung von ThisWorkbook naheliegend? Das war es ja wohl schon beim letzten Problem nicht. ;->
ThisWorkbook bezieht sich, wie schon diese Bezeichnung sagt, stets auf die Datei, in der auch das diesen Bezeichner enthaltende Pgm zu finden ist. Das ist solange fktionabel, wie dieses Pgm aktiv ist. Somit bräuchte man dann auch keine Variable Wbk.
Wahrscheinl hast du bei der Wiedergabe der Set-Anweisung für Wsh_Orig nur eine Klammer vergessen (deshalb meine anfängl Bemerkung), aber Set Wsh_Orig = Range("Datenbank").Parent würde auch reichen.
Wenn das Pgm läuft, ist auch die Datei aktiv, in der es steht. Es muss aber nicht unbedingt auch das Blatt aktiv sein, in der dieser Bereich zu finden ist. Aber du wirst doch wohl wissen, welches das ist, also kannst du diese Blattreferenz direkt festlegen!? Falls der Bereich aber erst gesucht wdn muss, weil sich die Blattnamen, -anzahl und -reihenfolge ändern können bzw der Bereich geändert wdn kann, wird's etwas komplizierter. Ist dann auch davon abhängig, ob der Name für die ganze Mappe gilt oder nur für das Blatt. Über diesen Namen ist dann auch die Lösung mögl, denn sein Value bzw RefersTo enthält den Blattnamen.
Aber wieso benötigst du den Blattnamen, für andere Aufgaben? Zum Aufruf dieses Bereichs ist der nämlich nicht nötig.
Gruß + schöSo, Luc :-?

Anzeige
AW: Workbook von Range ableiten ohne Aktivierung
04.11.2012 00:28:54
Range
Hallo Peter,
bin kein Profi was VBA anbelangt, aber ohne die Mappe zu öffnen wird das nicht einfach werden.
Du kannst ja die Mappe öffenen und mit ( Application.ScreenUpdating = False ) diese im Hintergrund arbeiten lassen. Eventuell bei Workbooks.Open noch mit dem zusätzlichen Parameter ReadOnly:=True verwenden.(im Falle es will Jemand was ändern , ein kleiner Schutz)
Anschließend wieder ( Application.ScreenUpdating = True ) setzen.
Es gibt auch noch GetObject ,schau es Dir auch mal in der Hilfe an.
Matze

AW: Workbook von Range ableiten ohne Aktivierung
04.11.2012 09:30:30
Range
Hallo,
hier mal eine Variante wie ich es verstanden habe.
Die Datei wo der Bereich definiert ist,
muss sich für dieses Beispiel in der selben Application befinden.
Sub Beispiel()
Dim Wsh_Orig As Worksheet, rngBereich As Range, tmpWB As Workbook
On Error Resume Next
For Each tmpWB In Workbooks
If tmpWB.Name  ThisWorkbook.Name Then
Set Wsh_Orig = Evaluate(tmpWB.Names("Datenbank").RefersTo).Parent
If Not Wsh_Orig Is Nothing Then Exit For
End If
Next tmpWB
On Error GoTo 0
If Not Wsh_Orig Is Nothing Then
MsgBox Wsh_Orig.Parent.Name & vbCr & Wsh_Orig.Name
End If
End Sub
Gruß Tino

Anzeige
@Tino ... funzt nicht, deshalb Nachfrage ...
04.11.2012 10:08:36
Matthias
Hallo Tino
Ich hatte die Frage so verstanden:
Suche in allen Mappen (der gleichen Application) nach dem definierten Namen
und gib den Namen der Mappe aus.
Habe mal versucht(da es mich interessiert) das nachzustellen.
Der Code funktioniert (bei mir) nur solange ich mich in der Mappe befinde in der auch der Name("Datenbank") definiert ist.
Ich habe den Code in einer anderen Mappe in der gleichen Application.
Wenn ich also von da aus den Code starte (also von ThisWorkbook[ohne definierte Namen] ) bekomme ich
obwohl beide Mappen offen sind, keine MsgBox.
Mache ich was falsch?
hab nur bis XL2007
Gruß Matthias

Anzeige
hier meine Testdateien...
04.11.2012 10:44:00
Tino
Hallo,
hier meine Dateien mit denen ich getestet habe.
In der Datei MitName.xls ist der Bereich Datenbank definiert.
In der Datei Mappe1.xls ist der Code.
https://www.herber.de/bbs/user/82469.zip
Gruß Tino

hab Deine Bspdateien (.zip) getestet ...
04.11.2012 11:01:23
Matthias
Hallo Tino
Hab Deine .Zip entpackt und getestet, klappt.
Mein Aufbau ist genau wie Deine beiden Dateien.
Warum funzte denn mein Nachbau nicht?
Kann es sein weil ich die Dateien als .xlsm gespeichert habe?
Gruß Matthias

AW: hab Deine Bspdateien (.zip) getestet ...
04.11.2012 11:19:20
Tino
Hallo,
kann ich so nicht sagen, habe die Dateien mal als xlsm und xlsx aufgebaut.
Die xlsm ist die mit dem Makro. ;-)
Eine Änderung habe ich noch hinzugefügt,
habe diesmal den Bereich mit einer Formel Variabel definiert und
für die Rückgabe ein Rangeobjekt verwendet.
https://www.herber.de/bbs/user/82470.zip
Evtl. kannst Du Deine Datein hochladen, vielleicht findet sich der unterschied.
Gruß Tino

Anzeige
thx . Ich warte erst Mal auf Perters Reaktion kwT
04.11.2012 14:32:41
Matthias

AW: Workbook von Range ableiten ohne Aktivierung
04.11.2012 09:59:19
Range
Hi Peter,
vielleicht so:
Sub NamensBereich()
Dim Wsh_Orig As Worksheet
Set Wsh_Orig = Evaluate(ThisWorkbook.Names("Datenbank").RefersTo).Parent
MsgBox Wsh_Orig.Name
End Sub


klappt bei mir leider nicht, Nachfrage!
04.11.2012 10:23:58
Matthias
Hallo Karin
Hatte gerade den Code von Tino getestet (leider (bei mir) ohne Erfolg)
Jetzt warst auch Du aktiv und ich habe auch Deinen Code getestet (leider (bei mir) auch ohne Erfolg)
Ich habe den Code in der einen Mappe und den definierten Namen in einer anderen Mappe(gl. Session)) beide Dateien offen.
Die erste Mappe (die ohne def. Namen aber mit dem Code) ist aktiv und ich starte das Makro.
Nun sollte doch mE der WorkBookName der Mappe zurückgegeben werden in dessen Sheets der def. Name vorhanden ist.
Was mache ich falsch, oder hab ich etwas falsch verstanden?
Liegts evtl. an meiner XL-Version (hab nur bis XL2007)
Gruß Matthias

Anzeige
AW: klappt bei mir leider nicht, Nachfrage!
04.11.2012 12:51:01
Beverly
Hi Matthias,
beim Fragesteller befindet sich der definierte Name in der Arbeitsmappe mit dem Code und nicht wie bei dir in der anderen, deshalb Bezug ThisWorkbook.Names. In deinem Fall würde es so gehen:
Sub NamePruefen()
Dim wbkMappe As Workbook
Dim namName As Name
Dim blnGefunden As Boolean
For Each wbkMappe In Workbooks
For Each namName In wbkMappe.Names
If namName.NameLocal = "Datenbank" Then
blnGefunden = True
Exit For
End If
Next namName
If blnGefunden Then Exit For
Next wbkMappe
MsgBox Evaluate(namName.RefersTo).Parent.Name
End Sub


Anzeige
ok ... ich warte mal ab
04.11.2012 14:30:26
Matthias
Hallo
Ich warte mal die Reaktion von Peter ab.
Evtl. habe ich das alles falsch verstanden.
Danke Karin
Gruß Matthias

AW: Workbook von Range ableiten ohne Aktivierung
04.11.2012 21:06:21
Range
Hallo zusammen
Vielen Dank für die verschiedenen Antworten und Anregungen.
Mein Problem war, dass ich auf meinem Bildschirm einerseits ein Excel-Fenster habe und andererseits das VBA-Fenster auch sichtbar ist. So kann es vorkommen, dass der Code, welchen ich im VBA-Fenster ablaufen lasse, sich nicht auf die Datei bezieht, die gerade sichtbar ist.
Da ich vielfach mehrere Dateien gleichzeitig offen habe, versuche ich meine Codes so zu schreiben, dass diese funktionieren, unabhängig davon, welche Excel Datei aktiv ist und welches Worksheet ausgewählt ist.
"RefersToRange" hat mich auf die funktionierende Lösung gebracht und die funktioniert nun so:
Sub MappeX()
Dim Wbk As Excel.Workbook, Wsh_Orig As Excel.Worksheet
Set Wbk = ThisWorkbook
With Wbk
Set Wsh_Orig = .Names("Datenbank").RefersToRange.Parent
End With
End Sub
Gruss, Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige