Wenn wir Excel-Programmierung verwenden, müssen wir häufig eine Datenbank verwenden.
Wie stellt man also eine Verbindung zur Datenbank her und liest dann Daten aus der Datenbank?
VBA stellt eine Verbindung zur SQL SERVER-Datenbankinstanz her:
Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 'String zum Herstellen einer Verbindung mit der Datenbank strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ Benutzer ];Passwort=[Passwort];Initial Catalog=[Datenbank];Datenquelle=[Datenbank-IP-Adresse oder Datenbankservername];Verbinden Timeout=720; " 'Abfrageanweisung, wenn die SQL-Anweisung sehr lang ist, können Sie strSQL=strSQL+ verwenden, um die Anweisungen in mehrere Absätze aufzuteilen. Wenn die Anweisung sehr kurz ist, können Sie sie nur in eine Zeile schreiben. strSQL = "select * from Hy_KPI_Shop_Dept_WeekRpt " strSQL = strSQL+"where sdate='2014-01-01' order by sdate,shopid " Set conn = New ADODB.Connection Set ds = New ADODB.Recordset 'Open Database Connection conn.Open strConn 'Dieser Satz und Verbinden Sie sich mit der Datenbankverbindungszeichenfolge Timeout = 720 bedeutet, dass diese beiden Sätze die Wartezeit von VBA verlängern können, wenn die Anweisung über einen längeren Zeitraum ausgeführt wird. Ohne diese beiden Sätze meldet VBA häufig ein Abfrage-Timeout. conn.CommandTimeout = 720 Mit ds 'Daten gemäß der Abfrageanweisung abrufen Open strSQL, conn 'Automatisch das Hinzufügen aller Spaltenüberschriften steuern For col = 0 To ds.Fields.Count - 1 'Bitte beachten Sie, dass die Parameter in Offset( 0, Spalte) muss sein. Um korrekt zu sein, bedeutet dieser Satz, dass der Titel in die erste Zeile geschrieben wird, beginnend mit Zelle A1. Wenn Sie die Titelzeile nicht schreiben möchten, können Sie den folgenden Satz auskommentieren. Worksheets("KPI-Wochenbericht für jede Klasse im Geschäft").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next 'Alle Datenzeilen hinzufügen, bedeutet dieser Satz dass die Abfrageergebnisse geschrieben werden In der ersten Zeile beginnt es mit Zelle A1, aber da die Titelzeile in der ersten Zeile geschrieben wird, wird diese Zeile tatsächlich aus einer Zeile unterhalb des Titels geschrieben. Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With 'Schließen Sie die Datenbankverbindung und löschen Sie die Ressourcen. Set ds = Nothing conn.Close Set conn = Nothing