Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ADO - Daten aus geschlossener Arbeitsmappe holen

Forumthread: ADO - Daten aus geschlossener Arbeitsmappe holen

ADO - Daten aus geschlossener Arbeitsmappe holen
23.09.2018 17:21:29
Timo
Hallo zusammen,
Sepp hat mir Anfang September einen Code zusammengestellt, mit dem man via ADO Daten in eine "geschlossenen" Arbeitsmappe schreiben kann.
Der Code sieht folgendermaßen aus:
Sub updateData()
Dim ExcelTable As Object
Dim Path As String, Table As String, SourceRange As String
Dim SQL As String, Con As String
Dim Seriennummer As String
Path = "C:\Datenbank\Mappe1.xls"  ' Dateiname - Anpassen!
Table = "Tabelle2"                ' Tabellenname - Anpassen
SourceRange = "A1:A2"             ' Bereich - Anpassen!
Seriennummer = ThisWorkbook.Worksheets("Tabelle3").Range("A1").Value
SQL = "select * from [" & Table & "$" & SourceRange & "]"
If Right(Path, 3) = "xls" Then
Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties=Excel 8.0;" _
& "Data Source=" & Path & ";"
ElseIf Right(Path, 4) = "xlsx" Or Right(Path, 4) = "xlsm" Then
Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Extended Properties=""Excel 12.0;HDR=YES"";" _
& "Data Source=" & Path & ";"
End If
Set ExcelTable = CreateObject("ADODB.Recordset")
ExcelTable.Open SQL, Con, 3, 3
With ExcelTable
.Movefirst
.Fields(0) = Seriennummer
.Update
.Close
End With
Set ExcelTable = Nothing
End Sub

Nun suche ich einen Code für den umgekehrten Weg.
Ich möchte via ADO Daten aus einer "geschlossenen" Arbeitsmappe holen.
Die Lösung sollte nicht über eine Formel funktionieren die auf die Mappe verlinkt.
Sondern wirklich über die oben beschriebene Methode.
Könnt ihr mir da helfen?
Viele Grüße
Timo
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ADO - Daten aus geschlossener Arbeitsmappe holen
23.09.2018 17:23:06
Hajo_Zi
Hallo Timo,
keine Ahnung ob das ADO ist.
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

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Anzeige
AW: ADO - Daten aus geschlossener Arbeitsmappe holen
23.09.2018 17:52:35
Timo
Hallo Hajo,
leider funktioniert deine Methode über eine Formel.
".Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")""
Ich benötige aber eine Methode ohne Formel.
Danke und viele Grüße
Timo
AW: ADO - Daten aus geschlossener Arbeitsmappe holen
23.09.2018 17:53:43
Timo
Hallo Hajo,
leider funktioniert deine Methode über eine Formel.
".Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")""
Ich benötige aber eine Methode ohne Formel.
Danke und viele Grüße
Timo
Anzeige
AW: ADO - Daten aus geschlossener Arbeitsmappe holen
23.09.2018 18:22:18
Sepp
Hallo Timo,
das geht z.B. so.
Sub getData()
  Dim objADO As Object
  Dim Path As String, Table As String, SourceRange As String
  Dim SQL As String, Con As String

  Path = "D:\Forum\test.xls" 'Pfad - Anpassen! 
  Table = "Tabelle2" 'Tabellenname - Anpassen 
  SourceRange = "A1:A100" 'Bereich - Anpassen! 

  SQL = "select * from [" & Table & "$" & SourceRange & "]"

  If Right(Path, 3) = "xls" Then
    Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Extended Properties=Excel 8.0;" _
      & "Data Source=" & Path & ";"
  ElseIf Right(Path, 4) = "xlsx" Or Right(Path, 4) = "xlsm" Then
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
      & "Extended Properties=""Excel 12.0;HDR=YES"";" _
      & "Data Source=" & Path & ";"
  End If

  Set objADO = CreateObject("ADODB.Recordset")

  objADO.Open SQL, Con, 3, 3

  Range("A1").CopyFromRecordset objADO
  
  objADO.Close
  
  Set objADO = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: ADO - Daten aus geschlossener Arbeitsmappe holen
23.09.2018 22:37:34
Timo
Hallo Sepp,
perfekt!
Genau so habe ich mir das vorgestellt - es funktioniert super.
Herzlichen Dank
Timo
AW: ADO - Daten aus geschlossener Arbeitsmappe holen
24.09.2018 08:14:11
Luschi
Hallo Sepp,
ich bin der Meinung, daß der Verbindungs-String nicht unmittelbar vom Dateityp der Exceldatei, sondern von der verwendeten Excel-Version abhängig ist.
Eine genauere Übersicht findet man hier: laut https://www.connectionstrings.com/ace-oledb-12-0/
Auch gibt es noch einen feinen Unterschied zwischen xlsx- und xlsm/xlsb-Datei.
Gruß von Luschi
aus klein-Paris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

