6.1k Aufrufe
Gefragt in Tabellenkalkulation von
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.

8 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo critchm,

Habe aus einer Datenbank eine Abfrage (Tabelle) mittels aufgezeichneten Makro nach Excel importiert:

>Makro speichern in
>Diese Arbeitsmappe

und konnte innhalb dieser Datei das Makro in jedem beliebigen Tabellenblatt anwenden.

Sollte das Makro in mehreren Dateien anzuwenden sein dann
>persönliche Makroarbeitsmappe


siehe auch:

http://www.online-excel.de/excel/singsel_vba.php?f=113

Gruß

Paul1
0 Punkte
Beantwortet von
Hallo Paul1,

erstmal danke fuer deine Rueckmeldung!
Leider funktioniert es auch in "Diese Arbeitsmappe" nicht.

Ich habe andere Source Type Werte (0,2,3) ausprobiert und bekam
anstelle des Laufzeitfehlers 13 nun den Fehler 5.

Irgendwelche Ideen warum es immer noch nicht funktioniert?

Danke nochmals und beste Gruesse,

critchm
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo critchm,

Mest Test bezog sich auf eine Access-Datenbank, in Deinem Fall handelt es sich um eine SQL-Datenbank und da ist es möglich das einige Felddatentypen mit Excel nicht kompatibel sind.

Hier ein Link für ein spezielles SQL-Entwickler Forum:

http://social.technet.microsoft.com/Forums/sqlserver/de-DE/home?category=sqlserver

Gruß

Paul1
0 Punkte
Beantwortet von
Hallo Paul1,

ich werde das am Montag mal ausprobieren, danke!!

Beste Grüße,
critchm
0 Punkte
Beantwortet von
Hallo Paul1,

ich muss leider zugeben, dass mir das so gar nicht weiterhilft :-).
Gibt es vielleicht eine funktionierende Alternative zu meinem Makro?

Danke!!!!
critchm
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo critchm,

Probiers mit der Query-Methode:

>Excel-Datei
>Daten
>Externe Daten importieren
>Neue Abfrage erstellen
>Datenquelle auswählen
statt Microsoft Access-Datenbank, wähle
> <Neue Datenquelle>
>Durchsuchen nach Deiner SQL-Datenbank
>Tabelle oder nur Spalten auswählen

Zeichne diesen Vorgang als Makro auf entweder>Makro speichern in
>Diese Arbeitsmappe
oder
>persönliche Makroarbeitsmappe

Leider kann ich es nicht testen, zumal mir keine SQL-Datenbank zur Verfügung steht, mit Access funktioniert es jedoch problemlos.

Gruß

Paul1

[sub]Excel > Access > MS-Office 2003
MS Windows XP Professional SP3
MS Windows 7 Professional SP1
ECDL-Syllabus Version 4.0[/sub]
0 Punkte
Beantwortet von
Hallo Paul1,

vielen Dank fuer deine Hilfe, es funktioniert jetzt.

Hier mein Code:

Sub Importer()

Dim strUsername As String
Dim strComputerID As String
Dim strPartition As String
Dim strServer As String
Dim strDatabase As String
Dim strServerFriendly As String
Dim strWS5 As String

strWS5 = ActiveSheet.Name
If Not Worksheets(strWS5).Cells(1, 1) = "" Then
If MsgBox("Overwrite existing data?", vbYesNo + vbQuestion,
"Overwrite") = vbNo Then Exit Sub
Worksheets(strWS5).Range(Worksheets(strWS5).Cells(1, 1),
Worksheets(strWS5).Cells(1000, 3)).Clear
End If
strServer = InputBox("Enter Servername", "Servername",
"SQLEXPRESS")
strDatabase = InputBox("Enter Database name", "Database",
"ALSPEC")

strComputerID = Environ("Computername")
strUsername = Environ("Username")
strPartition = Left(Environ("Userprofile"), 1)
If strServer = "" Then Exit Sub
If strDatabase = "" Then Exit Sub
If strWS5 = "" Then Exit Sub

With ActiveSheet.ListObjects.Add(SourceType:=0,
Source:=Array(Array("ODBC;DRIVER=SQL Server;SERVER=" &
strComputerID & "\" & strServer &
";UID=;Trusted_Connection=Yes;APP=Microsoft Office 2013;WSID="
& strComputerID & ";DATABASE=" & strDatabase & "")),
Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT MISC_DATA.TEXT_1,
MISC_DATA.TEXT_2, MISC_DATA.TEXT_3" & Chr(13) & "" & Chr(10)
& "FROM " & strDatabase & ".dbo.MISC_DATA MISC_DATA" &
Chr(13) & "" & Chr(10) & "WHERE
(MISC_DATA.CODE_1='TEMP_SCREENREPORT')" & Chr(13) & "" &
Chr(10) & "ORDER BY MISC_DATA.TEXT_2")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Screen_Data_Import"
.Refresh BackgroundQuery:=False
End With

End Sub


Ich habe es noch nicht auf anderen Computern getestet, frage mich
jedoch ob das "Microsoft Office 2013" ein Problem geben wird. Kann
ich die entsprechende Version vielleicht abfragen und per Variable
einfuegen?

Danke nochmal!!!

Beste Gruesse,
critchm
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo critchm,

Freut mich, dass es jetzt gelungen ist, normalerweise sind Importe aus anderen Anwendungen reine Routine, aber Stolpersteine gibt es immer wieder.

Zu Deiner letzten Frage weiß ich leider selber noch nichts Konkretes.

schönen Tag noch

Gruß

Paul1
...