Wo ist Rudi?
23.05.2015 18:55:51
Michael
Hallo Pan,
im Prinzip habe ich zwei Lösungsansätze (gefunden), nämlich:
http://www.excel-ticker.de/excel-bezuge-zu-externen-dateien-dynamisch-aufbauen/
und
https://www.herber.de/forum/archiv/1212to1216/t1213837.htm
Die Formeln im ersten Fall sind ganz nett, funktionieren aber nur, wenn die jeweilige Datei *geöffnet* ist.
Der zweite Fall ist eine VBA-Lösung von Rudi M.
Ich habe mir gedacht, wie wäre es mit einer UDF, die die Sachen aus der anderen Datei holt?
Also habe ich Rudis Beispiel abgespeckt, so daß es so aussieht:
Option Explicit
Public Function holen(strPath As String, strFile As String, _
strBlatt As String, strData As String, selector As Integer) As Variant
Dim strFormel As String, strTest
strFormel = "'" & strPath & "[" & strFile & "]" & strBlatt & "'!" & strData
If selector = 1 Then
holen = ExecuteExcel4Macro(strFormel)
Else
holen = strFormel
End If
End Function
Sub holen_aufrufen()
MsgBox holen(ThisWorkbook.Path & "\", Range("B3").Value, "Frühstück", "R6C7", 2)
MsgBox holen(ThisWorkbook.Path & "\", Range("B3").Value, "Frühstück", "R6C7", 1)
End Sub
Public Function pfad() As String
pfad = ThisWorkbook.Path & "\"
End Function
Die function pfad ist zum Bestimmen des Pfades im Dateinamen, die habe ich nur eingefügt, um mir Formelfummelei zu ersparen, die Beispieldatei aber so allgemein wie möglich zu halten.
Den "Selector" in "holen" habe ich angebracht, weil es nicht so tut, wie es soll, und ich den Fehler nicht finde: wenn = 1, wird ex4m aufgerufen, ansonsten werden einfach die zusammengesetzten Parameter ausgegeben.
Die Funktion funzt super, wenn man sie mit holen_aufrufen aufruft, aber im Tabellenblatt leider nur mit selector=2.
Ich bin leicht vernagelt! Weil ich aus dem Haus muß, lade ich ausnahmsweise eine nicht funktionsfähige Sache hoch, die zumindest als Denkanstoß tun sollte: https://www.herber.de/bbs/user/97799.xlsm
In der hochgeladenen Datei habe ich in B3 die Formel angebracht, die den Dateinamen erzeugt:
=JAHR(B5)&"_"&TEXT(MONAT(B5);"00")&"_"&TEXT(TAG(B5);"00")&", "&B6&".xlsm"
In B16 und B17 rufe ich "holen" auf, einmal mit Selector=1 und einmal mit =2. Der Zellbezug steht in RC-Schreibweise (so war es bei Rudis Beispiel), wobei r6c7 die Zelle G6 anspricht, wo ich in einer schnell erzeugten Datei eine 5 eingegeben habe.
"Montagsdatei": https://www.herber.de/bbs/user/97798.xlsm
Die Datei heißt im Original "2015_06_01, Montag.xlsm" und sollte zum Testen nach dem Runterladen auf diesen Namen umbenannt (und ins gleiche Verzeichnis gesteckt) werden.
Abgesehen davon wird immer ganz anders bei Dateinamen mit "," und Leerzeichen, aber gut, es funzt ja, wenn man holen von einer sub aus aufruft. (siehste, sogar Herrn Herbers upload-Funktion zickt mit Leerzeichen)
So, ich bin gespannt, wie die Geschichte ausgeht.
Schöne Grüße,
Michael
P.S.: Du sprichst sowieso immer nur eine Zelle an (z.B. J14), also kannst Du Dir die Summe sparen.
Ob die UDF-Lösung insgesamt sinnvoll ist? Ich bin etwas unsicher - die Dinger werden bei jeder Änderung irgendeiner Zelle der Reihe nach aufgerufen.
Vielleicht ist eine reine VBA-Lösung im Stil von Rudis Vorschlag besser, die auf "Knopfdruck" alle Werte aktualisiert und als Werte in die Zellen schreibt.
Insgesamt würde ich vielleicht die Konzeption von dat janze überdenken und mir mal ernsthaft die Theorie von Datenbanken ansehen...