2017-05-16 3 views
0

Ich habe ein paar geschlossene Excel-Arbeitsmappen, auf die ich mit =INDEX(MATCH) zugreifen würde, ohne sie zu öffnen.Index() & Indirekt() auf einem geschlossenen Excel

Leider, möchte ich indirekt auf sie beziehen, also auf der Grundlage der aktuellen Tabelle I in bin.

Z.B. - wenn ich in sheet ->then file path:

AAB ->'C:\Users\vityata\Desktop\[AAB]Test'!$A:E

BBC ->'C:\Users\vityata\Desktop\[BBC]Test'!$A:E

Es scheint wie eine triviale Aufgabe, aber die einzigen Optionen, so etwas zu tun, scheinen die zu sein, folgende:

  • öffnen Sie das Blatt und dann verwenden Indirect() (aber ich will nicht das Blatt öffnen)
  • Verwenden von VBA-Code
  • Verwenden Datenverbindung (Ich will nicht, es)
  • Verwenden INDIRECT.EXT (aber ich will nicht 3.e Partei Add-In)
  • (aber es sollte irgendwie wiederverwendbar und wirklich letztes Mittel sein)

Ich habe ähnliche Probleme hier überprüft: How to referencing value in closed excel workbook by formula incl. variable sheetname? aber die erste Lösung ist eher zu kollmicated, um es zu tun.

Neue Ideen oder Best Practices?

aktualisieren Bisher habe ich folgendes mit VBA erreicht haben (obwohl ich würde gerne eine Nicht-VBA-Lösung haben):

Option Explicit 

Public Sub VlookupClosedWb(Optional strLookFor As String = "Erteilung Baugenehmigung", _ 
         Optional strSheet As String = "APF", _ 
         Optional lngColIndex As Long = 2) 

    Dim strRange As String 

    strRange = "'" & ThisWorkbook.Path & "\[" & strSheet & ".xlsx]" & "Monatsbericht'!$A:$E" 
    ActiveCell.Formula = "=VLOOKUP(""" & strLookFor & """," & strRange & "," & lngColIndex & ",0)" 

End Sub 

Public Function fVlookupClosedWb(Optional strLookFor As String = "Erteilung Baugenehmigung", _ 
         Optional strSheet As String = "APF", _ 
         Optional lngColIndex As Long = 2) 

    Dim strRange As String 

    strRange = "'" & ThisWorkbook.Path & "\[" & strSheet & ".xlsx]" & "Monatsbericht'!$A:$E" 

    fVlookupClosedWb = WorksheetFunction.VLookup(""" & strLookFor & """, " & strRange & ", " & lngColIndex & ", 0) 

End Function 

Lange Rede kurzer Sinn - die Sub funktioniert wie erwartet, genau das, was ich will in der aktiven Zelle. Die Funktion funktioniert nicht. Irgendwelche Ideen, wie es funktioniert? Ich nehme an, dass es nicht funktioniert, weil ich ein bisschen WorksheetFunction.VLookup missbrauche, aber ich kann einen Bereich nicht überschreiten, ohne die andere Arbeitsmappe zu öffnen. Ideen?

+0

Vielleicht versuchen Sie, Ihren Code basierend auf der verknüpften Frage zu zeigen, damit andere sehen können, was Sie getan haben und möglicherweise in der Lage sind zu erkennen, wo Sie schief gelaufen sind. – FreeMan

+0

@FreeMan - Einfach gemacht. Ich wollte nicht mit 'VBA' arbeiten und es war tatsächlich mein letzter Ausweg ... – Vityata

+0

Hast du auch die" verrückte Art von Methode "versucht, die in [Choirbean] verlinkt ist (https://stackoverflow.com/a/28463798)/2344413) Antwort? Sieht so aus, als könnte das für dich funktionieren. – FreeMan

Antwort

0

Nach einigen Versuchen habe ich herausgefunden, dass die Verwendung einiger Formeln in einer geschlossenen Excel-Arbeitsmappe, ohne auf den Pfad zu verweisen, mit der Sumproduct() function erfolgt.


Z. B .: Wenn Sie SUMPRODUCT() als Alternative von SUMIFS() verwenden, das ist, wie es wie mit zwei Bedingungen aussieht:

=SUMPRODUCT(((B2:B6=C2)*1)*(A2:A6=D2)) 
*SUMPRODUCT(((B8:B13=C8)*1)*(A8:A13=D8)) 
*SUMPRODUCT(((B16:B20=C16)*1)*(A16:A20=D16)) 

Ich habe some more examples of it here setzen.

Verwandte Themen