Код Excel VBA, вызывающий ошибку в таблице XML, требующий исправления - PullRequest
0 голосов
/ 22 февраля 2019

Я создал инструмент прогнозирования стоимости контракта для своей команды, и кроме этой одной проблемы он работает блестяще!Я выделил макрос, который вызывает ошибку, но я не могу определить точную причину и способы ее устранения.

После того, как пользователь выполнил свой первый прогноз / прогнозируемый денежный поток, он нажимает «Блокировать оригинал»."кнопка, которая запускает макрос 'LockOriginal' (включен ниже).Цель состоит в том, чтобы скопировать рабочий лист, содержащий этот первоначальный прогноз, для последующего использования (удаление формул и т. Д., Чтобы это были только значения).Пользователь сохранит и закроет документ и вернется к нему ежемесячно для создания нового прогноза затрат.

Однако при первом открытии документа (это «после» создания его из шаблона, блокировкаоригинал и сохранение / закрытие документа) Excel вылетает.Пользователь может заставить Excel загрузить «отремонтированную» версию документа.Состояние исправления: Восстановленные записи: Таблица из /xl/tables/table2.xml part (Таблица). После этого момента, после сохранения документа, он работает нормально до конца своей жизни.

Есть ли что-то вкак я кодировал эти действия, которые вызывают ошибку?

Sub LockOriginal()

    If MsgBox("This action cannot be undone. Are you certain you want to proceed?", vbYesNo) = vbNo Then Exit Sub

    Application.ScreenUpdating = False

    'Overwrite fomulas in Original/Baseline with current forecast values
    Sheets("Summary").Range("ForecastValuesOriginal").Value = Sheets("Summary").Range("ForecastValuesCurrent").Value
    Sheets("Summary").Range("ForecastValuesBaseline").Value = Sheets("Summary").Range("ForecastValuesCurrent").Value

    'Delete features for locking Original again
    ActiveWorkbook.Names("ForecastValuesOriginal").Delete
    Sheets("Forecast").Select
    ActiveSheet.Shapes.Range(Array("Lock Original Button")).Delete

    'Duplicate sheet, rename to "Original", and convert formulas to values
    Sheets("Forecast").Copy After:=Sheets(5)
    ActiveSheet.Name = "Original"
    ActiveSheet.Tab.ColorIndex = 48
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    With Selection.Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.149998474074526
        .PatternTintAndShade = 0
    End With
    Range("A4").Select
    ActiveCell.FormulaR1C1 = "ORIGINAL FORECAST (LOCKED) - USE ONLY AS REFERENCE"
    Range("A1").Select
    Application.CutCopyMode = False

    'Delete named ranges in new worksheet
    Dim RangeName As Name
    On Error Resume Next
    For Each RangeName In Names
    ActiveSheet.Names(RangeName.Name).Delete
    Next
    On Error GoTo 0

    'Tidy up
    Range("A1").Select
    Sheets("Forecast").Select
    Range("A1").Select
    Application.CutCopyMode = False
    Application.ScreenUpdating = True

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...