Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Vba Daten aus geschlossener Mappe kopieren

Vba Daten aus geschlossener Mappe kopieren
15.09.2015 14:42:11
hdave
Hi,
ich bin ziemlich neu in der VBA-Welt und habe ein Problem:
Ich möchte über einen CommandButton Daten aus einer geschlossenen Excel-Datei in die aktive Excel-Datei importieren. Die Datei, aus der mehrere Zellinhalte kopiert werden sollen, soll nachdem man den Button gedrückt hat in einem Dialogfenster ausgewählt werden können.
Für den Aufruf des Dialogfensters habe ich folgenden Sub benutzt:
Application.Dialogs(xlDialogOpen).Show arg1:="H:\"
Mit diesem Öffne ich jedoch die Datei - ich möchte diese jedoch nur zur Weiterverarbeitung "anwählen"!
Das Kopieren der Zellinhalte habe ich wie folgt gelöst:

Private Sub CommandButton4_Click()
Dim strPath As String, strFile As String
strPath = "H:\xxx\yyy\zzz\Import Test"
strFile = "Import_test.xlsm"
Worksheets(1).Range("E15").Value = GetValue(strPath, strFile, "Tabelle1", "A1")
'       Worksheets(1).Range("E16").Value = GetValue(strPath, strFile, "Tabelle1", "B2")
Worksheets(1).Range("E17").Value = GetValue(strPath, strFile, "Tabelle1", "C3")
Worksheets(1).Range("E18").Value = GetValue(strPath, strFile, "Tabelle1", "D4")
Worksheets(1).Range("E19").Value = GetValue(strPath, strFile, "Tabelle1", "E5")
Worksheets(1).Range("E20").Value = GetValue(strPath, strFile, "Tabelle1", "F6")
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