ADO: Daten aus geschlossener Arbeitsmappe holen


Schritt-für-Schritt-Anleitung

Um Daten aus einer geschlossenen Arbeitsmappe mit ADO in Excel zu holen, befolge diese Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (DeineMappe)“ und wähle „Einfügen“ > „Modul“.

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

    Sub getData()
       Dim objADO As Object
       Dim Path As String, Table As String, SourceRange As String
       Dim SQL As String, Con As String
    
       Path = "D:\Forum\test.xls"  ' Pfad anpassen!
       Table = "Tabelle2"          ' Tabellenname anpassen
       SourceRange = "A1:A100"     ' Bereich anpassen!
    
       SQL = "select * from [" & Table & "$" & SourceRange & "]"
    
       If Right(Path, 3) = "xls" Then
           Con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                 "Extended Properties=Excel 8.0;" & _
                 "Data Source=" & Path & ";"
       ElseIf Right(Path, 4) = "xlsx" Or Right(Path, 4) = "xlsm" Then
           Con = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                 "Extended Properties=""Excel 12.0;HDR=YES"";" & _
                 "Data Source=" & Path & ";"
       End If
    
       Set objADO = CreateObject("ADODB.Recordset")
       objADO.Open SQL, Con, 3, 3
    
       Range("A1").CopyFromRecordset objADO
    
       objADO.Close
       Set objADO = Nothing
    End Sub
  4. Anpassungen vornehmen: Stelle sicher, dass der Pfad zur Datei, der Tabellenname und der Bereich korrekt sind.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro getData über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Fehler: „Die Quelldatei oder der Quellbereich ist ungültig!“

    • Überprüfe den angegebenen Pfad und stelle sicher, dass die Datei existiert und der Bereich korrekt angegeben ist.
  • Fehler: „Provider konnte nicht gefunden werden“

    • Stelle sicher, dass die richtigen OLEDB-Provider installiert sind (Microsoft.ACE.OLEDB.12.0 für .xlsx und .xlsm, Microsoft.Jet.OLEDB.4.0 für .xls).

Alternative Methoden

Falls du ADO nicht verwenden möchtest, gibt es auch andere Möglichkeiten, Daten aus einer geschlossenen Arbeitsmappe zu importieren, beispielsweise:

  • Excel-Formeln: Diese Methode ist allerdings nicht gewünscht, da sie auf Formeln basiert.
  • Power Query: Eine leistungsstarke Funktion in Excel, um Daten aus verschiedenen Quellen zu importieren, einschließlich geschlossener Arbeitsmappen.

Praktische Beispiele

Hier ist ein Beispiel, wie man ADO in einer realen Situation nutzen kann:

Angenommen, du hast eine Excel-Datei mit Verkaufsdaten in D:\Daten\Verkauf.xlsx und möchtest den Bereich A1:B10 von Tabelle1 importieren. Der Code würde so aussehen:

Sub ImportSalesData()
    Dim objADO As Object
    Dim Path As String, Table As String, SourceRange As String
    Dim SQL As String, Con As String

    Path = "D:\Daten\Verkauf.xlsx"
    Table = "Tabelle1"
    SourceRange = "A1:B10"

    SQL = "select * from [" & Table & "$" & SourceRange & "]"

    ' Verbindungsinformationen wie oben beschrieben...

    Set objADO = CreateObject("ADODB.Recordset")
    objADO.Open SQL, Con, 3, 3
    Range("A1").CopyFromRecordset objADO
    objADO.Close
    Set objADO = Nothing
End Sub

Tipps für Profis

  • Verbindungspooling nutzen: Um die Leistung bei mehreren Datenabrufen zu verbessern, kannst du die Verbindung zu deiner Datenquelle offen halten.
  • Fehlerbehandlung implementieren: Füge Fehlerbehandlungsroutinen hinzu, um unerwartete Fehler abzufangen und zu verwalten.

FAQ: Häufige Fragen

1. Was ist ADO in Excel?
ADO (ActiveX Data Objects) ist eine Technologie, die es ermöglicht, auf Daten aus verschiedenen Quellen zuzugreifen, einschließlich Datenbanken und Excel-Arbeitsmappen.

2. Welche Excel-Versionen unterstützen ADO?
ADO wird in allen modernen Excel-Versionen unterstützt, einschließlich Excel 2010, 2013, 2016 und späteren Versionen.

3. Kann ich ADO auch für andere Dateiformate verwenden?
Ja, ADO kann auch für andere Datenquellen wie SQL-Datenbanken oder Access-Datenbanken verwendet werden, solange der richtige Provider angegeben wird.

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