У меня есть несколько файлов Excel, которые обновляются с помощью макроса, и мастер-файл для управления открытием другого.В главном файле есть макрос Auto_Open, который открывает каждый документ, запускает макрос в документе, а затем закрывает его.Макрос каждого документа по существу обновляет все запросы внутри и сохраняет документ в двух разных местах.В довершение ко всему, я использую планировщик задач Window, чтобы открывать мастер-документ каждые два часа, начиная весь процесс.
Обычно это работает довольно хорошо.Тем не менее, я иногда получаю сообщение об ошибке, в котором говорится: «Не удается найти проект или библиотеку».Это происходит на первый взгляд случайным образом и каждый раз с другим документом (хотя никогда не с мастер-документом).Как только эта ошибка появляется, Excel полностью падает каждый раз, когда я пытаюсь открыть окно VBA.Макрос в указанном документе больше не будет запускаться с помощью макроса Auto_Open главного файла, и я должен воссоздать указанный документ с нуля.
Я попытался найти библиотеку в соответствии с предложением Microsoft (https://docs.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/can-t-find-project-or-library)но безрезультатно. Открытие окна VBA в уязвимом файле приводит к немедленному аварийному завершению, а после выполнения действий, описанных в статье выше, для незатронутого файла ничего не выявляется. Сбой возвращает следующий текст ошибки:
Подпись проблемы:
Название проблемы: APPCRASH
Имя приложения: EXCEL.EXE
Версия приложения: 16.0.11231.20130
Метка времени приложения: 5c518be9
Имя модуля неисправности: VBE7.DLL
Версия модуля неисправности: 0.0.0.0
Метка времени модуля неисправности: 5c064824
Код исключения: c0000005
Смещение исключения: 00000000000b555a
Версия ОС: 6.3.9600.2.0.0.272.7
Идентификатор локали: 1033
Код в основном файле:
Sub Auto_Open()
Application.Wait (Now + TimeValue("0:00:10"))
Application.Calculation = xlCalculationManual
Workbooks.Open ("C:\Users\aowens\Desktop\Queries\ATSReports\ATSReports.xlsm")
Application.Run "'C:\Users\aowens\Desktop\Queries\ATSReports\ATSReports.xlsm'!Macro"
Workbooks("ATSReports.xlsm").Close False
Workbooks.Open ("C:\Users\aowens\Desktop\Queries\MiscLookups\MiscLookups.xlsm")
Application.Run "'C:\Users\aowens\Desktop\Queries\MiscLookups\MiscLookups.xlsm'!Macro"
Workbooks("MiscLookups.xlsm").Close False
(этот шаблон повторяется для5 других файлов)
Пример макроса в одном файле:
Sub Macro()
Dim errorcount
Dim broken
Dim this As Date
this = now()
errorcount = 0
On Error Resume Next
ThisWorkbook.Connections("Query - MasterROCL").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " ROCL"
End If
Err = 0
ThisWorkbook.Connections("Query - MasterRMEL").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " RMEL"
End If
Err = 0
ThisWorkbook.Connections("Query - MasterRHIL").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " RHIL"
End If
Err = 0
ThisWorkbook.Connections("Query - MasterREXH").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " REXH"
End If
Err = 0
Calculate
ThisWorkbook.Save
Application.DisplayAlerts = False
ThisWorkbook.SaveAs ("R:\Operations\Dashboards\Queries\ATSReports.xlsm")
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.to = "aowens@explorenetwork.org"
.Subject = errorcount & " Errors for " & Format(now(), "MM/DD HH:MM") & " ATS Refresh"
.htmlBody = " ~ " & Round(1440 * (TimeValue(now()) - TimeValue(this)), 0) & " mins. Broken:" & broken
.Send
End With
End Sub