Beide Subs/Function funktionieren auch unabhängig von einander, jedoch weiß ich nicht wie ich beide verknüpfen soll...
Kann mir da irgendjemand weiterhelfen oder Input geben?
Im Voraus vielen Dank!!!

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vba Daten aus geschlossener Mappe kopieren
15.09.2015 15:11:56
ChrisL
Hi
Sub t()
Dim fileToOpen As Variant
Dim strPath As String, strFile As String
fileToOpen = Application.GetOpenFilename("Excel Datei (*.xlsx), *.xlsx")
If fileToOpen  False Then
strPath = Left(fileToOpen, InStrRev(fileToOpen, "\") - 1)
strFile = Right(fileToOpen, Len(fileToOpen) - InStrRev(fileToOpen, "\"))
With ThisWorkbook.Worksheets(1)
.Range("E15").Value = GetValue(strPath, strFile, "Tabelle1", "A1")
.Range("E16").Value = GetValue(strPath, strFile, "Tabelle1", "B2")
.Range("E17").Value = GetValue(strPath, strFile, "Tabelle1", "C3")
.Range("E18").Value = GetValue(strPath, strFile, "Tabelle1", "D4")
.Range("E19").Value = GetValue(strPath, strFile, "Tabelle1", "E5")
.Range("E20").Value = GetValue(strPath, strFile, "Tabelle1", "F6")
End With
End If
End Sub
cu
Chris

Anzeige
AW: Vba Daten aus geschlossener Mappe kopieren
15.09.2015 16:08:28
hdave
Hey Chris,
vielen Dank für Deine Hilfe - klappt 1a!! Musste nur den Dateityp in *.xlsm ändern ;-)
Danke & Beste Grüße,
hdave

AW: Vba Daten aus geschlossener Mappe kopieren
15.09.2015 15:20:32
Daniel
Hi
wenn du nur den Dateinamen als Textstring brauchst dann:
Datei = Application.GetOpenFilename
dann öffnet sich zwar der gleiche Dialog, aber die Datei wird nicht geöffnet, sondern nur der Dateiname mit vollständigem Pfad in die Variable geschrieben.
damit kannst du dann weiterarbeiten.
um noch Pfad vom Dateinamen zu trennen kannst du so vorgehen:
Pfad = Left(Datei, InstrRev(Datei, "\")- 1)
Name = Mid(Datei, InstrRef(Datei, "\") + 1)

(jeweils ohne den Trenner "\")
wenn du viele Zellen übertragen musst und dabei nicht nur bekannte Zellwerte auslesen willst, dann könnte es sich aber schon lohnen, die Datei zu öffnen.
Dann kannst du das ganze VBA-Instrumentarium anwenden und das Übertragen der Daten geht schneller.
Damit es nicht zu Konflikten kommt wenn jemand die Datei zeitgleich bearbeiten will, öffnet man sie Schreibgeschüttz:
Datei = Application.GetOpenFilename
Workbooks.Open Datei, ReadOnly:=true
gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Daten aus geschlossener Excel-Datei kopieren


Schritt-für-Schritt-Anleitung

Um Daten aus einer geschlossenen Excel-Datei zu kopieren, kannst Du die folgenden Schritte befolgen. Diese Anleitung ist für Excel VBA geeignet.

  1. Erstelle einen CommandButton in Deinem Excel-Tabellenblatt.
  2. Füge den folgenden VBA-Code in das Codefenster des CommandButtons ein:
Private Sub CommandButton4_Click()
    Dim fileToOpen As Variant
    Dim strPath As String, strFile As String

    fileToOpen = Application.GetOpenFilename("Excel Datei (*.xlsm), *.xlsm")
    If fileToOpen <> False Then
        strPath = Left(fileToOpen, InStrRev(fileToOpen, "\") - 1)
        strFile = Right(fileToOpen, Len(fileToOpen) - InStrRev(fileToOpen, "\"))

        With ThisWorkbook.Worksheets(1)
            .Range("E15").Value = GetValue(strPath, strFile, "Tabelle1", "A1")
            .Range("E16").Value = GetValue(strPath, strFile, "Tabelle1", "B2")
            .Range("E17").Value = GetValue(strPath, strFile, "Tabelle1", "C3")
            .Range("E18").Value = GetValue(strPath, strFile, "Tabelle1", "D4")
            .Range("E19").Value = GetValue(strPath, strFile, "Tabelle1", "E5")
            .Range("E20").Value = GetValue(strPath, strFile, "Tabelle1", "F6")
        End With
    End If
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
  1. Teste den Code durch Klicken auf den Button und wähle die gewünschte Datei aus. Die Daten werden in die definierten Zellen kopiert.

Häufige Fehler und Lösungen

  • Fehler: Datei wird nicht gefunden

    • Stelle sicher, dass der Dateipfad korrekt ist und die Datei existiert. Überprüfe auch, ob Du den richtigen Dateityp (.xlsm) auswählst.
  • Fehler: Daten werden nicht kopiert

    • Vergewissere Dich, dass die Zellreferenzen korrekt sind und die Quelldatei nicht geöffnet ist.

Alternative Methoden

Eine alternative Methode zum Kopieren von Daten aus einer geschlossenen Datei ist die Verwendung von Power Query. Du kannst eine Abfrage erstellen, die die Daten aus der geschlossenen Datei importiert, ohne VBA zu verwenden. Diese Methode ist besonders nützlich, wenn Du regelmäßig Daten aktualisieren musst.


Praktische Beispiele

Hier ist ein Beispiel, wie Du den Code anpassen kannst, um Daten aus verschiedenen Tabellen zu kopieren:

With ThisWorkbook.Worksheets(1)
    .Range("A1").Value = GetValue(strPath, strFile, "Tabelle2", "A1")
    .Range("B1").Value = GetValue(strPath, strFile, "Tabelle3", "B1")
End With

In diesem Beispiel werden Daten aus "Tabelle2" und "Tabelle3" in die aktive Tabelle eingefügt.


Tipps für Profis

  • Fehlerbehandlung einfügen: Implementiere On Error Resume Next, um Fehler abzufangen und das Skript nicht abrupt zu beenden.
  • Datenvalidierung: Prüfe, ob die Zellen in der Ziel-Tabelle leer sind, bevor Du neue Daten einfügst, um bestehende Daten nicht zu überschreiben.

FAQ: Häufige Fragen

1. Wie kann ich Daten aus mehreren Zellen kopieren? Du kannst den Code in der With-Anweisung entsprechend anpassen, um die gewünschten Zellen auszulesen.

2. Was mache ich, wenn die Datei geöffnet ist und ich trotzdem Daten kopieren möchte? In diesem Fall kannst Du die Datei im schreibgeschützten Modus öffnen, um Konflikte zu vermeiden:

Workbooks.Open fileToOpen, ReadOnly:=True

Nutze diese Anleitung, um effizient Daten aus einer geschlossenen Excel-Datei zu kopieren und Deine VBA-Kenntnisse zu erweitern!

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige