Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA Daten aus geschlossener Datei

Betrifft: VBA Daten aus geschlossener Datei von: Raphael H
Geschrieben am: 09.07.2013 11:38:03

Hallo zusammen,

ist es möglich mittels VBA einen ganzen Range aus einer geschlossenen Datei auszulesen (kopieren) und in die aktuell geöffnete einzulesen (einfügen)?

Die Dateien haben immer den selben Namen und sind auch immer am selben Ort gespeichert.

Momentan greife ich mittels Excelformel auf den Inhalt zu, ich denke aber das es mit VBA wesentlich schneller gehen sollte, da doch immer um die 15000 Zeilen mit 10-15 Spalten ausgelesen werden müssen.

Besten Dank für Eure Hilfe
Gruess
Raphael

  

Betrifft: AW: VBA Daten aus geschlossener Datei von: Hajo_Zi
Geschrieben am: 09.07.2013 11:40:23

Hallo Raphael,

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
    Dim Pfad            As String
    Dim Dateiname       As String
    Dim Blatt           As String
    Dim Bereich         As String
    Dim Ziel            As Range
    Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
    Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
    Blatt = "Tabelle1"  ' von welcher Tabelle soll er holen?
    Bereich = "A1:B9"   ' aus welchem Bereich soll er holen?
    Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer gesagt:  _
Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
    If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
        MsgBox "Daten importiert"
    End If
End Sub
GrußformelHomepage


  

Betrifft: WOW schnell von: Raphael H
Geschrieben am: 09.07.2013 11:47:34

Danke Hajo,

werde das heute Abend direkt austesten, bin gespannt wie sich das auf die Performance meiner Dateien auswirkt.

Gruess
Raphael


  

Betrifft: AW: WOW schnell von: Raphael H
Geschrieben am: 11.07.2013 22:06:07

Hallo Hajo,

falls du den Beitrag noch liest habe ich noch eine kleine Anmerkung welche du in den Code von Thomas Ramel einfügen kannst.
Wenn man als Text formatierte Zahlen mit dieser Funktion einfügt werden diese in eine normale Zahl umgewandelt, man muss bei Thomas Funktion die .value = .value weglassen, dann wird sozusagen 1 zu 1 importiert.

Gruess
Raphael


  

Betrifft: AW: WOW schnell von: Hajo_Zi
Geschrieben am: 12.07.2013 10:05:07

Hallo Raphael,

Danke für den Tipp. Ich setze die Funktion nicht ein.

Gruß Hajo


  

Betrifft: AW: WOW schnell von: Hajo_Zi
Geschrieben am: 12.07.2013 19:15:08

Hallo Raphael,

dann steht aber eine Formel in der Zelle.

Gruß Hajo


 

Beiträge aus den Excel-Beispielen zum Thema "VBA Daten aus geschlossener Datei"