Страницы: 1
RSS
Импорт в Excel нескольких столбцов из таблицы Access
 
Здравствуйте!
Пишу макрос, который добавляет прописанный столбец из базы данных в место, куда укажет пользователь при помощи Refedit.

Код
Private Sub otobr4a1_Click()
 With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
        "ODBC;DSN=MS Access Database;DBQ=C:\Users\Îëüãà Àëáóòîâà\Desktop\Microsoft Access Áàçà äàííûõ.accdb;DefaultDir=C:\Users\Îëüãà Àëáóòîâà" _
        ), Array("à\Desktop;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _
        )), Destination:=Range(RefEdit4a1.Text)).QueryTable
        .CommandText = Array( _
        "SELECT Äàííûå.`4A1`" & "FROM Äàííûå ")
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlEntireRows
        .SavePassword = False
          .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Òàáëèöà_Çàïðîñ_èç_MS_Access_Database"
        .Refresh BackgroundQuery:=False
    End With
End Sub
 

Когда пользуюсь процедурой в первый раз, все работает хорошо.

Но проблема возникает тогда, когда я пытаюсь на этот же лист добавить этот же самый столбец или новый столбец. Думаю, дело все в этом блоке кода:

Код
  .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlEntireRows
        .SavePassword = False
          .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Таблица_запрос_из_MS_Access_Database"
        .Refresh BackgroundQuery:=False

Выложить сам экселевский файл с формой не могу, потому что он прицеплен к базе данных (без нее все равно, работать не будет). а базу данных я не могу выкладывать  :-(

Спасибо!
 
Насколько я понимаю при повторном запросе, он не может повторно создать второй такой же объект, с таким же именем, ("Таблица_запрос_из_MS_Access_Database" т.к. такой объект уже существует.
Пробуйте перед созданием, проверять на наличие соединения, и либо пропускать создание соединения, либо удалять старое и делать новое соединение с таким же именем.
 
Marchuk, спасибо Вам огромное! У меня все заработало. Я просто убрала из кода строчку  

Код
  .ListObject.DisplayName = "Таблица_запрос_из_MS_Access_Database"
 
 
Не за что )
Страницы: 1
Наверх