Запуск Access ImportExport из VBS не удается, если VBS выполняется из Excel VBA - любая идея?

У меня есть файл Excel (file1) с макросом, который имеет эту строку:

Shell "wscript " & SFilename, vbNormalFocus

Где "SFilename" - это имя файла VBS.

В файле VBS у меня есть строка:

appAccess.DoCmd.RunSavedImportExport ("ImportMonthlyData")

Над этой строкой есть несколько строк, таких как:

appAccess.DoCmd.OpenQuery ("Insert Detail")

И в vbs on Excel file2 выполняется много работы в Excel (а не в том же файле, который содержит макрос wscript).

Когда я запускаю файл vbs, дважды щелкнув vbs в проводнике, все работает отлично.

Когда я запускаю макрос из файла Excel1 через макрос, происходит сбой vbs в строке ImportExport. Ошибка состоит в том, что он не может подать лист в Excel для импорта, и имя листа, отображаемое в сообщении об ошибке, имеет "$" в конце. Я не знаю, является ли "$" чем-то, что Access делает все время, потому что оно работает, когда я использую проводник, или если "$" добавляется по какой-то другой причине. Тем не менее, я думаю, это не проблема.

Я считаю, что проблема возникает из-за того, что ImportExport пытается найти лист в Excel file1 вместо file2.

Как вы думаете? И если это проблема, как мне ее исправить?

2 ответа

Итак, вы пытаетесь импортировать данные Excel в Access? Зачем теперь запускать все это с помощью VBA, которая гораздо менее загадочна и гораздо более интуитивна по сравнению с запущенными пакетными сценариями.

Ниже приведен общий код для импорта данных из определенных листов во все файлы EXCEL (имена листов одинаковы во всех файлах), которые находятся в одной папке. Все листы EXCEL-файлов с одинаковыми именами должны иметь данные в одинаковом формате и формате.

Dim strPathFile As String, strFile As String, strPath As String
Dim blnHasFieldNames As Boolean
Dim intWorksheets As Integer

' Replace 3 with the number of worksheets to be imported
' from each EXCEL file
Dim strWorksheets(1 To 3) As String

' Replace 3 with the number of worksheets to be imported
' from each EXCEL file (this code assumes that each worksheet
' with the same name is being imported into a separate table
' for that specific worksheet name)
Dim strTables(1 To 3) As String

' Replace generic worksheet names with the real worksheet names;
' add / delete code lines so that there is one code line for
' each worksheet that is to be imported from each workbook file
strWorksheets(1) = "GenericWorksheetName1"
strWorksheets(2) = "GenericWorksheetName2"
strWorksheets(3) = "GenericWorksheetName3"

' Replace generic table names with the real table names;
' add / delete code lines so that there is one code line for
' each worksheet that is to be imported from each workbook file
strTables(1) = "GenericTableName1"
strTables(2) = "GenericTableName2"
strTables(3) = "GenericTableName3"

' Change this next line to True if the first row in EXCEL worksheet
' has field names
blnHasFieldNames = False

' Replace C:\Documents\ with the real path to the folder that
' contains the EXCEL files
strPath = "C:\Documents\"

' Replace 3 with the number of worksheets to be imported
' from each EXCEL file
For intWorksheets = 1 To 3

      strFile = Dir(strPath & "*.xls")
      Do While Len(strFile) > 0
            strPathFile = strPath & strFile
            DoCmd.TransferSpreadsheet acImport, _
                  acSpreadsheetTypeExcel9, strTables(intWorksheets), _
                  strPathFile, blnHasFieldNames, _
                  strWorksheets(intWorksheets) & "$"
            strFile = Dir()
      Loop

Next intWorksheets

Видимо, Excel ищет в файле2 лист. Я не уверен, почему, но в качестве обходного пути я просто скопировал нужный лист из файла1 в файл2, выполнил необходимую работу и затем удалил лист.

Другие вопросы по тегам