2013-05-09 103 views
0

我試圖保持某些宏在Word啓動或打開另一個文檔時運行,但我希望它們從用戶可以訪問的宏列表中刪除(alt + f8)。從宏列表中隱藏AutoExec()和AutoNew()宏,但仍然有它們運行?

我試着添加'私人'而不是'公共',但是這會阻止他們完全由於某種原因運行。

Public Sub AutoExec() 
    DisplayStylesMenu 
End Sub 

Public Sub AutoNew() 
    DisplayStylesMenu 
End Sub 

Public Sub AutoOpen() 
    DisplayStylesMenu 
End Sub 

Public Sub DisplayStylesMenu() 
    ' Opens the Formatting task pane (Style window) 
    Application.TaskPanes(wdTaskPaneFormatting).Visible = True 

    ' Docks the window on the right 
    Application.CommandBars("Styles").Position = msoBarRight 
End Sub 

目前的AutoExec,AutoNew和的AutoOpen都出現在可公開訪問的宏列表(因爲「公共」前綴),但加入「私人」它們中的任何時候,他們停止工作,沒有錯誤。

如何讓宏在啓動時運行,打開文檔等,同時將它們從宏列表中隱藏起來?

+0

您是否嘗試將訪問者「Public」修改爲「Private」?它可能有幫助。 – 2013-05-09 00:27:13

+0

我做了,並且它停止了宏並且完全運行,這打破了目的。我將它添加到'AutoExec','AutoNew','AutoOpen'和'Sub DisplayStylesMenu',沒有任何組合似乎適用於我。 – Timmah 2013-05-09 00:41:07

+0

然後,您應該創建一個模板文件並將宏放入其中,然後根據該模板打開新的Word文檔。 – 2013-05-09 00:48:37

回答

4

防止宏在宏列表中顯示的一種方法是將它們構造爲使它們至少需要一個參數。這可能實質上是一個「虛擬」變量,實際上不會被使用。

所以,聲明常數模塊中,像這樣:

Const hiddenMacro as Boolean = True 

我用一個布爾值,但是你可以使用字符串,整數,龍等

然後,在你AutoNew子程序,添加此變量作爲一個必要的參數:

Sub AutoNew(hiddenMacro as Boolean) 
    MsgBox "Hello, world!", vbInformation 
End Sub 

宏需要參數不出現在宏列表:

Screenshot of macro list which excludes macros that require arguments

更新在這裏,我強調ThisDocument模塊是什麼,並且清楚地表明,所有這些代碼的的ThisDocument模塊Normal.dot文件的所屬。

Another screenshot with highlighting and junk

+0

的確非常有趣的解決方案! upvote + – 2013-05-09 02:02:28

+0

感謝David的建議,請原諒我的無知,但標記的哪一部分是'模塊'?我嘗試將它粘貼到我的宏的各個部分,並將它們從列表中隱藏起來,但它們不再運行。我認爲這個問題可能出在我把'Const hiddenMacro as Boolean = True'的地方 – Timmah 2013-05-09 03:30:03

+0

在我測試的代碼中,子程序'AutoNew'和'Const hiddenMacro as Boolean = True'都放在'ThisDocument'模塊中。讓我知道你是否看不到屏幕截圖,我可以嘗試獲得更好/更大的屏幕截圖。 – 2013-05-09 04:28:54