berndvorwerk
Goto Top

VBA: mehrere Zellen aus anderer Datei auslesen (ohne diese zu öffnen)

Hallo an alle,
ich muss mich mal wieder mit einer Frage an alle Excel Experten wenden.
Ich möchte per Makro mehrere Zellen einer anderen Exceldatei, die im selben Ordner abgelegt ist, auslesen.
Mit folgendem Makro funktioniert das für eine Zelle einwandfrei.

  • Private Sub Worksheet_activate()
    • Range("A10") = GetValue([a1], [a2], [a3], [a4])
  • End Sub

  • Private Function GetValue(path As String, file As String, sheet As String, ref As String) As String
    • Dim arg As String

    • path = ActiveWorkbook.path
    • file = "test1.xls"
    • sheet = "Tabelle1"
    • ref = "B1"

  • arg = "'" & path & "\[" & file & "]" & sheet & "'!" & _
      • Range(ref).Range("A1").Address(, , xlR1C1)

  • GetValue = ExecuteExcel4Macro(arg)
  • End Function

Ich muss leider gestehen, dass ich den Code im Detail nicht verstehe (ist nur kopiert face-plain) So verstehe ich die [a1], [a2], ... hinter GetValue nicht, ebenso erzeugt die Zeile
      • Range(ref).Range("A1").Address(, , xlR1C1)
      Fragezeichen auf meiner Stirn.

      Wie muss ich den Code ändern, wenn ich nicht nur eine Zelle auslesen/einfügen möchte, sondern mehrere. (ausgelesen wird aus Datei "test1", eingefügt wird in Datei "Ziel")
      Im Detail:
      Quelle (Tabellenblatt)Quelle (Zelle)Ziel (Tabellenblatt)Ziel (Zelle)
      Tabelle1A1Tabelle1A10
      Tabelle3D5Tabelle1E2
      Tabelle4F2Tabelle2B3

      Die Zellen aus denen kopiert wird und eingefügt werden soll sind also vollkommen unabhängig voneinander. Daher vermute ich, dass man die ganze Prozedur mehrmals hintereinander ausführen muss. Es sollen aber alle Zellen automatisch bei Aktivierung des Tabellenlattes 1 (WorksheetActivate) gefüllt werden.
      Vielleicht könnt ihr mir helfen.
      Freundicher Gruß,
      Bernd

Content-Key: 247173

Url: https://administrator.de/contentid/247173

Printed on: April 19, 2024 at 20:04 o'clock

Member: colinardo
colinardo Aug 22, 2014 updated at 17:44:19 (UTC)
Goto Top
Hallo Bernd,
wenn du es damit machen willst sähe das für deinen Fall so aus:
Private Sub Worksheet_Activate()
    Dim strPath As String, strFile As String
    strPath = "C:\Quellpfad"  
    strFile = "Quellesheet.xlsx"  
    Worksheets(1).Range("A10").Value = GetValue(strPath, strFile, "Tabelle1", "A1")  
    Worksheets(1).Range("E2").Value = GetValue(strPath, strFile, "Tabelle3", "D5")  
    Worksheets(2).Range("B3").Value = GetValue(strPath, strFile, "Tabelle4", "F2")  
End Sub

Private Function GetValue(ByVal path As String, ByVal file As String, ByVal sheet As String, ByVal ref As String) As String
    Dim arg As String
    arg = "'" & path & "\[" & file & "]" & sheet & "'!" & Range(ref).Address(, , xlR1C1)  
    GetValue = ExecuteExcel4Macro(arg)
End Function
Du kannst die Zellen natürlich auch direkt via Formel miteinander verknüpfen, das Makro macht auch nichts anderes als das es diese Formel erst auswertet und dann nur den jeweiligen Wert in die Zelle ohne Formel einträgt.

Eine Verknüpfung zu einer Zelle in einem anderen Sheet via Formel sieht ja immer so aus:
='C:\Pfad\zur\[Quelle.xlsx]Tabelle1'!$A$1

Range(ref).Address(, , xlR1C1)
das hier macht nichts anderes als einen Zellbezug in die R1C1 Zellbezugsschreibsweise von Excel umzuwandeln. Diese beschreibt die Position einer Zelle anhand von Zeilen und Spaltenpositionen. Beispiel: Eine Zelle B3 würde in R1C1-Schreibweise so aussehen R3C2 (Row 3 Column 2 )

Grüße Uwe

p.s. Bitte nutze in Zukunft Code-Tags für deinen Quellcode: <code> Quellcode </code>. Merci.