Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1612to1616
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 Datei

Daten aus geschlossener Datei
16.03.2018 23:32:13
Dietmar
Hallo mal wieder in die Abendrunde,
tüftele schon eine ganze Weile an folgendem:
Möchte aus einer geschlossenen Datei Datenwerte in eine geöffnete Datei übertragen.
In der geöffneten Datei ist der VBA-Code.
In der geschlossenen Datei (also eigenständige Mappe)
- befinden sich Werte in den Spalten A bis G
- sind Werte in derzeit 500 Zeilen vorhanden, die aber weiter aufgefüllt werden
Folgender Code, den ich gefunden habe, funktioniert, hat aber zwei Mankos:
- dauert recht lange
- funktioniert nur, wenn geschlossene Datei vorher einmal auf- und zugemacht wurde
Sub Bereich_auslesen()
'** Dimensionierung der Variablen
Dim pfad As String, datei As String, blatt As String, Bereich As Range, zelle As Object
'** Angaben zur auszulesenden Zelle
Application.ScreenUpdating = False
pfad = "C:\MLC-ProvCalc"
datei = "MLC-ProvCalcDatenpool.xlsx"
blatt = "Tabelle1"
Range("J2").FormulaArray = "=MAX(ROW(1:65535)*('[" & datei & "]" & blatt & "'!A1:A65535""""))" _
Set Bereich = Range("A2:G" & Range("J2").Value)
'** 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
Application.ScreenUpdating = True
Range("J2").ClearContents
End Sub
Private Function GetValue(pfad, datei, blatt, zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen
'*** Dimensionierung der Variablen
Dim arg As String
'Sicherstellen, dass die 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)
End Function
Für eine Idee wäre ich wieder total dankbar!
Bzgl. der Geschwindigkeit: Liegt vllt. an der Array-Formel, die temporär verwendet wird?
Dietmar

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

Betreff
Datum
Anwender
Anzeige
AW: Daten aus geschlossener Datei
17.03.2018 11:30:22
Dietmar
Hallo Bernd,
vielen Dank für die Quellen.
Ich habe noch etwas gesucht, gefunden und getüftelt und folgenden Quellcode genommen.
Der BEGEISTERT mich absolut!
Er ist rasend-schnell und läuft absolut ohne Zicken!
Für das Einlesen von immerhin 12000 Datenzeilen aus der geschlossenen Datei braucht er bei mir keine 2 Sekunden!
Den Entwickler T. Ramel habe ich natürlich im Code belassen :-),Ehre wem Ehre gebührt! Habe im Netz nichts vergleichbar gutes gefunden! Ein paar kleine Ergänzungen habe ich vorerst eingebaut und markiert; die Notwendigkeit werde ich noch checken.
Option Explicit
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, sourceSheet As String, _
SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
'wird durch die HoleDaten aufgerufen
Dim strQuelle       As String
Dim Zeilen          As Long
Dim Spalten         As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range( _
SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from  _
closed Workbook"
GetDataClosedWB = False
End Function
Public Sub HoleDaten()
'Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
'Dietmar 17.3.2018 -> Läuft schnell wie Schmitz' Katze :-)
Dim Pfad            As String
Dim Dateiname       As String
Dim Blatt           As String
Dim Bereich         As String
Dim Ziel            As Range
Range("A2:G15000").ClearContents    'Dietmar 17.3.2018
Range("J3").Select                  'Dietmar 17.3.2018, kann wohl weg, noch testen
'MsgBox "Jetzt geht's los"
Pfad = "C:\MLC-ProvCalc\"
Dateiname = "MLC-ProvCalcDatenpool.xlsx"    'aus welcher Datei soll er holen?
Blatt = "Tabelle1"                          'von welcher Tabelle soll er holen?
Bereich = "A2:G15000"                       'aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("A2")          'Bei welcher Zelle Anfang, Daten reinzukopieren? _
(ActiveCell geht auch)
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Perfekt! Es stehen nun " & WorksheetFunction.CountA(Range("A:A")) - 1 & " Datensä _
tze für die Auswertung zur Verfügung."
End If
End Sub
Was ich jetzt noch brauche, ist einen Code, der in die andere Richtung funktioniert; also Daten von einer aktuell verwendeten Datei IN RICHTUNG EINER GESCHLOSSENEN Datei TRANSPONIERT (Bereich C3:C30 horizontal in ein Sheet der geschlossenen Datei in die erste freie Zeile). Werde dafür aber ein neues Posting aufmachen.
Schönen Tag noch!
VG Dietmar
Anzeige
Gerne und Danke für die Rückmeldung! owT
18.03.2018 01:41:33
Bernd

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige