Ошибка выполнения 5981, ошибка приложения или объекта - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь создать сценарии в Excel и Word, которые создают документы Word из строк в Excel. Я основываю документы Word на шаблоне dotm. Все работало нормально (и до сих пор работает) с форматом файла 'dotx', но как только я использую Macro-Enabled, я получаю 5981 ошибку времени выполнения приложения или объектную ошибку.

Я провел исследование в Интернете и попробовал все исправления, включив включение макросов, надежных расположений и доверенных документов в Word. Я пробовал DoEvent, прежде чем пытаться получить доступ. Мне нужно получить доступ к файлу 'dotm', так как в Word есть макросы, которые мне нужно запустить при открытии, чтобы отформатировать документ .

Может ли кто-нибудь ПОЖАЛУЙСТА помочь мне? У меня нет опыта в VBA, и я достигаю конца своей темы с этим.

    Set objword = GetObject(, "Word.Application")

        If objword Is Nothing Then
            Set objword = CreateObject("Word.Application")
        End If

    On Error GoTo 0

    Set objDoc = objword.Documents.Add("C:\Users\OMITTED FOR PRIVACY\Test Report.dotm")

Результаты ... Ожидается: документы Word созданы и отформатированы Фактически: ошибка времени выполнения '5981': ошибка приложения или объекта

Обновлено Код из Test Report.dotm файла:

Sub conditionalFormat()

    Dim oCell As Word.Cell
    Dim oColumn As Word.Column

    'First set of tables
    For intI = 2 To 5
        Set oColumn = ActiveDocument.Tables(intI).Range.Columns(3)

        For Each oCell In oColumn.Cells

            If IsNumeric(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2)) Then

                If Val(oCell.Range.Text) < 55 Then
                    oCell.Shading.ForegroundPatternColor = wdColorRed
                    oCell.Range.Font.TextColor = wdColorWhite
                    oCell.Range.Font.Bold = True
                    oCell.Range.InsertAfter Text:="%"
                ElseIf Val(oCell.Range.Text) > 55 And Val(oCell.Range.Text) < 75 Then
                    oCell.Shading.ForegroundPatternColor = wdColorLightOrange
                    oCell.Range.Font.TextColor = wdColorWhite
                    oCell.Range.Font.Bold = True
                    oCell.Range.InsertAfter Text:="%"
                ElseIf Val(oCell.Range.Text) > 75 Then
                    oCell.Shading.ForegroundPatternColor = wdColorSeaGreen
                    oCell.Range.Font.TextColor = wdColorWhite
                    oCell.Range.Font.Bold = True
                    oCell.Range.InsertAfter Text:="%"
                End If
            End If

        Next
    Next intI

    'Analysis set of tables
    For intI = 8 To 28 Step 3
        Set oColumn = ActiveDocument.Tables(intI).Range.Columns(4)

        For Each oCell In oColumn.Cells

            If IsNumeric(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2)) Then

                If Val(oCell.Range.Text) < 33.3 Then
                    oCell.Shading.ForegroundPatternColor = wdColorRed
                    oCell.Range.Font.TextColor = wdColorWhite
                    oCell.Range.Font.Bold = True
                    oCell.Range.InsertAfter Text:="%"
                ElseIf Val(oCell.Range.Text) > 33.3 And Val(oCell.Range.Text) < 66.6 Then
                    oCell.Shading.ForegroundPatternColor = wdColorLightOrange
                    oCell.Range.Font.TextColor = wdColorWhite
                    oCell.Range.Font.Bold = True
                    oCell.Range.InsertAfter Text:="%"
                ElseIf Val(oCell.Range.Text) > 66.6 Then
                    oCell.Shading.ForegroundPatternColor = wdColorSeaGreen
                    oCell.Range.Font.TextColor = wdColorWhite
                    oCell.Range.Font.Bold = True
                    oCell.Range.InsertAfter Text:="%"
                End If
            End If

        Next
    Next intI

End Sub

1 Ответ

0 голосов
/ 28 мая 2019

Измените ActiveDocument на ThisDocument.

  • ActiveDocument - это документ, который находится в фокусе (это может быть любой документ, на который нажимает пользователь).
  • ThisDocument - это документ, в котором выполняется этот код.
...