Я использую макрос Excel для определения диапазона данных в Excel, а затем вызываю «objAccess.DoCmd.TransferSpreadsheet», чтобы импортировать данные из этого диапазона в таблицу Access. Этот импорт не работает все время.
Я пришел к выводу, что макрос работает нормально, когда открыт только один экземпляр Excel. Тем не менее, импорт данных не удается, когда другой экземпляр уже открыт. В последнем случае открывается база данных Access, и файл Excel, из которого я запускаю макрос, открывается заново (в режиме только для чтения) в другом экземпляре Excel. Фактической ошибки нет, но требуемый импорт не выполняется. Почему это происходит?
Sub Excel_2_Access()
Dim strPath As String
Dim strwbPath As String
Dim strRange As String
Dim objAccess As Access.Application
Dim wbActive As Workbook
'get database path
strPath = Worksheets("error").Range("Access_DB_Path").Value & "\" & Worksheets("error").Range("Access_DB").Value
'open database
Set objAccess = New Access.Application
Call objAccess.OpenCurrentDatabase(strPath)
objAccess.Visible = True
'access import
Worksheets("error").Columns("P:P").Calculate
Set wbActive = ActiveWorkbook
strwbPath = Application.ActiveWorkbook.FullName
strRange = "error!M2:M" & (Worksheets("error").Range("WKN_count").Value + 2)
Call objAccess.DoCmd.TransferSpreadsheet(acImport, 8, "WKN_Mapping", strwbPath, True, strRange)
objAccess.Forms("MX_Import").Refresh
End Sub
Поскольку макрос довольно короткий, я включил весь код для вашей справки. Однако я не думаю, что то, как указан диапазон или указаны имена, действительно имеет отношение к вопросу.
Желательным результатом будет наличие макроса Excel, который выполняет перенос из Excel в Access независимо от того, есть ли другие открытые экземпляры Excel или нет.
Существует ли такая вещь, как основной экземпляр Excel (первый, который был открыт), который имеет особый статус? Есть ли способ предоставить конкретный экземпляр Excel, в котором находится книга, при вызове функции Access из Excel? Или есть более надежный способ передачи данных, который обычно позволяет избежать этой проблемы с несколькими экземплярами?