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.
Ich muss leider gestehen, dass ich den Code im Detail nicht verstehe (ist nur kopiert ) So verstehe ich die [a1], [a2], ... hinter GetValue nicht, ebenso erzeugt die Zeile
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 ) So verstehe ich die [a1], [a2], ... hinter GetValue nicht, ebenso erzeugt die Zeile
- Range(ref).Range("A1").Address(, , xlR1C1)
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) |
---|---|---|---|
Tabelle1 | A1 | Tabelle1 | A10 |
Tabelle3 | D5 | Tabelle1 | E2 |
Tabelle4 | F2 | Tabelle2 | B3 |
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 247173
Url: https://administrator.de/contentid/247173
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
1 Kommentar
Hallo Bernd,
wenn du es damit machen willst sähe das für deinen Fall so aus:
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:
Grüße Uwe
p.s. Bitte nutze in Zukunft Code-Tags für deinen Quellcode:
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
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.