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

Forumthread: Daten aus geschlossener Excel Datei holen

Daten aus geschlossener Excel Datei holen
20.05.2019 15:57:34
Blackjack2019
Guten Tage alle zusammenmen,
ich möchte mich einmal kurz vorstellen mein Name ist Blackjack (Torsten)und ich schaue schon sehr oft in dieses Forum vorbei, um mir Informationen für meine kleinen Projekte abzuholen. Es hat mir schon oft geholfen. Meine Erfahrungen gerade was VBA angehen sind begrenzt und habe ich mir alles durch Learning by Doing beigebracht. Nun bräuchte ich mal eine aktive Unterstützung.
Aufgabe: Datei soll aus einer geschlossenen Datei (input.xlsx) auslesen, welche sich in einem Tempverzeichnis befindet.
Ziel: Das Auslesen soll im Tabellenblatt (Auslesen) erfolgen und nachdem auslesen soll wieder das Tabellenblatt (startup) als einziges Tabellenblatt angezeigt werden.
Das Makro funktioniert insoweit, das es die Daten ausließt und auch sauber importiert, leider nur immer im Tabellenblatt (startup). Ich bin mir ziemlich sicher das es mit der Laufzeit etwas zu tun hat, weiß nur nicht wie ich das lösen kann. Hab schon überall gesucht, ausprobiert aber keine Lösung gefunden die ich verstehe umzusetzen. Wie gesagt bin da kein Profi, aber gebe nicht auf.
Hintergrund: Die eingelesenen Daten werden in einem Dashboard an unterschiedlichen Stellen später weiterverarbeitet mit entsprechenen Druckmenues.
Link Vorschau
Userbild
Ich hoffe es so erklärt zu haben das man es versteht....
Würde mich freuen von Euch eine schnelle Hilfe zu erhalten, danke schon mal im voraus
LG Blackjack
Sub Import()
Sheets("startup").Select 'Startet im Tabellenblatt "startup"'
Sheets("Auslesen").Visible = True 'Blendet 'Tabellenblatt "Auslesen ein"'
Sheets("startup").Visible = False 'Blendet 'Tabellenblatt "startupaus"'
Sheets("Auslesen").Select'Startet im Tabellenblatt "Auslesen "'
'Hinweis das Daten importiert werden
Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
objShell.Popup "Daten werden importiert, bitte warten Sie einen Augenblick"
Set objShell = Nothing
'Startet das Makro Daten auslesen aus Tempverzeichnis
'** Dimensionierung der Variablen
Dim pfad As String, datei As String, blatt As String, bereich As Range, zelle As Object
'** Angaben zur auszulesenden Zelle
pfad = "C:\Temp"
datei = "input.xlsx" ' Datei welche ausgelesen werden soll
blatt = "Tabelle1" ' Tabellenblatt welche ausgelesen werden soll
Set bereich = Range("A1:AA46")' Bereich welches ausgelesen werden soll
'** Bereich auslesen
For Each zelle In bereich
'** Zellen umwandeln
zelle = zelle.Address(False, False)
'** Eintragen in Bereich
ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
Next zelle
End Sub
Private Function GetValue(pfad, datei, blatt, zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen
'*** Dimensionierung der Variablen
Dim arg As String
'Sicherstellen, dass das datei vorhanden ist
If Right(pfad, 1)  "\" Then pfad = pfad & "\"
If Dir(pfad & datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If
'** Das Argument erstellen
arg = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(zelle).Range("A1").Address(, ,  _
xlR1C1)
'** Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(arg)
'Call Data 'Wenn Daten eingelesen wurden starte Makro "Data"
End Function

Sub Data()
Sheets("Auslesen").Select 'Startet im Tabellenblatt "Auslesen "'
Sheets("startup").Visible = True 'Blendet 'Tabellenblatt "startup ein"'
Sheets("startup").Select'Startet im Tabellenblatt "startup"'
Sheets("Auslesen").Visible = False 'Blendet 'Auslesen"startup aus"'
End Sub
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 16:25:19
Nepumuk
Hallo Torsten,
warum nicht die geschlossene Datei öffnen, Bereich kopieren und in die gewünschte Tabelle einfügen? Dauert 2 Sekunden und hat den Vorteil dass Zahlenformate mit kopiert werden.
Gruß
Nepumuk
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 16:56:44
Blackjack2019
Hallo Nepumuk,
vielen Dank für Deine schnelle Antwort.
Habe das mal eben ausprobiert.
1. Funktioniert grundsätzlich, aber diese Meldung bekomme ich nicht weg
Userbild
2. Den Inhalt der Importdatei ist dann sichtbar
3. Der Dateiname steht im Code, wenn jemand den ändert funktioniert das nicht mehr
Hier mein erster Makroversuch dazu:
Sub Makro3()
' Makro3 Makro
Sheets("Startup").Select
Sheets("Auslesen").Visible = True
Sheets("Auslesen").Select
Cells.Select
Selection.ClearContents
Range("A1").Select
Workbooks.Open Filename:="C:\Temp\input.xlsx"
Windows("input.xlsx").Activate
Range("A1:BB46").Select
Selection.Copy
Windows("BdgetAktuell2019.xlsb").Activate
Sheets("Auslesen").Visible = True
Sheets("Auslesen").Select
Cells.Select
ActiveSheet.Paste
Windows("input.xlsx").Activate
ActiveWindow.Close
Range("A1").Select
Sheets("Auslesen").Select
ActiveWindow.SelectedSheets.Visible = False
Range("A1").Select
End Sub
Gruss Torsten
Anzeige
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 17:07:52
Daniel
Hi
1. führe nach dem Einfügen der Daten den Befehl aus:
Application.CutCopyMode = False

dieser Befehl leert den Zwischenspeicher von Excel, damit unterbleibt dann auch die Rückfrage.
2. führe am Anfang den Befehl aus
Application.ScreenUpdating = False

das friert den Bildschirm ein und man sieht nicht mehr, was Excel gerade macht.
mit Makroende wird diese Einstellung dann automatisch aufgehoben.
3. dann lese den Dateinamen zuerst in eine Variable ein, dann kannst du immer aktuell auswählen:
Dim Dateiname as String
Dateiname = Application.GetOpenFilename
if Dateiname  ".xlsx" then Exit Sub 'Abbruch
Workbooks.Open Filename:=Dateiname
Gruß Daniel
Anzeige
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 17:12:29
Nepumuk
Hallo Torsten,
versuch es mal so:
Public Sub Kopieren()
    Dim objWorkbook As Workbook
    Application.ScreenUpdating = False
    Call Worksheets("Auslesen").Cells.ClearContents
    Set objWorkbook = Workbooks.Open(Filename:="C:\Temp\input.xlsx", _
        UpdateLinks:=3, ReadOnly:=True)
    Call objWorkbook.Worksheets(1).Range("A1:BB46").Copy( _
        Destination:=ThisWorkbook.Worksheets("Auslesen").Cells(1, 1))
    Call objWorkbook.Close(SaveChanges:=False)
    Set objWorkbook = Nothing
    Application.ScreenUpdating = True
End Sub

Gruß
Nepumuk
Anzeige
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 19:17:12
Blackjack2019
Hallo Nepumuk,
diesen Code habe ich auch ausgeführt, der funktioniert eigentlich sehr gut.
1. Daten werden sauber eingelesen.
2. Es wird kein Arbeitsblatt extra eingeblendet und wieder ausgeblendet
3. Es kommt eine Meldung das noch irgendwas gespeichert werden muss
Schon sehr perfekt, auch wenn ich noch nicht alles verstehe.
Bei mir geht das auch recht schnell (Ryzen 7 1800), wenn der Rechner nicht so schnell ist und keine Meldung kommt, könnte das warten zu Unwohlsein führen. Kann man irgendwie eine Meldung oder so eine Loadinginfo einbauen bis das Makro fertig ist.
Diese Datei ist auch noch recht klein, ich habe da aber auch Dateien die mitunter 2000 bis 5000 Zeilen haben (Aufmasszeilen) da wird es schon einige Zeit dauern.
Das was Du bis jetzt schon gemacht hast begeistert mich schon, vielleicht hast Du da auch eine tolle Idee...
Public Sub Kopieren2()
Dim objWorkbook As Workbook
Application.ScreenUpdating = False
Call Worksheets("Auslesen").Cells.ClearContents
Set objWorkbook = Workbooks.Open(Filename:="C:\Temp\input.xlsx", _
UpdateLinks:=3, ReadOnly:=True)
Call objWorkbook.Worksheets(1).Range("A1:BB46").Copy( _
Destination:=ThisWorkbook.Worksheets("Auslesen").Cells(1, 1))
Call objWorkbook.Close(SaveChanges:=False)
Set objWorkbook = Nothing
Application.ScreenUpdating = True
End Sub
Vielen Dank schon mal dafür das bringt mich auf jeden Fall schon mal weiter, ich krieg meine Daten ins mein Sheet
Gruss Torsten
Anzeige
AW: Daten aus geschlossener Excel Datei holen
21.05.2019 13:19:32
Daniel
Hi
am einfachsten so:
1. Manuell ein zusätzliches Tabellenblatt erstellen, auf diesem schreibst du deinen Hinweistext
2. im Code aktivierst du dann dieses Blatt bevor du die Bildschirmaktualisierung ausschaltest und am ende dann wieder das normale Blatt
also im Prinzip:
Sheets("Blatt mit Hinweismeldung").Select
Application.ScreenUpdating = False
hier dann der weitere Code
Sheets("Das blatt, mit dem Der Anwender weiterarbeiten soll").Select
Application.ScreenUpdating = False
gruß Daniel
Anzeige
AW: Daten aus geschlossener Excel Datei holen
21.05.2019 17:23:12
Blackjack2019
Hallo Daniel,
vielen Dank für Deine Unterstützung, werde ich ausprobieren
Gruss Torsten
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 17:19:16
Nepumuk
Hallo Torsten,
die Dateiauswahl habe ich vergessen. Teste mal:
Public Sub Kopieren()
    Dim objWorkbook As Workbook, objFileDialog As FileDialog
    Dim strPath As String
    Set objFileDialog = Application.FileDialog(msoFileDialogOpen)
    With objFileDialog
        .AllowMultiSelect = False
        .FilterIndex = 1
        .InitialFileName = "C:\Temp\"
        .Title = "Importdatei auswählen"
        If .Show Then strPath = .SelectedItems(1)
    End With
    Set objFileDialog = Nothing
    If strPath <> vbNullString Then
        Application.ScreenUpdating = False
        Call Worksheets("Auslesen").Cells.ClearContents
        Set objWorkbook = Workbooks.Open(Filename:=strPath, UpdateLinks:=3, ReadOnly:=True)
        Call objWorkbook.Worksheets(1).Range("A1:BB46").Copy( _
            Destination:=ThisWorkbook.Worksheets("Auslesen").Cells(1, 1))
        Call objWorkbook.Close(SaveChanges:=False)
        Set objWorkbook = Nothing
        Application.ScreenUpdating = True
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 18:58:05
Blackjack2019
Hallo Nepumuk,
ersteinmal vielen Dank das Du Dich der Sache angenommen hast. Musste erst einmal was essen bei soviel Input. :) Habe Deinen Code gerade mal 1:1 so übernommen und ausprobiert. Es kommt dann bei mir eine Fehlermeldung die so aussieht
Userbild
Userbild
Gruss Torsten
……………………………………………………………………………………………………………………………………………………………………………………….
Public Sub Kopieren()
Dim objWorkbook As Workbook, objFileDialog As FileDialog
Dim strPath As String
Set objFileDialog = Application.FileDialog(msoFileDialogOpen)
With objFileDialog
.AllowMultiSelect = False
.FilterIndex = 1
.InitialFileName = "C:\Temp\"
.Title = "Importdatei ausw?hlen"
If .Show Then strPath = .SelectedItems(1)
End With
Set objFileDialog = Nothing
If strPath  vbNullString Then
Application.ScreenUpdating = False
Call Worksheets("Auslesen").Cells.ClearContents
Set objWorkbook = Workbooks.Open(Filename:=strPath, UpdateLinks:=3, ReadOnly:=True)
Call objWorkbook.Worksheets(1).Range("A1:BB46").Copy( _
Destination:=ThisWorkbook.Worksheets("Auslesen").Cells(1, 1))
Call objWorkbook.Close(SaveChanges:=False)
Set objWorkbook = Nothing
Application.ScreenUpdating = True
End If
End Sub

Anzeige
AW: Dann fehlt im VBE der Verweis ...
20.05.2019 19:25:23
Blackjack2019
Hallo Luc,
auch Dir danke ich, hab ich gleich ausprobiert
Ist bei mir Office 16
Userbild
Vielen Dank, jetzt hab ich zwei Versionen und bin Happy....
Gruss Torsten
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 19:21:04
Nepumuk
Hallo Torsten,
die Klasse gibt es seit Excel 2007. Mit welcher Version testest du?
Gruß
Nepumuk
Anzeige
AW: Daten aus geschlossener Excel Datei holen
20.05.2019 19:32:46
Blackjack2019
Hallo Nepumuk,
Luc hat mir gerade den Hinweis gegeben und hab es gleich ausprobiert funktioniert super. Ich bin in diesen Dingen nicht fit hab mir das alles ohne Handbücher, Schulungen, oder andere Hilfe beigebracht, aber irgendwann komme ich an meine persönlichen Grenzen da brauch ich einfach Hilfe. Ich weiß auch manchmal gar nicht was ich da mache, nur was ich will und probiere dann so alles Mögliche aus bis es dann irgendwann futzt. Danke Deiner Hilfe und den Hinweis von Luc bin ich wieder mal ein ganzes Stück weitergekommen und lerne immer wieder was dazu.... Hab schon so einiges programmiert aber eben nur einfache Sachen.
Danke nochmal für die tolle und vor allem schnelle Unterstützung, würde gerne auf Euch zurückkommen wenn ich meine Idee weiter ausgebaut habe.
Gruss Torsten
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten aus geschlossener Excel Datei holen


Schritt-für-Schritt-Anleitung

  1. VBA-Umgebung öffnen: Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (dein Arbeitsblatt)" und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Public Sub Kopieren()
       Dim objWorkbook As Workbook, objFileDialog As FileDialog
       Dim strPath As String
       Set objFileDialog = Application.FileDialog(msoFileDialogOpen)
       With objFileDialog
           .AllowMultiSelect = False
           .FilterIndex = 1
           .InitialFileName = "C:\Temp\"
           .Title = "Importdatei auswählen"
           If .Show Then strPath = .SelectedItems(1)
       End With
       Set objFileDialog = Nothing
       If strPath <> vbNullString Then
           Application.ScreenUpdating = False
           Call Worksheets("Auslesen").Cells.ClearContents
           Set objWorkbook = Workbooks.Open(Filename:=strPath, UpdateLinks:=3, ReadOnly:=True)
           Call objWorkbook.Worksheets(1).Range("A1:BB46").Copy( _
           Destination:=ThisWorkbook.Worksheets("Auslesen").Cells(1, 1))
           Call objWorkbook.Close(SaveChanges:=False)
           Set objWorkbook = Nothing
           Application.ScreenUpdating = True
       End If
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle Kopieren aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden": Stelle sicher, dass der Pfad zur Datei korrekt ist und die Datei tatsächlich existiert. Überprüfe auch, ob die Datei nicht geöffnet ist.

  • Meldung beim Einfügen von Daten: Füge den Befehl Application.CutCopyMode = False nach dem Einfügen der Daten hinzu, um den Zwischenspeicher zu leeren.

  • Sichtbarkeit der Arbeitsblätter: Wenn du die Arbeitsblätter nicht sichtbar machen möchtest, kannst du die Sichtbarkeit im Code unterdrücken, wie im obigen Beispiel gezeigt.


Alternative Methoden

  • Daten aus geschlossener Datei auslesen ohne VBA: Du kannst die Power Query-Funktion in Excel verwenden, um Daten aus einer geschlossenen Datei zu laden, ohne ein Makro schreiben zu müssen. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Arbeitsmappe.

  • Daten manuell kopieren: Öffne die geschlossene Datei, kopiere den gewünschten Bereich und füge ihn in das Zielblatt ein. Dies ist die einfachste Methode, wenn du nur gelegentlich Daten benötigst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um Daten aus einer geschlossenen Excel-Datei auszulesen:

Public Sub DatenAuslesen()
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = Workbooks.Open("C:\Temp\input.xlsx")
    Set ws = wb.Worksheets(1)

    ThisWorkbook.Worksheets("Auslesen").Range("A1").Value = ws.Range("A1").Value
    wb.Close False
End Sub

Mit diesem Code kannst du spezifische Zellen direkt aus einer geschlossenen Arbeitsmappe in dein Zielblatt übertragen.


Tipps für Profis

  • Verwendung von Error-Handling: Implementiere Error-Handling in deinem VBA-Code, um unerwartete Fehler abzufangen und dem Benutzer eine bessere Rückmeldung zu geben.

  • Performance optimieren: Deaktiviere die Bildschirmaktualisierung und die Ereignisverarbeitung während der Ausführung deines Codes, um die Performance zu verbessern.

Application.ScreenUpdating = False
Application.EnableEvents = False
' Dein Code hier
Application.ScreenUpdating = True
Application.EnableEvents = True
  • Daten aus anderer Datei holen ohne öffnen: Überlege, ob du den ExecuteExcel4Macro-Befehl verwenden möchtest, um Daten direkt aus einer geschlossenen Datei zu lesen, ohne sie zu öffnen.

FAQ: Häufige Fragen

1. Kann ich Daten aus einer geschlossenen Excel-Datei ohne VBA auslesen?
Ja, du kannst Power Query verwenden, um Daten aus einer geschlossenen Datei zu laden, ohne VBA zu nutzen.

2. Wie kann ich sicherstellen, dass meine Makros in jeder Excel-Version funktionieren?
Teste deine Makros in verschiedenen Excel-Versionen und achte darauf, dass du keine Funktionen verwendest, die erst in späteren Versionen eingeführt wurden.

3. Was mache ich, wenn mein Makro nicht funktioniert?
Überprüfe den Code auf Syntaxfehler, stelle sicher, dass die Datei vorhanden ist und dass der Pfad korrekt ist. Nutze Debugging-Tools im VBA-Editor, um Fehler zu identifizieren.

4. Wie kann ich die Sichtbarkeit von Arbeitsblättern steuern?
Verwende die Eigenschaften Visible von Arbeitsblättern, um diese ein- oder auszublenden, je nach Bedarf.

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