none
Daten per Excel VBA aus SQL Datenbank auslesen RRS feed

  • Frage

  • Hi!

    Ich habe die Makro Aufzeichnung genutzt waehrend ich in Excel den 
    SQL Server als Datenquelle hinzugefuegt habe. Die Daten wurden 
    erfolgreich importiert.
    Aber wenn ich den aufgezeichneten Code in einer neuen Tabelle 
    ausfuehre, bekomme ich eine Fehlermeldung. 

    Hier der aufgezeichnete Code:

    Sub Macro1()
    
    With ActiveSheet.ListObjects.Add(SourceType:=0, 
    Source:=Array("OLEDB;Provider=SQLOLEDB.1;Integrated 
    Security=SSPI;Persist Security Info=True;Data 
    Source=MEINPC\SQLEXPRESS;Use Procedure for Prepare=1;Auto 
    Translate=True;Packet Size=4096;Workstation ID=MEINPC;Use 
    Encryption for Data=False;Tag with column collation when 
    possible=False;Initial Catalog=MEINEDATENBANK"), 
    Destination:=Range("$A$1")).QueryTable
            .CommandType = xlCmdTable
            .CommandText = 
    Array("""MEINEDATENBANK"".""dbo"".""MEINETABELLE""")
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .SourceConnectionFile = _
            "C:\Users\USER\Documents\My Data 
    Sources\MEINPC_SQLEXPRESS MEINEDATENBANK 
    MEINETABELLE.odc"
            .ListObject.DisplayName = 
    "Table_MEINPC_SQLEXPRESS_MEINEDATENBANK_MEINETABEL
    LE"
            .Refresh BackgroundQuery:=False
        End With
        
    End Sub

    Hier die Fehlermeldung die in der Zeile "With ..." auftritt: 
    Laufzeitfehler 13 ...

    Warum funktioniert nicht einmal der aufgezeichnete Code?

    Im naechsten Schritt wuerde ich natuerlich gerne Variablen 
    einfuegen damit mein Programm auch andere nutzen koennen. 
    Aber dafuer muss es erstmal so funktionieren.

    Habt ihr Ideen woran es liegt?

    Danke und beste Gruesse,

    critchm.


    P.S.: Entschuldigt bitte die umstaendlichen Umlaute, aber ich habe 
    hier nur ein englisches Tastaturlayout.

    Sonntag, 25. August 2013 22:51

Alle Antworten

  • Hallo Critchm,

    aus dem Code wird - leider - nicht deutlich, wo tatsächlich Zeilenumbrüche sind. Normalerweise solltest Du beim Parsen erkenne, wo der Fehler genau ist. Ich habe einfach mal Dein Beispiel nachgespielt und kann keine Fehler feststellen. Ich habe - damit man es besser lesen kann - mal die Methoden und Eigenschaften durch neue Zeilen hervor gehoben:

    With ActiveSheet.ListObjects.Add _
        ( _
            SourceType:=0, _
            Source:=Array("OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=myServer;Initial Catalog=myServer"), _
            Destination:=Range("$A$1") _
        ).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array("dbo.Participants_Id")
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .AdjustColumnWidth = True
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With

    Ich habe mal den ganzen Kram weg gelassen, der überflüssig ist. Wenn Du mit EXCEL Aufzeichnungen machst, werden immer ALLE Einstellungen der Dialoge als Eigenschaften der Klassen mit aufgezeichnet.

    Als Fehlerbehandlung solltest Du Fehler 1004 abfangen, wenn Du versuchst, den Code ein zweites Mal laufen zu lassen, wenn sich im Bereich bereits eine Datenverknüpfung befindet - das funktionert nämlich nicht!


    MCM - SQL Server 2008
    MCSE - SQL Server 2012
    db Berater GmbH
    SQL Server Blog (german only)

    Montag, 26. August 2013 12:38
  • Hallo Critchm

    Alternativ zu Uwes Antwort, hier noch ein Tip. Ich mach immer reinen Tisch vor einem neuen Aufruf.

    Sheets(2).Rows("5:65536").Delete Shift:=xlUp
    On Error Resume Next
        Selection.QueryTable.Delete
    On Error GoTo 0

    Ciao Peter


    Sql Server 2008 R2 Sql Server 2008 R2 Business Intelligence Development Studio Sql Server 2008 R2 Management Studio Visual Basic 2010 Excel 2010 PowerPivot



    • Bearbeitet Peter01 Dienstag, 27. August 2013 10:34
    Dienstag, 27. August 2013 10:33