Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1692to1696
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
Anzeige
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
Anzeige
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
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

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige