Fragensteller
Daten per Excel VBA aus SQL Datenbank auslesen

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.
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) -
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