Excel VBA — Как заполнить массив из SQL-запроса

#sql #excel #vba

#sql #excel #vba

Вопрос:

Я пытался написать фрагмент кода, который позволил бы мне запрашивать базу данных SQL и использовать возвращаемые значения для заполнения выпадающего списка.

Запрос выполняется нормально, когда я прошу его вернуть значения на рабочий лист, однако я не хочу, чтобы они были там, я просто хочу сохранить их в массиве, который будет использоваться полем со списком.

Вот что у меня есть на данный момент…

 Sub testQuery()
Dim varConn As String
Dim SQL As String
Dim test As String


Range("A1").CurrentRegion.ClearContents

varConn = "ODBC; DSN=Traceability DB;UID=XXX;PWD=XXX"

SQL = "Select Distinct ""Date"" from testtable"

With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"), SQL:=SQL)
    .Refresh
End With

UserForm1.Show

End Sub
  

Я не уверен, как заменить диапазон («A1») на массив.

Примечание: это используется в последней версии Excel для MAC.

Спасибо за помощь

Комментарии:

1. На самом деле вы мало программируете в Excel, но разве диапазон («A1») не относится к одной ячейке? Должно ли это быть что-то вроде Range («A1: E15»)?

Ответ №1:

Сохраните его в наборе записей. Что-то вроде этого:

 Set rs = db.OpenRecordset("Select Distinct ""Date"" from testtable")
  

Для доступа к записям в наборе записей используйте GetRows
Что-то вроде этого:

 data = rs.GetRows(j)
  

а затем перебирать данные.

Комментарии:

1. Я посмотрел онлайн и нашел несколько примеров, которые определяют db как as: Dim db как Database Моя проблема в том, что этот тип данных мне по какой-то причине недоступен, кто-нибудь знает, почему это может быть?

2. Я не эксперт по VBA, но, похоже, у вас нет соответствующей ссылки. В чем именно ошибка?

3. Ошибка: пользовательский тип не определен. Я просмотрел доступную ссылку, и у меня выбрано следующее: Excel, Forms и библиотека объектов Office. Доступные из них: OLE Automation, Solver, VBA Project, библиотека типов диаграммы 14, Microsoft Graph, библиотека объектов Powerpoint и Word, а также расширяемый Visual Basic для приложений

4. Взгляните на это: dbforums.com/microsoft-access /… и это: bytes.com/topic/access/answers / … может быть, что-нибудь решит вашу проблему