Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Zugriff auf andere Dateien per Makro

VBA: Zugriff auf andere Dateien per Makro
28.07.2006 15:19:42
Slawek
Hallo zusammen,
Ich schreibe grad ein Makro das sich in einer Datei befindet in der ich immer weiter Daten pflege.
Nun muss ich ab und an andere listen (die immer gleich aufgebaut sind) mit den Daten aus der ersten Datei befüllen.
Dabei sucht das MAkro nun nach einem Schlüssel und sobald dieser gefunden ist wird der wert in die andere Tabelle kopiert. UNd gut ist.
Aber dafür muss ich bisher immer die Tabellen aus den Dateien in die Datei kopieren wo das MAkro sich befindet.
Kann ich es vielleicht irgendwie so machen dass ich, wenn ich das Makro ausführe mir eine Datei auswählen kann und dann eine Tabelle auswählen.
Und dass diese dann befüllt wird?
Ich bin um jede Hilfe dankbar.
Schöne Grüße
Slawek
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 17:02:21
Matthias
Hallo Slawek,
du kannst dein MAkro mit Argumenten ausstatten, welche die zu bearbeitende Tabelle enthalten:
z.B. die Mappe mit den Makros heißt "Makros.xls":

Sub Test(Sh As Worksheet)
MsgBox Sh.Name & " befindet sich in der Mappe " & Sh.Parent.Name
End Sub

Ein Aufruf von einer fremden Mappe aus ginge dann so (Markos.xls muss geöffnet sein):

Application.Run "Makros.xls!Test", Thisworkbook.Sheets("Tabelle1")

Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 17:23:47
Slawek
Hi Matthias,
Also das hab ich rausgefunden im MSDN. Aber nun fehlt mir noch etwas USerkomfort. Ich will mit einem DIalog oder von mir aus auf Form die Datei auswählen lassen und dann die Worksheets anzeigen um dann da das richtige auszuwählen.
So dass ich dann das Objekt zum richtigen Worksheet habe und damit arbieten kann.
Oder der User muss eigenständig die Datei öffnen und das Makro gibt dann beim start des Makros alle geöffneten Worksheets in einer Liste aus aus der man dann auswählen kann.
Dann hätte ich ja auch ein Objekt mit dem ich dann arbeiten könnte oder?
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 17:36:57
Slawek
Hallo nochmal,
hab nun noch eine Kleinigkeit: Ich habe einfach erstmal abgekürzt und frage den User wie die Datei heißt die er schon geöffnet hat. Dies gibt er in eine Inputbox ein und ich habe es dann als string.
Wie kann ich nun aus diesem String ein Object auf die Datei(Workbook) machen?
Das brauch ich ja auch wenn er die datei über ein dialog auswählen kann.
Danke :)
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 18:17:21
Matthias
Hallo Slawek,
so in etwa,

Sub test2()
Dim mappe As String, wb As Workbook
mappe = InputBox("Mappenname:")
On Error Resume Next
Set wb = Workbooks(mappe) '<<<Hier geschieht die Zuweisung
If Err.Number > 0 Then
MsgBox "Mappe '" & mappe & "' ist nicht geöffnet!"
Exit Sub
End If
On Error GoTo 0
'so, jetzt kannst du die mappe mit wb. ansprechen, z.B.
'wb.Sheets("Tabelle1").Cells(1, 1) = 1
End Sub

