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

Verlinkung auf Datei mit flexibelen Dateinamen

Verlinkung auf Datei mit flexibelen Dateinamen
07.05.2019 14:10:26
Matthias
Hallo zusammen,
ich möchte mittels der Index-Vergleich-Kombination, Daten aus einer anderen Excel-Datei abrufen. Soweit klappt das wunderbar.
Das Problem ist nun, dass sich bei dem Dateinamen der vordere Teil (Datum) ändert.
Ich habe nun eine Formel gebastelt, welche mir den richtigen Dateinamen als Hyperlink ausgibt. Auch das klappt wunderbar.
Nun möchte ich diesen Link bzw. Dateinamen in der Index-Vergleich-Kombination benutzen. Das widerum klappt leider gar nicht.
Hat jemand eine Idee wie ich das lösen kann?
Folgend beispielhaft eine Datei, aus welcher ersichtlich wird wie ich den Hyperlink erstelle und wie ich diese im "Index"-Teil benutzen möchte.
https://www.herber.de/bbs/user/129641.xlsx
Vielen Dank im Voraus für eure Ideen!
Gruß Matthias

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: standardmäßig so nicht möglich ...
07.05.2019 19:11:09
neopa
Hallo Matthias,
... weil dazu die Funktion INDIREKT() notwendig wäre, diese aber wiederum voraussetzt, dass die auszuwertenden Datei bereits geöffnet sein muss.
Hier hilft entweder nur eine zusätzliches spez. Add-In oder eine VBA-Lösung oder evtl. auch eine PowerQuery (PQ)-Lösung. Aus VBA-Lösungen halte ich mich grundsätzlich heraus und ob und wie es mit PQ-Lösung funktioniert, kann ich Dir momentan leider auch nicht schreiben. Ich stell den thread deswegen auch wieder offen.
Gruß Werner
.. , - ...
Dabei stellen sich einige Fragen, ...
08.05.2019 03:15:59
Luc:-?
…Matthias,
nämlich zuvörderst die, ob du tatsächlich einen HyperLink auf eine Zelle einer geschlossenen Datei erzeugen oder doch eher, wie du anfänglich schreibst, Daten abrufen willst‽ Denn einen HLink erstellst du ja nicht wirklich (in D4 steht gar nichts!). Außerdem ist die resultierende Fml grob fehlerhaft (s. 3.)…
1. Der erstellte Text ist kein HLink, nur der AufrufText eines solchen, und erst recht kein Text für einen gültigen DatenAbruf, was man leicht feststellen kann. Nur ersterer sieht so aus wie bei dir, letzterer aber so:
'P:\Daten\[2019_04_30_Dashboard.xlsm]Blatt1'!$A$873:$M$873
2. Mit einem HLink wdn normalerweise keine Daten abgerufen, sondern die ZielDatei wird ggf geöffnet und die ZielZelle ausgewählt. Damit kann man anscheinend kein datei-externes Ziel der Xl-Fkt HYPERLINK (mit ihrem 2.Argument) wertmäßig abrufen, nur ein datei-internes. Das könnte in der Fktsbeschreibung missverständlich sein. Die ZielAdresse eines echten HLinks sähe aber auch so aus:
P:\Daten\2019_04_30_Dashboard.xlsm#Blatt1!$A$873:$M$873
Diese TextForm kann alternativ auch als 1.Argument der Xl-Fkt HYPERLINK verwendet wdn.
3. Von einem VERGLEICH eines echten Datums mit vollständigen HLink-AdressTexten kannst du als Xl-Guter doch wohl nichts Sinnvolles erwartet haben! Das ist schlimmer als der berühmt-berüchtigte Äpfel-Birnen-Vgl! Das kann nur fktionieren, wenn man das (echte!) Vgls­datum letztlich auch so darstellt wie im DateiNamen. Und dann darf man natürlich nur den relevanten Teil des Datums zum Vgl mit den ZielAdressen verwenden: INDEX(D4:D5;VERGLEICH(TEXT(C7;"\*JJJJ\_MM\_\*");D4:D5;0))
(TEXT ergäbe dann *2019_04_*.)
4. Wenn die Fml unter 3. als Argument der Xl-Fkt HYPERLINK verwendet wird, entstünde so ein fktionierender Fml-HLink, allerdings kein echter, der ein spezifisches Worksheet-Ereignis auslösen würde, das man per VBA nutzen könnte. Derartige Pgmm wären deshalb deut­lich aufwendiger. Aber es gibt eine Alternative, die einen echten Verweis in eine Zelle einträgt, den man (in deinem Fall nach Auswahl eines entsprd großen, quellgleich orientierten Bereichs als plurale MatrixFml) anklicken kann, um die Daten zu übernehmen. Dazu muss folgende Fml in eine beliebige freie Zelle (außerhalb des auszuwählenden Bereichs!) eingetragen wdn:
=WENN(B9="";SendTo(B9;INDEX(D4:D5;VERGLEICH(TEXT(C7;"\*JJJJ\_MM\_\*");D4:D5;0))))
Die ZielAdressen müssen dann aber so wie der letztere Text unter 1., wobei dort noch ein führendes = hinzugefügt wdn sollte (bzw kann). SendTo ist eine VBA-basierte UDF, die aus einer spezifischen Eigenschaft der Xl-Fkt HYPERLINK abgeleitet wurde, diese Fkt aber nicht benutzt, dafür aber die eigene SubProzedur Sent. Sie transportiert die ausgewählte Adresse in die Zelle B9, falls diese leer ist, und zeigt selbst den Erfolg mit WAHR an (anderen­falls FALSCH). Man sollte diese Möglichkeit aber nur in wenigen Fällen nutzen, keines­falls für Massen-DV (oder im Zusammenhang mit BedingtFormatierung)!
ArchivLink zu den für 4. benötigten VBA-Pgmm:
SendTo & Sent https://www.herber.de/cgi-bin/callthread.pl?index=1538844#1539048
Morhn, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
Hab's geahnt, keine Reaktion! :-| owT
08.05.2019 19:14:28
Luc:-?
:-?
Update
08.05.2019 20:37:58
Matthias
Hallo,
zunächst mal vielen Dank @Werner & @Luc :-? für die Antworten.
@ Luc :-?
nämlich zuvörderst die, ob du tatsächlich einen HyperLink auf eine Zelle einer geschlossenen Datei erzeugen oder doch eher, wie du anfänglich schreibst, Daten abrufen willst‽
ich möchte Daten abrufen, den Hyperlink habe ich in der Index-Vergleich-Kombination nicht benutzt, sondern einfach anstatt den Pfad manuell einzugeben (was funktioniert), auf die Zelle mit dem Pfad verwiesen.
Der Hyperlink war nur für mich zum testen, ob es generell den Dateinamen korrekt generiert.
Das kann nur fktionieren, wenn man das (echte!) Vgls­datum letztlich auch so darstellt wie im DateiNamen. Und dann darf man natürlich nur den relevanten Teil des Datums zum Vgl mit den ZielAdressen verwenden: INDEX(D4:D5;VERGLEICH(TEXT(C7;"\*JJJJ\_MM\_\*");D4:D5;0))
(TEXT ergäbe dann *2019_04_*.)

