Скрипт VBA, закрывающий Excel при работе с заданными c книгами - PullRequest
0 голосов
/ 22 января 2020

Извините, если это слишком расплывчато, но я сталкиваюсь с ошибкой сценариев VBA, которая, кажется, только что появилась на прошлой неделе, и я волнуюсь, связано с обновлением, выдвинутым корпоративными ИТ-специалистами в этот период.

По сути, у меня есть панель управления Excel со сценариями VBA, которая просит пользователя указать папку, а затем просматривает все файлы в этой папке (и любую подпапку). Он открывает каждый файл, затем копирует набор данных из именованных диапазонов в таблицу в агрегаторе и затем закрывает файл. По сути, он собирает финансовые прогнозы и информацию о состоянии из ряда файлов в панель управления всего портфеля.

На прошлой неделе все работало нормально. Как я уже сказал, я получил обновление для O365 в конце прошлой недели, и теперь оно кажется потерянным. Когда я запускаю его, частично, Excel внезапно закрывается (все открытые файлы). Если я перебираю код, он делает это при закрытии файла, используя стандартную строку кода wb.close savechanges:=true (я пытался не сохранять, это не имеет значения).

Однако, это не делает это для всех трекеров, только для некоторых. Все файлы были созданы по одному и тому же шаблону, но ни один из них не поврежден, хотя я периодически получаю сообщение об ошибке «Не удается найти проект или библиотеку» при открытии некоторых файлов, хотя и не всегда. Разница только в , которую я вижу, состоит в том, что, если я добавлю часы в переменную объекта Workbook, которая используется для открытия каждого файла, те, которые работают нормально, имеют значение Type Workbook / ThisWorkbook и те, которые приводят к закрытию Excel, имеют тип Рабочая книга / Рабочая тетрадь

Любая помощь вообще очень ценится, спасибо!

Пример кода:

    Dim wb As Workbook
    Dim tbl As ListObject

    Set wb = Workbooks.Open(filePath, False, False)

    Set tbl = sht_projOverview.ListObjects("tbl_projectInfo")
    If nameExistsWb(wb, "projInfo_ProjID") Then
    'This makes the assumption that any Excel file with the named range "projInfo_projID" is a financial tracker
        tbl.ListRows.Add AlwaysInsert:=True
        tbl.DataBodyRange.Cells(tbl.DataBodyRange.Rows.Count, tableColumnIndex(tbl, "Unique ID")).Value = wb.Names("projInfo_ProjID").RefersToRange(1, 1).Value 'We know theprojID field exists, so we can add that
        'Now add all the other data fields
        'BASIC INFO FIELDS
        If nameExistsWb(wb, "projInfo_Programme") Then tbl.DataBodyRange.Cells(tbl.DataBodyRange.Rows.Count, tableColumnIndex(tbl, "Programme")).Value = wb.Names("projInfo_Programme").RefersToRange(1, 1).Value
        If nameExistsWb(wb, "projInfo_Project") Then tbl.DataBodyRange.Cells(tbl.DataBodyRange.Rows.Count, tableColumnIndex(tbl, "Project")).Value = wb.Names("projInfo_Project").RefersToRange(1, 1).Value
        If nameExistsWb(wb, "projInfo_Pillar") Then tbl.DataBodyRange.Cells(tbl.DataBodyRange.Rows.Count, tableColumnIndex(tbl, "BU/Pillar")).Value = wb.Names("projInfo_Pillar").RefersToRange(1, 1).Value
        If nameExistsWb(wb, "projInfo_ITTower") Then tbl.DataBodyRange.Cells(tbl.DataBodyRange.Rows.Count, tableColumnIndex(tbl, "IT Tower")).Value = wb.Names("projInfo_ITTower").RefersToRange(1, 1).Value
        If nameExistsWb(wb, "projInfo_Status") Then tbl.DataBodyRange.Cells(tbl.DataBodyRange.Rows.Count, tableColumnIndex(tbl, "Project Status")).Value = wb.Names("projInfo_Status").RefersToRange(1, 1).Value
        If nameExistsWb(wb, "projInfo_Stage") Then tbl.DataBodyRange.Cells(tbl.DataBodyRange.Rows.Count, tableColumnIndex(tbl, "Project Stage")).Value = wb.Names("projInfo_Stage").RefersToRange(1, 1).Value

        'This continues on, copying over a number of other fields

        importTrackerData = 1
    Else
        importTrackerData = 0
    End If
    wb.Close savechanges:=True
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...