У нас есть шаблон Excel, который предоставляется нам, и частью нашего процесса является загрузка всех вариантов этого шаблона в базу данных доступа, чтобы упростить просмотр данных.Мы создали макрос в базе данных доступа, чтобы помочь нам с проверкой всех данных в больших масштабах.
Текущий макрос открывает файл Excel, просматривает циклы и пересчитывает их на основе различных параметров, затем сохраняет файл ипередает его в базу данных.Я сохраняю файл открытым до тех пор, пока все передачи не будут выполнены, чтобы сэкономить сетевое время.
В настоящее время я выполняю это с помощью приведенного ниже кода, но получаю нежелательный результат, вызов вставки в доступ открывает другой экземпляр Excel столько для чтения версия того же файла.Похоже, что-то еще сделать позже с этим файлом.Есть идеи относительно этого поведения?Или есть лучший способ сделать это, если файл Excel уже открыт?Спасибо !!!
Редактировать: Это на самом деле не работает, как я надеялся.Второй открывающийся экземпляр никогда не изменяется, и кажется, что оператор вставки JET продолжает ссылаться на файл только для чтения, а не на экземпляр Excel, который у меня открыт.
Jay
Sub enumerateForm()
'Create Excel application
Dim appExcel As Excel.Application
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
'Open Form Template
wbFormTemplate = "7.31 Form 2017EY.xlsm"
Dim wbbasefile As Excel.Workbook
Set wbbasefile = appExcel.Workbooks.Open(wbFormTemplate, True, False)
'Dim wsctrl As Excel.Worksheet
Dim rsCubeFilters As DAO.Recordset
Dim Cube1Val(1 To 111) As String
Dim Cube2Val(1 To 111) As String
Dim Cube1filter As String
Dim cube2filter As String
Dim filterSheet As String
'Set recordsets for the loops. This is grabbing all the pivot filters for the enumeration process
Set rsCubeFilters = CurrentDb.OpenRecordset("SELECT * FROM [Cube1Values] WHERE [Filing] = 'HHS'")
'Loops through all Enumerations
Do While rsCubeFilters.EOF = False
'Empty the array for the cube filter
Erase Cube1Val
Erase Cube2Val
filterSheet = "Pt 1 Summary of Data"
'Cube 1 Filter Update (Situs State)
Cube1filter = rsCubeFilters(1).Value
wbbasefile.Sheets(filterSheet).PivotTables(filterSheet).PivotFields(Cube1filter).ClearAllFilters
wbbasefile.Sheets(filterSheet).PivotTables(filterSheet).CubeFields(37).EnableMultiplePageItems = True
Cube1Val(1) = rsCubeFilters(2).Value
wbbasefile.Sheets(filterSheet).PivotTables(filterSheet).PivotFields(Cube1filter).VisibleItemsList = Array(Cube1Val)
'Cube 2 Filter Update (Legal Entity)
cube2filter = rsCubeFilters(3).Value
wbbasefile.Sheets(filterSheet).PivotTables(filterSheet). _
PivotFields(cube2filter).ClearAllFilters
wbbasefile.Sheets(filterSheet).PivotTables(filterSheet) _
.CubeFields(11).EnableMultiplePageItems = True
Cube2Val(1) = rsCubeFilters(4).Value
wbbasefile.Sheets(filterSheet).PivotTables(filterSheet).PivotFields(cube2filter).VisibleItemsList = Array(Cube2Val)
'Refresh All Cubes
appExcel.Calculation = xlCalculationAutomatic
wbbasefile.RefreshAll
appExcel.CalculateUntilAsyncQueriesDone
wbbasefile.Save
Dim rsExcelRanges As DAO.Recordset
Dim conn As ADODB.Connection
Set rsExcelRanges = CurrentDb.OpenRecordset("SELECT * FROM [Excel Ranges] WHERE [Filing] = 'HHS'")
Set cn = CreateObject("ADODB.Connection")
ssql = "INSERT INTO [" & rsExcelRanges(3).Value & "] "
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & wbFormTemplate & "].[" & rsExcelRanges(1).Value & "$" & rsExcelRanges(2).Value & "]"
CurrentDb.Execute ssql
rsCubeFilters.MoveNext
Loop