我认为问题很清楚。我想在Excel 2007中设置一个宏来执行以下任务 (1)右键单击特定单元格,例如A1 (2)从右键菜单中选择(左键单击)一个选项。
我真正需要的是将此宏指定给命令按钮。
答案 0 :(得分:1)
转到VBA代码编辑器(ALT + F11)并添加新模块(Insert-> Module),然后粘贴到代码下面:
Option Explicit
Public Const myBar As String = "MyPopupBar"
Sub CreatePopup()
Dim cmb As CommandBar
Dim ctr As CommandBarControl
DeletePopup
Set cmb = Application.CommandBars.Add(myBar, msoBarPopup)
Set ctr = cmb.Controls.Add(msoControlButton)
With ctr
.Caption = "Click me"
.OnAction = "ClickMe"
End With
cmb.ShowPopup
Set ctr = Nothing
Set cmb = Nothing
End Sub
Sub ClickMe()
MsgBox "You clicked me!", vbInformation, "Wow!"
End Sub
Sub DeletePopup()
On Error Resume Next
Application.CommandBars(myBar).Delete
End Sub
现在,双击Sheet1模块并添加以下代码:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
CreatePopup
Cancel = True
End Sub
这就是全部!
<强> [编辑] 强>
您可以通过命令按钮调用弹出菜单,这样:
Application.CommandBars("TheNameOfCommandBarPopup").ShowPopup
有关详细信息,请参阅:
Creating Popup Menus in All Versions of Excel
Customizing Context Menus in All Versions of Microsoft Excel
答案 1 :(得分:0)
只是一些建议,而不是完整的答案,但也许是一个良好的开端:
?application.commandbars("Cell").Controls(2).caption 'this is your 2nd action in right clic menu, can set it to a variable of type commandbarControl
&安培;复制
commandbars("Cell").Controls(2).execute 'will perform the action of what it is suposed to do when you clic it.
所以也许通过一个简单的测试(假设你知道Option会做什么):
with application.commandbars("Cell").Controls(2)
if instr(1,.caption,"Copy")>0 then .execute
end with
编辑:如果选项2不是好选项,则可以用Long变量替换2并循环选项。 编辑2:我想,你知道如何选择一个特定的细胞,这实际上是一个简单的部分......