Как загрузить данные в список формы пользователя Excel из формы доступа напрямую?

#excel #vba #ms-access #userform

#excel #vba #ms-access #пользовательская форма

Вопрос:

Я хочу загрузить некоторые данные из Access в список пользовательских форм Excel. Сейчас я создаю ADODB.Connection для подключения access и создания ADODB.Recordset для хранения данных, во-первых. Во-вторых, я использую Range("xx").CopyFromRecordset для копирования данных на лист Excel. В-третьих, назовите этот диапазон Excel как « ResultSet «. В-четвертых, используйте Me.ListName.RowSource="ResultSet" для копирования данных из листа Excel в ListBox.

Как вы можете видеть, я использую четыре шага для завершения этой работы. Есть ли способ пропустить шаг 2 и шаг 3, копируя данные из Access в ListBox напрямую?

Спасибо

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

1. Является ли набор записей динамическим? Я бы использовал инструменты внешних данных Excel для импорта данных Access в электронную таблицу в Excel. Если параметры в вашей пользовательской форме часто меняют источник списка, это может не способствовать повышению производительности. Если набор записей более или менее статичен, вы можете один раз установить внешний источник и источник списка и использовать кнопку обновления Excel в любое время, когда вам нужно обновить источник данных. Если вы ссылаетесь на таблицу, используйте опцию «Из Access», в противном случае «Из других источников»> «Из Microsoft Query» должны предоставить вам доступ либо к таблицам, либо к запросам.

2. @ChristopherD. Спасибо за ответ. Да, он динамический. Кроме того, причина, по которой я хочу пропустить шаг 2 и шаг 3, заключается в том, что я не хочу, чтобы пользователи видели данные в Excel. Я просто хочу, чтобы данные отображались в списке.

Ответ №1:

Я нашел одну статью. Ниже приведен код, а это ссылка.

   With rs
    .MoveLast
    NoOfRecords = .RecordCount
    .MoveFirst
  End With
  'Set the number of ListBox columns = number of fields in the recordset
  ListBox1.ColumnCount = rs.Fields.Count
  'Load the listbox with the retrieved records
  ListBox1.Column = rs.GetRows(NoOfRecords)
  

Спасибо

Ответ №2:

Для списка с одним столбцом

Попробуйте вручную отредактировать список с помощью цикла:

 Me.ListName.Clear 'First clear existing list
With Me.ListName
    While rs.EOF = False
        .AddItem rs.Fields(0).Value
        rs.MoveNext
    Wend
End With
  

Замените этот код шагами 2-4.

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

1. Спасибо за ответ. Один вопрос: он загружает данные одну ячейку за другой, верно? Будет ли это медленнее, чем CopyFromRecordset ?

2. @kzhang12 Да, он загружается по одному и работает медленнее, чем ваш текущий код. В зависимости от размера, возможно, не заметно медленнее, но копирование набора записей или связывание с внешними данными будет быстрее. Вы можете попробовать напрямую установить источник списка в набор записей, но я никогда раньше этого не пробовал. Я использую Access вместо пользовательских форм, так что это немного выходит за рамки моего опыта.