Обновление данных Excel из запроса MS Access без вредных ссылок? - PullRequest
0 голосов
/ 14 мая 2018

У нас есть книга Excel, в которой много сводных таблиц, и все они ссылаются на основную вкладку «Данные», которую мы копируем и вставляем из запроса MS Access.На эти данные ссылаются через несколько функций SUMIFS, несколько сводных таблиц, и у нас есть Имя, связанное со столбцами этой вкладки и т. Д.

Но мы бы хотели регулярно обновлять эти данные, не разрушая все.Есть ли код VBA, который мог бы сделать это из MS Access?В идеале он должен очистить ячейки вкладки «Данные», а затем вставить туда вывод запроса.Сначала я рассмотрел transferspreadsheet, но, похоже, он заменит целые листы за раз и уничтожит все эти ссылки.

Есть ли "более безопасный" способ обновить / экспортировать эти данные в лист Excel?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы можете легко скопировать данные в Excel, используя метод Range.CopyFromRecordset:

Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
excelApp.Open strPathToExcelFile
'excelApp.Workbooks(1).Worksheets("Data").UsedRange.ClearContents 'To clear existing content
excelApp.Workbooks(1).Worksheets("Data").Cells(1,1).CopyFromRecordset CurrentDb.QueryDefs("MyQuery").OpenRecordset
excelApp.Workbooks(1).Close
excelApp.Quit
0 голосов
/ 14 мая 2018

Ваши пользователи напрямую взаимодействуют с вкладкой ДАННЫЕ в Excel, или она существует только для целей подачи данных на другие вкладки, которые выполняют вычисления, таблицы и т. Д.? Потому что Access не очень хорош (насколько мне известно) при подаче данных на определенную вкладку Excel, но если вы запустите команду OutputTo, чтобы подать данные запроса на лист SEPARATE Excel (имя файла отличается от вашего текущего файла Excel), а затем, вместо того, чтобы связывать все данные на вкладках вашей текущей книги с вкладкой «ДАННЫЕ» той же самой книги, свяжите данные с внешним листом, созданным Access.

Или, если ваши пользователи ДЕЙСТВИТЕЛЬНО взаимодействуют с вкладкой ДАННЫЕ, то свяжите данные на вкладке ДАННЫЕ с внешним листом, созданным Access.

Пример функции приведен ниже:

Function ExportDataAndOpenExcel()

'1: Delete the old Data sheet if it exists 
   If FileExists("C:\User\Desktop\Data.xlsx") Then
      SetAttr "C:\User\Desktop\Data.xlsx", vbNormal
      Kill "C:\User\Desktop\Data.xlsx"
   End If

'2: Export the data in query to Data.xlsx
    DoCmd.OutputTo acOutputQuery, "MyQuery", acFormatXLSX, _ 
          "C:\User\Desktop\Data.xlsx"

'3: Open the Excel sheet with the tabs and calculations on it
    Dim oApp As Object
       Set oApp = CreateObject("Excel.Application")
       oApp.Visible = True
       oApp.workbooks.Open ("C:\User\Desktop\MyWorkbook.xlsx")

End Function
...