Hoe meerdere macro's uitvoeren vanuit het rechtsklikmenu in Excel?
Als er meerdere VBA-macro's in uw werkmap staan, moet u het VBA-venster openen en vervolgens de macro kiezen wanneer u de code moet uitvoeren. In dit artikel wil ik het hebben over het uitvoeren van macro's vanuit het rechtsklikmenu om uw werk efficiënter te maken, zoals het linker screenshot laat zien.
Voer meerdere macro's uit vanuit het rechtsklikmenu met VBA-codes
Voer meerdere macro's uit vanuit het rechtsklikmenu met VBA-codes
Om de macrocodes in een werkmap uit te voeren vanuit het rechtsklikmenu, kunnen de volgende stappen u helpen, doe dit als volgt:
1. Hole de Alt + F11 toetsen om de te openen Microsoft Visual Basic voor toepassingen venster.
2. Dubbelklik vervolgens Dit Werkboek links Project paneel en kopieer en plak vervolgens de onderstaande VBA-code in de lege module.
Private Sub Workbook_Open()
Run "LoadMacro"
End Sub
Private Sub Workbook_Activate()
Run "LoadMacro"
End Sub
Private Sub Workbook_Deactivate()
Run "ClearMacro"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Run "ClearMacro"
ThisWorkbook.Save
End Sub
3. Nog steeds in de Microsoft Visual Basic voor toepassingen venster, klik dan Invoegen > Module, en plak de volgende code in deze module.
Private Sub LoadMacro()
Dim xArrMenu As Variant
Dim xStrLine, xSreBtnName As String
Dim xObjCBCF, xObjCntrAll As CommandBarControl
Dim xObjCBCs As CommandBars
Dim xObjCBBtn As CommandBarButton
Dim xIntLine, xFNum As Integer
Dim xObjComponent As Object
Run "ClearMacro"
Set xObjCBCF = Application.CommandBars("Cell").Controls.Add(msoControlPopup, before:=1)
xObjCBCF.Caption = " Run Macro "
xObjCBCF.BeginGroup = False
For Each xObjComponent In ActiveWorkbook.VBProject.VBComponents
If xObjComponent.Type = 1 Then
For xIntLine = 1 To xObjComponent.CodeModule.CountOfLines
xStrLine = xObjComponent.CodeModule.Lines(xIntLine, 1)
xStrLine = Trim(xStrLine)
If (InStr(xStrLine, "()") > 0) And (Left(xStrLine, 11) = "Private Sub" Or Left(xStrLine, 3) = "Sub") Then
xSreBtnName = ""
If "Private Sub" = Left(xStrLine, 11) Then
xSreBtnName = Trim(Mid(xStrLine, 12, InStr(xStrLine, "()") - 12))
ElseIf "Sub" = Left(xStrLine, 3) Then
xSreBtnName = Trim(Mid(xStrLine, 4, InStr(xStrLine, "()") - 4))
End If
If xSreBtnName <> "" And xSreBtnName <> "RightClickReset" And xSreBtnName <> "LoadMacro" And xSreBtnName <> "ActionMacro" Then
Set xObjCBBtn = xObjCBCF.Controls.Add
With xObjCBBtn
.FaceId = 186
.Style = msoButtonIconAndCaption
.Caption = xSreBtnName
.OnAction = "ActionMacro"
End With
End If
End If
Next xIntLine
End If
Next xObjComponent
End Sub
Private Sub ClearMacro()
On Error Resume Next
CommandBars("Cell").Controls(" Run Macro ").Delete
Err.Clear
CommandBars("Cell").Reset
End Sub
Private Sub ActionMacro()
On Error GoTo Err1
With Application
Run .CommandBars("Cell").Controls(1).Controls(.Caller(1)).Caption
End With
Exit Sub
Err1:
MsgBox "Invalid"
End Sub
4. Nadat u de codes heeft geplakt, klikt u op Tools > ReferentiesEn een Referenties-VBAProject dialoogvenster wordt weergegeven en vink vervolgens aan Uitbreidbaarheid van Microsoft Visual Basic for Applications 5.3 optie in het Beschikbare referenties keuzelijst, zie screenshot:
5. Dan klikken OK om het dialoogvenster te verlaten, moet u deze werkmap nu opslaan als Excel-werkmap met ingeschakelde macro's formaat, zie screenshot:
6. Start ten slotte de werkmap opnieuw om het code-effect te krijgen, en nu, wanneer u met de rechtermuisknop op een cel klikt, wordt een Voer Macro uit optie wordt in het rechtsklikmenu ingevoegd en alle macro's in uw werkmap worden in het submenu weergegeven als volgende schermafbeelding:
7. Vervolgens kunt u de code uitvoeren door erop te klikken.