Проблемы с макросом в 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 в середине.