Когда мы используем программирование Excel, нам часто приходится использовать базу данных.
Итак, как подключиться к базе данных и затем прочитать данные из базы данных?
VBA подключается к экземпляру базы данных SQL SERVER:
Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 'Строка для подключения к базе данных strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ пользователь ];Пароль=[пароль];Начальный каталог=[база данных];Источник данных=[IP-адрес базы данных или имя сервера базы данных];Подключиться Timeout=720; " 'Оператор запроса. Если оператор sql очень длинный, вы можете использовать strSQL=strSQL+ для соединения операторов, разделенных на несколько абзацев. Если оператор очень короткий, вы можете записать его только в одну строку. strSQL = "select * from Hy_KPI_Shop_Dept_WeekRpt" strSQL = strSQL+"where sdate='2014-01-01' порядок по sdate,shopid " Set conn = New ADODB.Connection Set ds = New ADODB.Recordset 'Открыть соединение с базой данных conn.Open strConn 'Это предложение и строка подключения к базе данных Connect Timeout=720 означает, что если оператор выполняется в течение длительного времени, эти два предложения могут продлить время ожидания VBA. Без этих двух предложений VBA часто сообщит о тайм-ауте запроса. conn.CommandTimeout = 720 With ds 'Получите данные в соответствии с оператором запроса. Откройте strSQL, conn 'Автоматически управляйте добавлением всех заголовков столбцов. For col = 0 To ds.Fields.Count - 1 'Обратите внимание, что параметры в Offset( 0, столбец) должно быть. Чтобы быть корректным, это предложение означает, что заголовок будет записан в первой строке, начиная с ячейки A1. Если вы не хотите писать строку заголовка, вы можете закомментировать следующее предложение. Worksheets("Еженедельный отчет KPI для каждого класса в магазине").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next 'Добавить все строки данных, это предложение означает что результаты запроса будут записаны в первой строке, начиная с ячейки A1, но поскольку строка заголовка записана в первой строке, эта строка фактически записывается из строки ниже заголовка. Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With 'Закройте соединение с базой данных и очистите ресурсы Set ds = Nothing conn.Close Set conn = Nothing