Gruß Matthias
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 21:31:28
Slawek
Hallo Matthias,
Ja das sieht klasse aus. Werde ich gleich mal ausprobieren.
Also ich kenne es aus C# so da gibt es ein Com Objekt für Excel und ich kann da Dateien öffnen und drauf zugreifen. Hab halt ziemlich viel kontrolle dadrüber.
ABer geht sowas auch hier?`
Also ich fand eben die möglichkeit eine Exceldatei zu öffnen. Jedoch wird die datei nur geöffnet und ich bekomme das resultat ob es geklappt hat oder nicht. aber leider nicht den Dateinamen. Den bräuchte ich ja um auf die Tabelle auch zuzugreifen. UNd danach das Workbook auch wieder zu schließen.
Gibt es vielleicht in dieser Richtung eine möglichkeit?
Gruß
Slawek
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 22:13:06
Matthias
Hallo Slawek,
Hab halt ziemlich viel kontrolle dadrüber.
ABer geht sowas auch hier?

Naja, mit Excel hat man ja die größte Kontrolle über Excel ;-)
Jedoch wird die datei nur geöffnet und ich bekomme das resultat ob es geklappt hat oder nicht. aber leider nicht den Dateinamen.
Wieso, den Dateinamen hast du doch in der Variablen "mappe" stehen.
Und danach das Workbook auch wieder zu schließen.
Das geht dann mit

wb.Close

Gruß Matthias
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 22:38:43
Slawek
OK das versteh ich stimmt.
Hast du denn eine Idee wie ich ein Dokument aus dem Quelltext raus öffnen kann? und das so dass das neugeöffnete Dokument unsichtbar bleibt.
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 22:51:57
Matthias
Hallo Slawek,
und das so dass das neugeöffnete Dokument unsichtbar bleibt.
so:

Application.ScreenUpdating = False
Workbooks.Open Filename="C:\test.xls"
' sonstwas
ActiveWorkbook.Close
Application.ScreenUpdating = True

dann kriegt man davon nichts weiter mit.
Gruß Matthias
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 23:03:46
Slawek
Hallo,
also das mit dem Application.ScreenUpdating = False hat leider nichts gebracht. Die datei wird trotzdem normal geöffnet und angezeigt.
Application.ScreenUpdating = False
Workbooks.Open (FilePathName)
Gibts da vielleicht noch was anderes?
Also ich hab gefunden dass es möglich ist Application.Visible = false
aber dann ist jede Datei unsichtbar.
Geht das vielleicht auch irgendwie für ein einzelnes Workbook?
Gruß
Slawek
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
28.07.2006 23:29:37
Matthias
Hallo Slawek,
Du kannst auch eine eigene Excel-Instanz öffnen (wie wohl auch mit C#, ich kenne es von VisualBasic):

Sub test()
Dim xlApp As Excel.Application
Set xlApp = CreateObject("Excel.Application")
'xlApp.Visible = True 'zum Debuggen Kommentar entfernen
xlApp.Workbooks.Open Filename = "C:\test.xls"
xlApp.ActiveWorkbook.Close
xlApp.Quit
Set xlApp = Nothing
End Sub

Gruß Matthias
Anzeige
AW: VBA: Zugriff auf andere Dateien per Makro
29.07.2006 00:07:40
Slawek
Hi Matthias,
Es käuft :)
Also vielen Dank für die Hilfe hat nun alles geklappt.
Eine gute nacht wünsche ich dir.
Bis bald
Slawek
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zugriff auf andere Dateien in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und erstelle ein neues Makro.

  2. Workbook-Objekt definieren: Verwende die folgende Struktur, um auf eine andere Arbeitsmappe zuzugreifen:

    Sub ZugriffAufAndereDatei()
        Dim wb As Workbook
        Dim mappe As String
        mappe = InputBox("Bitte Mappenname eingeben:")
    
        On Error Resume Next
        Set wb = Workbooks(mappe)
    
        If wb Is Nothing Then
            MsgBox "Die Mappe '" & mappe & "' ist nicht geöffnet!"
            Exit Sub
        End If
    
        On Error GoTo 0
        ' Hier kannst du mit der geöffneten Mappe arbeiten
    End Sub
  3. Datei auswählen: Du kannst den Benutzer auch dazu auffordern, eine Datei auszuwählen. Dazu kannst du einen Dateidialog verwenden:

    Sub DateiAuswaehlen()
        Dim wb As Workbook
        Dim dateiDialog As FileDialog
    
        Set dateiDialog = Application.FileDialog(msoFileDialogFilePicker)
        If dateiDialog.Show = -1 Then
            Set wb = Workbooks.Open(dateiDialog.SelectedItems(1))
            ' Hier kannst du mit der geöffneten Mappe arbeiten
        End If
    End Sub
  4. Unsichtbare Instanz öffnen: Wenn du die Datei unsichtbar öffnen möchtest, kannst du eine neue Excel-Instanz erstellen:

    Sub UnsichtbareInstanz()
        Dim xlApp As Excel.Application
        Set xlApp = CreateObject("Excel.Application")
        xlApp.Workbooks.Open "C:\deinPfad\deineDatei.xls"
        xlApp.Visible = False ' Excel sichtbar machen, wenn nötig
        ' Arbeite hier mit der Datei
        xlApp.Quit
        Set xlApp = Nothing
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Die Mappe ist nicht geöffnet!": Überprüfe, ob du den genauen Namen der Arbeitsmappe eingibst. Achte auf Groß- und Kleinschreibung.
  • Fehler beim Öffnen der Datei: Stelle sicher, dass der Pfad zur Datei korrekt ist und dass die Datei existiert.
  • Excel wird nicht unsichtbar: Achte darauf, dass du xlApp.Visible = False verwendest, um die Instanz unsichtbar zu halten.

Alternative Methoden

  • Direkter Zugriff auf Zellen: Du kannst auch direkt auf Zellen in einer anderen Arbeitsmappe zugreifen, ohne sie zu öffnen. Verwende dafür Workbooks.Open und arbeite dann mit den Zellen.

    Workbooks.Open "C:\deinPfad\deineDatei.xls"
    Cells(1, 1).Value = "Neuer Wert"
  • Verwendung von COM-Objekten: Für eine umfassendere Kontrolle über Excel kannst du COM-Objekte verwenden, ähnlich wie in C#.


Praktische Beispiele

Beispiel 1: Daten aus einer Arbeitsmappe kopieren:

Sub DatenKopieren()
    Dim sourceWb As Workbook
    Dim targetWb As Workbook
    Set sourceWb = Workbooks.Open("C:\deinPfad\quelle.xls")
    Set targetWb = Workbooks.Open("C:\deinPfad\ziel.xls")

    sourceWb.Sheets(1).Range("A1:A10").Copy targetWb.Sheets(1).Range("A1")

    sourceWb.Close
    targetWb.Save
    targetWb.Close
End Sub

Beispiel 2: Überprüfen, ob eine Datei geöffnet ist:

Function IstDateiGeoeffnet(dateiName As String) As Boolean
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(dateiName)
    IstDateiGeoeffnet = Not wb Is Nothing
    On Error GoTo 0
End Function

Tipps für Profis

  • Fehlerbehandlung: Nutze On Error GoTo für eine bessere Fehlerbehandlung.
  • Optimierung: Deaktiviere Application.ScreenUpdating, um die Performance zu verbessern, während du die Daten verarbeitest.
  • Modularität: Halte deine VBA-Codes modular, indem du häufig verwendete Funktionen in separate Subs oder Functions auslagerst.

FAQ: Häufige Fragen

1. Wie kann ich auf eine geschützte Datei zugreifen? Du musst das Passwort zur Datei bereithalten und beim Öffnen der Datei angeben:

Workbooks.Open "C:\deinPfad\geschuetzteDatei.xls", Password:="deinPasswort"

2. Kann ich mehrere Dateien gleichzeitig öffnen? Ja, du kannst in einer Schleife mehrere Dateien öffnen, indem du die Dateinamen in einem Array speicherst und mit Workbooks.Open durch das Array iterierst.

3. Wie schließe ich eine Arbeitsmappe? Verwende wb.Close, um die Arbeitsmappe zu schließen, wobei wb die Variable ist, die auf das Workbook zeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige