Не удается запустить макрос, созданный с помощью надстройки в Excel - PullRequest
3 голосов
/ 13 сентября 2011

Я создал xla (надстройку Excel), в которой есть функция для защиты документа (чтобы пользователь мог защитить документ, не зная пароля).Этот xla добавляется в каждый файл Excel, который нуждается в этой функции.

когда xla установлена ​​или добавлена ​​в Excel, кнопка защиты будет добавлена ​​в последнее меню.но когда я нажимаю кнопку, возникает ошибка, показывающая, что

"Невозможно запустить надстройку макроса Pivot 0.2 '! protectSheet'".Макрос может быть недоступен в этой книге, или все макросы могут быть отключены. "

Код, на который нажал обработчик событий, - 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"

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

После перемещения всей функции в module1, а затем сохранения функции вызывающей стороны в ThisWorkbook, ошибка теперь исчезла. Кажется, что мне нужно определить все функции, которые вызывают / используют константу (Public Const TOOLBARNAME = "PivotTools") в том же файле (в моем случае в 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
0 голосов
/ 23 января 2017

У меня была эта проблема, но я обнаружил, что мой модуль назван так же, как и мой саб (например, модуль с именем «InsertLineID», а сабл был «InsertLineID»).

Изменение имени модуля на «LineID» и оставление сабвуфера как «InsertLineID» сработало для меня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...