MS Publisher中的宏问题

时间:2016-05-29 20:48:02

标签: vba textbox macros ms-publisher

所以,我在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中运行它时,它确实给了我一个错误,我想改变文本框架的高度,所以我认为代码中必须有一个错误。任何帮助将不胜感激!

2 个答案:

答案 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。