HERBERS Excel-Forum - das Archiv
indirekt
gerd

Ich habe mit Indirekt Adressen in einem externen workbook angesprochen, wenn das workbook nicht offen ist kommt die Fehlermeldung #Bezug, kann man das lösen, ohne das wb zu öffnen. Grüße Gerd

AW: indirekt
Hajo_Zi

Hallo Gerd,
NEIN. Nicht mit INDIREKT()

geht nur wenn offen...
Tino

Hallo,
indirekte Bereichsverweise auf andere Dateien wie (Indirekt oder Bereich.Verschieben)
funktionieren nur wenn die Datei geöffnet ist, bei geschlossener Datei funktionieren nur die direkten Bezüge.
Sonst müsstest Du mit VBA an die Sache gehen.
Gruß Tino
hier eine VBA Version mit Function...
Tino

Hallo,
hier mal was mit VBA.
In eine Modul kommt dieser Code
Private Declare Function SetTimer Lib "user32" (ByVal hWnd As _
Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
 
Private Declare Function KillTimer Lib "user32" (ByVal hWnd As _
Long, ByVal nIDEvent As Long) As Long

Public varErgebnis As Variant, BerechneZelle As Range, strSubZiel$
Public hTimer As Long

Function IndirekterVerweis(strZiel$, rngAktBezug As Range)

If IsEmpty(varErgebnis) Then
 Set BerechneZelle = rngAktBezug
 strSubZiel = strZiel
 hTimer = SetTimer(0, 0, 10, AddressOf LeseWert)
 Exit Function
End If

IndirekterVerweis = varErgebnis
End Function

Sub LeseWert()
KillTimer 0, hTimer
varErgebnis = ExecuteExcel4Macro(strSubZiel)
BerechneZelle.FormulaLocal = BerechneZelle.FormulaLocal
Set BerechneZelle = Nothing
varErgebnis = Empty
strSubZiel = ""
End Sub
In eine Zelle schreibst Du diese Formel.
 A
1rot, grün, blau

Formeln der Tabelle
ZelleFormel
A1=IndirekterVerweis("'E:\1 Forum\[TestMehr.xls]Tabelle1'!R3C2";A1)

Erster Parameter ist die Indirekte Adresse zu der Datei (beachte R1C1 Schreibweise)
der zweite Wert ist die Zelle in der sich die Formel befindet.
Bei VBA Gut solltest Du aber schnell den Durchblick haben.
Gruß Tino
für A1 Schreibweise...
Tino

Hallo,
wenn Du die Sub LeseWerte durch diese ersetzt,
Sub LeseWert()
Dim sZelle$
KillTimer 0, hTimer

'R1C1 Bezug erstellen 
sZelle = Right$(strSubZiel, Len(strSubZiel) - InStrRev(strSubZiel, "!"))
sZelle = Range(sZelle).Address(, , xlR1C1)
strSubZiel = Left$(strSubZiel, InStrRev(strSubZiel, "!")) & sZelle

varErgebnis = ExecuteExcel4Macro(strSubZiel)
BerechneZelle.FormulaLocal = BerechneZelle.FormulaLocal

Set BerechneZelle = Nothing
varErgebnis = Empty
strSubZiel = ""

End Sub
kannst Du auch die A1 Schreibweise verwenden.
 A
1rot, grün, blau

Formeln der Tabelle
ZelleFormel
A1=IndirekterVerweis("'E:\1 Forum\[TestMehr.xls]Tabelle1'!B3";A1)

Gruß Tino
Anmerkung ...
Tino

Hallo,
dies ist aber nur für maximal zwei Zellen geeignet.
Besser ist es diese Informationen rein über VBA auszulesen,
dazu kann man ja auch die ExecuteExcel4Macro-Methode verwenden um die Datei nicht zu öffnen.
Wenn es sehr viele Daten sind, ist es aber besser die Datei zuvor zu öffnen um den Lesevorgang zu beschleunigen.
Gruß Tino
AW: Anmerkung ...
gerd

Herzlichen Dank allen, es hilft !