HERBERS Excel-Forum - das Archiv
2 Zeilen werden gesucht
Jean

Hallo,
2 Zeilen fehlen, damit ich weiter komme:
Option Explicit
Sub Zugriff_auf_eine_andere_Mappe()
Dim Pfad, Dateiname, Tabellenname, Zelladresse As String
Pfad = InputBox("Bitte den Pfad eingeben (zB c:\Temp1): ")
Dateiname = InputBox("Bitte den Dateiname eingeben (zB Kunden): ")
Tabellenname = InputBox("Bitte den Tabellenname eingeben (zB 2008): ")
Zelladresse = InputBox("Bitte die Zelladresse eingeben (zB B10): ")
' Nun soll die Datei geöffnet werden und der Wert aus B10 der betreffenden Tabelle
' in die Zelle C5 der aufrufenden Datei, die das Makro enthält, übertragen werden
End Sub
Wie lauten die fehlenden Zeilen?
Gruß
Jean

AW: 2 Zeilen werden gesucht
Josef

Hallo Jean,
hie eine Variante ohne die Datei zu Öffnen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Zugriff_auf_eine_andere_Mappe()
  'Variablendeklaration muss für jede Variable separat erfolgen!
  Dim Pfad As String, Dateiname As String, Tabellenname As String, Zelladresse As String
  
  Pfad = InputBox("Bitte den Pfad eingeben (zB c:\Temp1): ")
  Dateiname = InputBox("Bitte den Dateiname eingeben (zB Kunden.xls): ")
  Tabellenname = InputBox("Bitte den Tabellenname eingeben (zB 2008): ")
  Zelladresse = InputBox("Bitte die Zelladresse eingeben (zB B10): ")
  
  ' Nun soll die Datei geöffnet werden und der Wert aus B10 der betreffenden Tabelle
  ' in die Zelle C5 der aufrufenden Datei, die das Makro enthält, übertragen werden
  
  'Tabellenname anpassen!
  ThisWorkbook.Sheets("Tabelle3").Range("C5") = GetValue(Pfad, Dateiname, Tabellenname, Zelladresse)
  
  
End Sub

Private 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).Range("A1").Address(, , xlR1C1)
  
  ' Execute an XLM macro
  GetValue = ExecuteExcel4Macro(arg)
End Function

Gruß Sepp

AW: Weitere Fragen
Jean

Hallo Sepp,
vielen Dank für Deine Lösung ohne die Mappe öffnen zu müssen.
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
Der 2. Teil obiger Zeile ab Range(ref) ist mir nicht klar. Was wird damit erreicht?
GetValue = ExecuteExcel4Macro(arg)
wird mit dieser Excel4 Makrofunktion ein Öffnen überflüssig oder welchen Sinn hat sonst diese
Übertragung?
Dank im voraus.
Gruß
Jean
AW: Weitere Fragen
Josef

Hallo Jean,

Range(ref).Range("A1").Address(, , xlR1C1)

gibt die Adresse des Zellbezuges in R1C1-Schreibweise zurück.
Zur zweiten Frage: Das xl4Macro holt den Wert aus der geschlossenen Mappe.
Gruß Sepp

AW: Danke
Jean

Hallo Sepp,
vielen Dank für Deine Erklärungen.
Gruß
Jean
AW: Einfacher über Formel mit ext. Zellbezug
Daniel

Hi
Sepp bringt mich da auf folgende Idee, manchmal denkt man ja viel zu kompliziert.
das was du da machen willst, geht ja auch einfach mit Formeln, die einen externen Zellbezug haben:
Sub Zugriff_auf_eine_andere_Mappe()
'Variablendeklaration muss für jede Variable separat erfolgen!
Dim Pfad As String, Dateiname As String, Tabellenname As String, Zelladresse As String
Pfad = InputBox("Bitte den Pfad eingeben (zB c:\Temp1): ")
Dateiname = InputBox("Bitte den Dateiname eingeben (zB Kunden.xls): ")
Tabellenname = InputBox("Bitte den Tabellenname eingeben (zB 2008): ")
Zelladresse = InputBox("Bitte die Zelladresse eingeben (zB B10): ")
With  ThisWorkbook.Sheets("Tabelle3").Range("C5")
.Formula = "='" & Pfad & "\[" & Dateiname & "]" & Tabellenname & "'!" & Zelladdresse
.Formula = .Value
End With
End Sub
gruß, Daniel
AW: Danke
Jean

Hallo Daniel,
vielen Dank für Deine Formellösung. Die Aufgabe ist gelöst.
Gruß
Jean
AW: 2 Zeilen werden gesucht
Daniel

Hi

Workbooks.Open Pfad & "\" & Dateiname
Thisworkbook.Sheets(?).Range("C5").Value = Activeworkbook.Sheets(Tabellenname).Range( _
Zelladdresse).Value
ActiveWorkbook.Close

das wären die fehlenden Zeilen, allerdings ohne irgendewelche Sicherheitsprüfungen auf richtige Dateinamen.
Außerdem müsste der Tabellenblattname der der Aufnehmenden Tabelle noch bekannt sein.
Anstelle der Inputboxen für den Pfad- und Dateinamen kannst du auch die Funktion GETOPENFILENAME verwenden, dann kann der Anwender wie beim Dateiöffnen von Hand die Datei auswählen und anklicken.
das schließt Tippfehler an dieser Stelle schon mal mit grosser Wahrscheinlichkeit aus.
Gruß, Daniel
AW: Danke
Jean

Hallo Daniel,
vielen Dank für Deinen Beitrag, mit dem die Aufgabe gelöst wird.
Gruß
Jean