不能在Excel中运行用加载项创build的macros

我创build了一个xla(Excel加载项),它具有保护文档的function(以便用户可以在不知道密码的情况下保护文档)。 这个xla被添加到每个需要这个function的excel文件中。

当xla安装或添加到excel时,保护button将被添加到最后一个菜单中。 但是当我点击button,出现错误显示

“不能运行macrosPivot加载项0.2'!protectSheet'”。 macros可能无法在此工作簿或所有macros可能被禁用。

onclicked事件处理程序的代码是protectSheet,请看下面的代码:

谁能指出我为什么会出现这个问题?

在ThisWorkbook上

'main function' Public Sub protectSheet() ActiveWorkbook.ActiveSheet.protect Password:="password", AllowUsingPivotTables:=True End Sub Public Sub ShowToolbar() ' Assumes toolbar not already loaded ' Application.CommandBars.Add Module1.TOOLBARNAME AddButton "Proteksi Sheet", "Memproteksi Pivot", 3817, "protectSheet" ' call AddButton more times for more buttons ' With Application.CommandBars(Module1.TOOLBARNAME) .Visible = True .Position = msoBarTop End With End Sub Public Sub AddButton(caption As String, tooltip As String, faceId As Long, methodName As String) Dim Btn As CommandBarButton Set Btn = Application.CommandBars(Module1.TOOLBARNAME).Controls.Add With Btn .Style = msoButtonIcon .faceId = faceId ' choose from a world of possible images in Excel: see http://www.ozgrid.com/forum/showthread.php?t=39992 ' .OnAction = methodName .TooltipText = tooltip End With End Sub Public Sub DeleteCommandBar() Application.CommandBars(TOOLBARNAME).Delete End Sub 'called when add-in installed Private Sub Workbook_AddinInstall() Call ShowToolbar End Sub 'called when add-in uninstalled Private Sub Workbook_AddinUninstall() Call DeleteCommandBar End Sub 

在module1上

 Public Const TOOLBARNAME = "PivotTools" 

将所有函数移到module1后,然后在ThisWorkbook上保留调用者函数,现在错误消失了。 似乎我必须在同一个文件中定义所有调用/使用常量(Public Const TOOLBARNAME =“PivotTools”)的function(在我的情况下,在module1中)

在module1文件上

 Public Const TOOLBARNAME = "PivotTools" 'caller method' Public Sub protectDoc() On Error GoTo errorInfo protectSheet 'if success, show msg box' MsgBox ("Report berhasil diproteksi") Exit Sub errorInfo: MsgBox Err.Description & vbCrLf & Err.Number End Sub Public Sub protectSheet() ActiveWorkbook.ActiveSheet.protect Password:="password", AllowUsingPivotTables:=True End Sub Public Sub refreshDoc() On Error GoTo errorInfo refreshConnection protectSheet 'if success, show msg box' MsgBox ("Report berhasil diperbaharui") Exit Sub errorInfo: MsgBox Err.Description & vbCrLf & Err.Number End Sub Private Sub refreshConnection() ActiveWorkbook.ActiveSheet.Unprotect Password:="password" ActiveWorkbook.RefreshAll End Sub Public Sub ShowToolbar() ' Assumes toolbar not already loaded ' Application.CommandBars.Add TOOLBARNAME AddButton "Proteksi Sheet", "Memproteksi Pivot", 225, "protectDoc" AddButton "Refresh Data", "Refresh Pivot", 459, "refreshDoc" ' call AddButton more times for more buttons ' With Application.CommandBars(TOOLBARNAME) .Visible = True .Position = msoBarTop End With End Sub Public Sub AddButton(caption As String, tooltip As String, faceId As Long, methodName As String) Dim Btn As CommandBarButton Set Btn = Application.CommandBars(TOOLBARNAME).Controls.Add With Btn .Style = msoButtonIcon .faceId = faceId ' choose from a world of possible images in Excel: see http://www.ozgrid.com/forum/showthread.php?t=39992 ' .OnAction = methodName .TooltipText = tooltip End With End Sub Public Sub DeleteCommandBar() Application.CommandBars(TOOLBARNAME).Delete End Sub 

在ThisWorkbook上

 'called when add-in installed Private Sub Workbook_AddinInstall() Call Module1.ShowToolbar End Sub 'called when add-in uninstalled Private Sub Workbook_AddinUninstall() Call Module1.DeleteCommandBar End Sub 

我有这个问题,但发现我有我的模块命名相同的我的子(例如模块命名为“InsertLineID”和子是“InsertLineID”)。

将模块名称更改为“LineID”并将该子项保留为“InsertLineID”对我来说是一种享受!