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

getvalue = ExecuteExcel4Macro(arg) als UDF

getvalue = ExecuteExcel4Macro(arg) als UDF
Peter
Guten Tag
Mit nachfolgender Function will ich aus einer Tabelle einer anderen Datei einen Wert abfragen.
Im Zielfile habe ich die notwendigen Parameter abgelegt (Zellen U47, U48, U49, U50):
G:\TEAM ABC
999999ABC.xls
A
F15
Im Feld, in welchem das Ergebnis stehen soll, steht:
=getvalue(U47;U48;U49;U50)
Ich habe die Tabellen nicht fest verlinkt, da es sich um ein Template handelt und die Einträge in den Zellen U47-U50 das Ergebnis von Abfragen sind, welche ändern können.
Die Funktion läuft schon durch bis ans Ende, die Werte werden ordentlich übergeben, doch als Ergebnis gibt getvalue #WERT aus.
Was mache ich falsch?
Gruss, Peter
Public Function getvalue(path, File, sheet, ref)
'retrieves a value from a closed workbook
Dim arg As String
'make sure the file exists
If Right(path, 1)  "\" Then path = path & "\"
If Dir(path & File) = "" Then
getvalue = "File not found"
Exit Function
End If
'create the argument
arg = "'" & path & "[" & File & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
'execute an xlm macro
getvalue = ExecuteExcel4Macro(arg)
End Function

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Range(ref).Range("A1")... kommt mir doch...
04.11.2010 16:16:05
Luc:-?
…recht merkwürdig vor, Peter!
Was kommt denn dabei bei dir für 'ne Adresse raus?
Gruß Luc :-?
AW: Range(ref).Range("A1")... kommt mir doch...
04.11.2010 16:19:36
Peter
Hallo Luc
Nach dem Durchlaufen erhält die Variable arg den String
'G:\TEAM ABC\[999999ABC.xls]A'!R15C6
Gruss, Peter
Und in F15 von Tabelle A d.Datei 999999ABC.xls...
04.11.2010 16:49:04
Tabelle
…steht auch tatsächlich ein Wert und kein F-Wert, Peter?
Luc :-?
AW: ja!
04.11.2010 16:50:44
Peter
Gruss, Peter
AW: ja!
04.11.2010 17:31:17
Ralf_P
Hallo Peter,
hab das zum testen mal ein bisschen angepasst.

Sub test()
Range("A1").Value = getvalue(Range("B1").Value, Range("B2").Value, Range("B3").Value, Range("B4" _
).Value)
End Sub


Public Function getvalue(path As String, File As String, sheet As String, ref As String)
'retrieves a value from a closed workbook
Dim arg As String
'make sure the file exists
If Right(path, 1)  "\" Then path = path & "\"
If Dir(path & File) = "" Then
getvalue = "File not found"
Exit Function
End If
'create the argument
arg = "'" & path & "[" & File & "]" & sheet & "'!" & _
Range(ref).Address(, , xlR1C1)
'execute an xlm macro
getvalue = ExecuteExcel4Macro(arg)
End Function

Was soll ich sagen? - geht einwandfrei
Die von Dir gewünschte Funktion (also bei meiner Variante in Zelle A1 =getvalue(B1;B2;B3;B4) reinschreiben) geht nicht.
Ergebnis #NAME?
Gruß Ralf
Anzeige
AW: ja!
04.11.2010 17:35:09
Peter
Hallo Ralf
Danke! Das scheint aber auch zu heissen, dass man getvalue nicht direkt in einerr Excel Tabelle als Funktion vewenden kann. Vielleicht hat noch jemand anders eine Idee, deshalb lasse ich die Frage noch offen - denn zwischendurch wäre es schon auch praktisch ...
Gruss, Peter
Ach ja, glaube mich dunkel zu erinnern,...
04.11.2010 20:56:11
Luc:-?
…dass dem so ist, Peter & Ralf,
denn diese udFkt kenne ich und setze sie aus diesem Grund nur in Subroutinen ein. Zwar habe ich auch eine udFkt für den Zugriff auf geschlossene Dateien, die u.a. auch mit GetValue arbeitet, aber das nicht direkt, sondern über eine durch ihre Tätigkeit ausgelöste Ereignisprozedur. Ansonsten könnte man auch auf die XLM-Fkt verzichten, denn deren Einbindung in XlVss ab 5 ist für dieses Verhalten verantwortlich, aber dann wird die geschlossene Datei auf jeden Fall im Hintergrund geöffnet. Anders geht das nur unter VBA nicht.
Ich nehme an, du hast diesen Weg gewählt (deutest ja so etwas an), um den Fernzugriff dynamisieren zu können — geht ja bekanntlich mit INDIREKT nicht für geschlossene (bzw gleichzeitig für mehrere) Dateien. Wenn der Dateipfad/-name/Blattname völlig frei wählbar sein soll, sehe ich keinen Weg. Ansonsten wäre evtl eine Auswahl unter mehreren vorgegebenen klassischen Fernbezügen mittels WAHL oder WENN mögl. Alternativ könntest du versuchen, GetValue in einer benannten Fml einzusetzen, d.h., Namen vergeben und in die Bezugszeile die komplett argumentierte Fkt schreiben. Im TabBlatt muss dann nur dieser Name angewendet wdn. Könnte ggf fktn, weil man das auch bei anderen XLM-Fktt so machen muss.
Gruß Luc :-?
Anzeige
AW: Ach ja, glaube mich dunkel zu erinnern,...
04.11.2010 21:05:53
Peter
Hallo Luc
Vielen Dank. Soeben habe ich wieder einen Beitrag gepostet, aus dem ersichtlich ist, dass ich nun den anderen Weg bestritten habe. Es ist schon so, dass ich im konkreten Fall Dateipfad/-name/Blattname nicht voraussehen kann; Quell- und Zieldatei sind nur ein Ordner weit "entfernt" und so kann ich den zutreffenden Code immer abfragen.
Danke und Gruss, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige