Определите, был ли Canvas вставлен на каждую страницу в Word - PullRequest
1 голос
/ 17 марта 2010

В настоящее время у меня есть код, который будет печатать знак OMR на каждой странице. По сути, я вставляю Canvas на каждую страницу, а затем серия OMR Mark Line вставляется в Canvas.

Недавно я обнаружил проблему, заключающуюся в том, что каким-то образом холст помещается со страницы и отображается на предыдущей странице вместо текущей.

Ниже приведен фрагмент кода того, как я вставил холст, а также метки OMR на каждую страницу:

' Start Code Snippet
Sub GenerateOMR()
    Dim ShpCanvas As Shape
    Dim MaxPages As Integer
    Dim PNo As Integer
    ClearOMR
    MaxPages = Selection.Information(wdNumberOfPagesInDocument)
    For PNo = 1 To MaxPages
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst, Count:=PNo, Name:=""

        Select Case PNo
            Case 1
                Set ShpCanvas = ActiveDocument.Shapes.AddCanvas(0, 0.5, 600, 300)
            Case Else
                Set ShpCanvas = ActiveDocument.Shapes.AddCanvas(0, 0, 600, 300)
        End Select

        ' Add a canvas on each page
        With ShpCanvas
            .Name = "OMR_Canvas_" & CStr(PNo)
            .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
            .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        End With

        ' Insert a white background rectange and remove the rectangle border line
        With ShpCanvas.CanvasItems.AddShape(msoShapeRectangle, 536, 0, 64, 300)
            .Name = "OMR_WhiteBackground_" & CStr(PNo)
            .Fill.ForeColor.RGB = RGB(255, 255, 255)
            .Line.ForeColor.RGB = RGB(255, 255, 255)
        End With

        PrintOMRPage ShpCanvas, PNo
    Next PNo
End Sub
' End Code Snippet

Существует специальный метод PrintOMRPage, который здесь не актуален.

Мой вопрос сейчас, как мне узнать, был ли холст вставлен в страницу? В основном я буду зацикливаться на всех страницах и проверять, был ли холст вставлен в эту страницу. Видимо я не могу найти правильный путь.

Я попытался проверить с помощью ActiveDocument.Shapes(1).Top и проверить, является ли позиция Top отрицательным значением. Но, по-видимому, позиция Top всегда измеряется от верхней части каждой страницы.

1 Ответ

0 голосов
/ 20 марта 2010

По этой причине вы иногда получаете относительную вертикальную позицию: .RelativeVerticalPosition = wdRelativeVerticalPositionPage. Удалите его, и у вас будет холст на каждой странице.

...