2016-05-29 97 views
0

因此,我在MS Publisher中有一個1000頁的文檔。問題是我不得不調整其中的每一個TextFrame,每頁大約有4個。我以前從來沒有使用過宏,但是我已經用C和Python編寫了一些代碼,所以我確實有一些編程經驗。我的宏看起來像這樣:MS Publisher中的宏問題

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中運行它時,它確實給了我想要更改文本框架高度的錯誤,所以我認爲在代碼中必須存在錯誤。任何幫助,將不勝感激!

回答

0

在VBA中,高度和寬度屬性是以不是字面值cm的點完成的,您可以使用CentimetersToPoints將其轉換爲所需的值。

pubShape.TextFrame.Height = CentimetersToPoints(21.5) 

請勿包含「cm」後綴。

編輯\補充:

我運行一個測試並沒有得到你獲得,不同的是我與聲明的變量工作的錯誤。您的錯誤信息通常意味着我們需要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 
+0

感謝您的快速回答! 所以我嘗試了沒有cm,沒有「」標記,我試圖做同樣的事情,就像你在那兒做的一樣,但沒有任何工作。我仍然在.Height行上收到編譯錯誤:「找不到方法或數據成員」 – Toma

+0

@Toma,我在回答中添加了更多內容,看看它是否有幫助。 –

0

我意識到我做錯了什麼。我只需要這樣做:

pubShape.Height = ... 

沒有TextFrame在中間。