所以,我在MS Publisher中有一个1000页的文档。问题是我必须调整其中每个TextFrame的大小,每页大约有4个。我之前从未使用过Macros,但是我已经用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
我已经检查了Macro Security并启用了所有宏,我保存了所有内容,但是当我尝试运行Macro时没有任何反应。现在我不知道我是否在代码本身出错了,但对我来说似乎是对的。但是,我注意到当我尝试在VBA中运行它时,它确实给了我一个错误,我想改变文本框架的高度,所以我认为代码中必须有一个错误。任何帮助将不胜感激!
答案 0 :(得分:0)
在VBA中,高度和宽度属性是以非文字厘米的点完成的,您可以使用CentimetersToPoints
将其转换为所需的值。
pubShape.TextFrame.Height = CentimetersToPoints(21.5)
不要包含“cm”后缀。
EDIT \ ADDITIONAL:
我运行测试但没有得到你得到的错误,区别在于我正在使用声明的变量。您的错误消息通常意味着我们需要set =
之前或我们正在引用不存在的内容。
在您的方法中尝试以下操作并查看它是否有效(请注意此示例仅执行第1页): -
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
答案 1 :(得分:0)
我意识到我做错了什么。我必须这样做:
pubShape.Height = ...
中间没有TextFrame。