MS Access VBA и макрос для экспорта - PullRequest
0 голосов
/ 06 марта 2019

У меня есть база данных MS Acccess 2013 со многими сохраненными запросами и связанными таблицами с электронными таблицами Excel.В частности, мне нужно экспортировать 3 файла, а также создавать резервные копии.В своей попытке автоматизировать его я пытаюсь использовать VBA.

Имена запросов:

query1
query2
query3

БД находится в \\Reports\Run\Data Я хотел бы ОБА первый и второй запросы кэкспорт в \\Reports\Type1\ и \\Reports\Type1\[new sub-folder 1] Я бы хотел, чтобы третий запрос экспортировал в \\Reports\Type2\ и \\Reports\Type2\[new sub-folder 2]

Одна из связанных электронных таблиц Excel (Table Name = Sheet1) имеет 1 одно поле и 1 одну запись, который является ReportDate.Я бы хотел, чтобы и [new sub-folder 1], и [new sub-folder 2] были единственной записью даты.Например, если запись 2019-03-06 была, обе подпапки должны называться «2019-03-06».Это мои резервные копии и сохраненные копии.

Экспорт должен перезаписать существующие файлы в \\Reports\Type1 и \\Reports\Type2.

Было бы неплохо, если возможно, иметь возможность добавлять имена файлов в новых подпапках к префиксу ReportDate.

Таким образом, конечный результат будет \\Reports\Type1\2019-03-06\20190306_query1.xlsx, \\Reports\Type1\2019-03-06\20190306_query2.xlsx и \\Reports\Type2\2019-03-06\20190306_query3.xlsx в качестве примера.

Я создал макрос для экспорта и преобразовал его в VBA в качестве отправной точки.Однако я не уверен, как сделать динамическое именование и динамически изменить путь экспорта.

1 Ответ

0 голосов
/ 16 марта 2019

Вот код, который я использовал.Я надеюсь, что это помогает кому-то еще!

Option Compare Database
Option Explicit

Public Function ExportExcel()

  'Declare all variables

  Dim file As Object

  Dim filepath As String
  Dim fp_report1 As String
  Dim fp_report2 As String
  Dim fp_report1_date As String
  Dim fp_report2_date As String
  Dim data1 As String
  Dim data2 As String
  Dim data3 As String
  Dim fp_report1_data1 As String
  Dim fp_report1_data2 As String
  Dim fp_report2_data3 As String
  Dim fp_reportdate As String
  Dim reportdate_backup As String
  Dim reportdate As String


  Dim data1_run As String
  Dim data2_run As String
  Dim data3_run As String

  Dim myVar As Date


  'Get report date from the ReportDate linked table
  myVar = DLookup("ReportDate", "tbl_reportdate", "ReportDate")

  ' Get current path
  filepath = CurrentProject.Path

  'Destination for files for dashboard
  fp_report1 = Left(filepath, 87) & "\report1\"
  fp_report2 = Left(filepath, 87) & "\report2\"

  'Location for backup with the date as the folder name
  fp_report1_date = Left(filepath, 87) & "\report1\" & Format(myVar, "yyyy-mm-dd")
  fp_report2_date = Left(filepath, 87) & "\report2\" & Format(myVar, "yyyy-mm-dd")

  'Location of raw reports to backup and date file
  fp_report1_data1 = Left(filepath, 97) & "report1_data1.xls"
  fp_report1_data2 = Left(filepath, 97) & "report1_data2.xls"
  fp_report2_data3 = Left(filepath, 97) & "report2_data3.xls"
  fp_reportdate = Left(filepath, 97) & "ReportDate.xlsx"

  'If the folders for the backup doesn't exist, create it, otherwise, do nothing.
  If Dir(fp_report1_date, vbDirectory) = "" _
  Then MkDir (fp_report1_date) _
  Else _

  If Dir(fp_report2_date, vbDirectory) = "" _
  Then MkDir (fp_report2_date) _
  Else _

  'Exact path with file name for backup of processed data in the appropriate date folder
  data1 = fp_report1_date & "\" & "data1.xlsx"
  data2 = fp_report1_date & "\" & "data2.xlsx"
  data3 = fp_report2_date & "\" & "data3.xlsx"
  reportdate_backup = fp_report1_date & "\" & "ReportDate.xlsx"

  'Exact path with file name for dashboard to automatically pull
  data1_run = fp_report1 & "data1.xlsx"
  data2_run = fp_report1 & "data2.xlsx"
  data3_run = fp_report2 & "data3.xlsx"
  reportdate = fp_report1 & "ReportDate.xlsx"

  'Export queries into the date backup folder
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "data1", data1
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "data2", data2
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "data3", data3

  'Copy the files from the date backup folder into the path to be used by the dashboard. This includes the raw data in the reports and all the processed reports
  FileCopy data1, data1_run
  FileCopy data2, data2_run
  FileCopy data3, data3_run
  FileCopy fp_report1_data1, fp_report1_date & "\" & "report1_data1.xls"
  FileCopy fp_report1_data2, fp_report1_date & "\" & "report1_data2.xls"
  FileCopy fp_report2_data3, fp_report2_date & "\" & "report2_data3.xls"
  FileCopy fp_reportdate, reportdate_backup
  FileCopy reportdate_backup, reportdate

End Function
...