ich versteh leider nicht wirklich was du damit meinst...meine Datei hieß am 30.04. genau so wie sie ausgegeben wird: "2019_04_30_Dashboard.xlsm"
zum vierten Punkt
ich verstehe deinen Post jetzt so, dass es sich nicht ohne VBA lösen lässt. Ich versuche das nun entsprechend zu lösen und geben noch mal eine Rückmeldung, wenn ich es gelöst oder nicht gelöst bekomme.
Anzeige
AW: Soweit klar - Erläuterungen
08.05.2019 23:49:05
Luc:-?
Pktt 1+2 sind also klar, Matthias,
nur nutzt dir dieser TextAufbau nichts, wenn du Daten aus einer externen geschlossenen Mappe abrufen willst, nur zum Öffnen der­sel­ben nebst Auswahl des SprungZiels, also für einen HLink!
Pkt 3 bezieht sich einerseits darauf, dass du ein Datum in C7 angegeben hast, das nicht zum Dateinamen passt. Folglich kann auch nichts in der hypothetischen Liste von DateiNamen gefunden wdn, denn von einer solchen bin ich ausgegangen, weil du INDEX und VERGLEICH benutzt hattest. War das aber nur ein untauglicher Versuch, mit deinem HLink-Adresstext zu arbeiten und es geht in Wirk­lich­keit nur um die direkte Erzeugung eines DateiNamenstextes, nicht um Auswahl aus einer Liste gültiger DateiNamen, wäre norma­ler­weise die Xl-Fkt INDIREKT anzuwenden, die aber die gleiche TextForm wie ein FernBezug benötigte, keinen HL-AdressText! Aber INDIREKT kann keine Daten aus geschlossenen Mappen lesen, genausowenig wie das mit der alten XLM-Fkt AUSWERTEN per benannter Fml (mit definiertem Namen und dessen Einsatz in einer ZellFml) oder der vbMethode/-Fkt Evaluate möglich ist. (Dazu nachfolgend mehr.)
Dein Problem lässt sich zwar auch klassisch mit VBA lösen, aber idR nicht ohne die QuellMappe (ggf verborgen) zu öffnen (ist dann aber doch im VBE zu sehen). Die einzige Methode, das zu vermeiden, ist ein direkter regulärer FernBezug. Meine SubProzeduren transpor­tie­ren einen fertigen FernBezugstext aus der Zelle, in der er erzeugt wurde, in eine ZielZelle. Diese muss dann noch angeklickt wdn, um die Daten aus der QuellDatei zu holen, was bei dir einer pluralen MatrixFml entspräche, da es ja um mehrere Werte geht, die auf einmal geholt wdn sollen. Also muss auch der dafür ausreichende Bereich vor dem Klick ausgewählt worden sein. Durch [Strg]+[Umsch] und [Enter] wird die Bezugsfml auf den gesamten ausgewählten Bereich übertragen und damit dann die Daten geholt und entsprd ihrer Quelle positioniert.
Sollen neue Daten einer anderen (aktuelleren) Datei geholt wdn, müssen der Bezugstext geändert und die alten Daten gelöscht wdn. Sobald die Daten gelöscht wurden, wdn neue geholt.
Wenn der Bezugstext also aus keiner Liste ausgewählt wdn soll, können die Zellen mit der TextBildung und die mit der TransportFml auch nebeneinander, ggf verborgen, angeordnet wdn, also auch so:
D4:=WENN(B9="";SendTo(B9;E4))
E4:="='P:\Daten\["&$A4&"_"&$B4&"_"&$C4&"_"&"Dashboard.xlsm]Blatt1'!$A$873:$M$873"
Die Alternative, ganz ohne VBA, wäre, die Zelle mit dem gebildeten Bezugstext zu kopieren und nur ihren Inhalt an gewünschter Stelle, quasi als Bezugsfml, einzufügen. Das kann man aber alles auch per VBA in einem Rutsch machen (nicht-klassische Fml-Eintragslösung per VBA), den nötigen Bereich auswählen und den BezugsfmlText als .FormulaArray dieses Bereichs eintragen. Falls der Bereich nicht leer ist, könnte am Anfang dieses Pgms auch erst mal dieser Bereich gelöscht wdn, bevor der neue Bezugstext zusammengesetzt und übertragen wird. Das wäre dann eine KomplettLösung, die auf KnopfDruck oder automatisch bei Änderung der Datumsangaben erfolgen könnte.
Ansonsten konnte man hieran wieder mal sehen, dass auch ein Übungsblatt Verwirrung stiften kann, weil man dann nicht weiß, was wirklich vorliegt und was wie passieren soll. Die Bemerkungen auf dem BspBlatt boten hier keine Hilfe, sondern konnten eher verwirren. Schreib das nächste mal auf, was du hast und was du machen willst und ggf noch einen Lösungsansatz. Das wäre sinnvoller.
Luc :-?
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige