2010-11-02 6 views
1

Je reçois le message suivant lorsque la méthode onAction de mon bouton VBA est appelée. La macro peut ne pas être disponible dans ce classeur ou toutes les macros peuvent être désactivéesPourquoi mon bouton VBA se comporte-t-il étrangement lors d'un appel onAction?

Dans le test.xlsm dans ThisWorkbook fichier J'ai un code très simple

Option Explicit 
Private Sub Workbook_Open() 
    UpdateMenuSR 
End Sub 
Private Sub UpdateMenuSR() 
Dim cb As CommandBarButton 
Dim Solver As CommandBar 

For Each Solver In Application.CommandBars 
    If Solver.name = "Test" Then Exit Sub 
Next Solver 

Set Solver = Application.CommandBars.Add("Test", msoBarFloating, False) 
With Solver 
    .Visible = True 
    With .Controls 
     Set cb = .Add(Type:=msoControlButton) 
     With cb 
      .FaceId = 31 
      .Visible = True 
      .OnAction = "!b" 
     End With 
     Set cb = .Add(Type:=msoControlButton) 
     With cb 
      .FaceId = 19 
      .Visible = True 
      .OnAction = "!c" 
     End With 
     Set cb = .Add(Type:=msoControlButton) 
     With cb 
      .FaceId = 30 
      .Visible = True 
      .OnAction = "!a" 
     End With 
     Set cb = .Add(Type:=msoControlButton) 
     With cb 
      .FaceId = 8 
      .Visible = True 
      .OnAction = "!d" 
     End With 
    End With 
End With 
End Sub 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Dim ctrl As CommandBarControl 
Application.CommandBars("Test").Delete 
For Each ctrl In Application.CommandBars("Tools").Controls 
    If ctrl.Tag = "Test" Or ctrl.Tag = "Test" Then 
     ctrl.Delete 
    End If 
Next ctrl 
End Sub 

Dans le module principal je ne

Public Sub a() 
MsgBox "a" 
End Sub 


Public Sub d() 
MsgBox "d" 
End Sub 


Public Sub b() 
MsgBox "b" 
End Sub 


Public Sub c() 
MsgBox "c" 
End Sub 

Si je fais la procédure suivante:

  • Créer un nouveau fichier test2.xlsx

  • Ouvrir test.xlsm

  • Ouvrir test2.xslx

  • En cliquant un après l'autre sur les boutons:

résultats dans: "b"

"Cannot run the macro '[test.xslm]Sheet1A:A'. The macro may not be available in this workbook or all macros may be disabled" 

"a" 

"Cannot run the macro 'd'. The macro may not be available in this workbook or all macros may be disabled" 
  • commutateur à test.xlsm

Résultats dans:

"b" 

"Cannot run the macro '[test.xslm]Sheet1A:A'. The macro may not be available in this wo rkbook or all macros may be disabled" 

"a" 

"d" 

Quelqu'un pourrait-il me aider?

Répondre

0

J'ai piraté le problème. Ajoutez simplement deux boutons invisibles:

Set cb = .Add(Type:=msoControlButton) 
    With cb 
     .Visible = False 
    End With 

    Set cb = .Add(Type:=msoControlButton) 
    With cb 
     .Visible = False 
    End With 

Par conséquent, les boutons visibles fonctionnent correctement.