проблемы при изменении ширины столбца таблицы слов и вставке изображения в слово из Excel VBA - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь использовать vba для объединения текста, таблицы и изображения в файл слова из файла Excel. Приведенный ниже код работает большую часть времени. Однако иногда появляется ошибка 462.

Я искал вокруг. В некоторых комментариях говорится, что это происходит потому, что существуют неквалифицированные ссылки. Однако я не знаю, что и где находится безоговорочная ссылка. Странная вещь: обычно первый запуск в порядке. После этого эта ошибка обычно появляется только в четные времена. Я уверен, что закрывал файл word каждый раз, независимо от того, успешно выполняется код или нет.

Вот код. Я поместил комментарий, чтобы указать строку, где происходит ошибка.

Dim WordApp As Object, WordDoc As Object

Set WordApp = New Word.Application

With WordApp
    .Visible = True

    Set WordDoc = .Documents.Add
    .ActiveDocument.Select
    With .Selection
    'narrative
    Sheet3.Range("G2").Copy
    .PasteExcelTable False, False, False

    'IO
    Sheet2.Range("A1","B11").Copy
    .PasteExcelTable False, False, False
    WordDoc.Tables(1).Columns(1).Width = InchesToPoints(1.5) 'Error 462 appears periodically on this line
    WordDoc.Tables(1).Columns(2).Width = InchesToPoints(4.5)
    WordDoc.Tables(1).Rows.Height = 20

    'HMI
    Sheet9.Range("A4").Copy
    .PasteExcelTable False, False, False
    Sheet9.Shapes("Group_Htr").Copy
    .PasteSpecial   
    .ShapeRange(1).WrapFormat.Type = wdWrapInline
    .EndKey unit:=wdStory
    'P&ID
    .TypeParagraph
    .InsertBreak Type:=wdSectionBreakNextPage
        With .PageSetup
            .LineNumbering.Active = False
            .Orientation = wdOrientPortrait
            .TopMargin = InchesToPoints(1)
            .BottomMargin = InchesToPoints(1)
            .LeftMargin = InchesToPoints(1)
            .RightMargin = InchesToPoints(1)
            .Gutter = InchesToPoints(0)
            .HeaderDistance = InchesToPoints(0.5)
            .FooterDistance = InchesToPoints(0.5)
            .PageWidth = InchesToPoints(11)
            .PageHeight = InchesToPoints(17)
            .FirstPageTray = wdPrinterDefaultBin
            .OtherPagesTray = wdPrinterDefaultBin
            .SectionStart = wdSectionNewPage
            .OddAndEvenPagesHeaderFooter = False
            .DifferentFirstPageHeaderFooter = False
            .VerticalAlignment = wdAlignVerticalTop
            .SuppressEndnotes = False
            .MirrorMargins = False
            .TwoPagesOnOne = False
            .BookFoldPrinting = False
            .BookFoldRevPrinting = False
            .BookFoldPrintingSheets = 1
            .GutterPos = wdGutterPosLeft
            If .Orientation = wdOrientPortrait Then
                .Orientation = wdOrientLandscape
            End If
        End With
    Sheet10.Range("A4").Copy
    .PasteExcelTable False, False, False
    Sheet10.Shapes("Group_Htr").Copy
    .PasteSpecial                   'Error 4198 appears occasionally on this line
    End With
    .Activate

End With

1 Ответ

0 голосов
/ 09 ноября 2018

Причина, по которой вы получаете ошибку, заключается в том, что InchesToPoints не является частью Excel, где и выполняется код. Этот метод специфичен для Word, поэтому для него требуется ссылка на приложение Word.Application. Поставьте . перед каждым вхождением, чтобы оно взяло WordApp из With:

WordDoc.Tables(1).Columns(1).Width = .InchesToPoints(1.5) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...