Проблемы с макросом в MS Publisher

Итак, у меня есть документ на 1000 страниц в MS Publisher. Проблема в том, что я должен изменить размер каждого отдельного TextFrame в нем, и примерно 4 из них на страницу. Я никогда раньше не работал с макросами, но я немного программировал на C и Python, поэтому у меня есть некоторый опыт программирования. Мой макрос выглядит так:

Sub Resize_Textbox()
Dim pubPage As Page
Dim pubShape As Shape
For Each pubPage In ActiveDocument.Pages
    For Each pubShape In pubPage.Shapes
        If pubShape.Type = pbTextFrame Then
            pubShape.TextFrame.Height = "21.5 cm"
            If pubShape.TextFrame.Width = "18 cm" Then
                pubShape.TextFrame.Width = "12.6 cm"
            End If
            If pubShape.TextFrame.Width = "8.75 cm" Then
                pubShape.TextFrame.Width = "6.3 cm"
            End If
        End If
    Next pubShape
Next pubPage
End Sub

Я проверил безопасность макросов и включил все макросы, все сохранил, но при попытке запустить макрос ничего не происходит. Теперь я понятия не имею, сделал ли я что-то неправильно в самом коде, но мне это кажется правильным. Тем не менее, я заметил, что когда я пытаюсь запустить его в VBA, он выдает ошибку в строке, где я хочу изменить высоту текстового кадра, поэтому, я думаю, в коде должна быть ошибка. Любая помощь будет оценена!

2 ответа

В VBA свойства высоты и ширины выполняются в точках, а не в буквальном см, вы можете использовать CentimetersToPoints преобразовать его в требуемое значение.

pubShape.TextFrame.Height = CentimetersToPoints(21.5)

Не включайте суффикс "см".

EDIT \ ДОПОЛНИТЕЛЬНО:

Я запустил тест и не получил ошибку, которую вы получили, с той разницей, что я работал с объявленными переменными. Ваше сообщение об ошибке обычно подразумевает, что нам нужно set = до того или иного мы ссылаемся на то, чего там нет.

Попробуйте использовать метод ниже и посмотрите, работает ли он (обратите внимание, что этот пример работает только на первой странице):

Public Sub test()
Dim pg As Page
Dim shp As Shape

Set pg = ThisDocument.Pages(1)
    For Each shp In pg.Shapes
        If shp.Type = pbTextFrame Then
            shp.Height = CentimetersToPoints(5)
        End If
    Next
Set pg = Nothing

End Sub

Я понял, что я сделал не так. Я просто должен был сделать это так:

pubShape.Height = ...

Без TextFrame в середине.

Другие вопросы по тегам