我正在编写一个工具,用于为在Access运行时上构建的应用程序创建快捷菜单。我把这个应用程序编译成一个*.accde文件,令我懊恼的是,右击菜单被禁用了。
经过一些研究,我已经能够开发这个工具来添加菜单到数据库。此代码在开发期间调用,而不是在运行时调用。
我已经看到很多重复,我不知道该怎么办。所以,我想在我开始构建所有我需要的菜单之前,我应该停下来,得到一些反馈。
注意:没有一个内置的枚举所有不同的按钮类型。有成千上万的它们,我把它们添加到一个自我定义的枚举中,因为我需要它们。
Option Explicit
Private Enum ButtonControls
bcCopy = 19
bcCut = 21
bcPaste = 22
bcSortSmallToLarge = 210
bcSortSortLargeToSmall = 211
bcDelete = 478
bcNewRecord = 539
bcRowHeight = 541
bcDeleteRecord = 644
End Enum
Private Sub CreateFormDatasheetClipboard()
Dim menu As Office.CommandBar
Set menu = CommandBars.Add("FrmDsClipboard", msoBarPopup, False)
With menu.Controls
.Add msoControlButton, bcCut
.Add msoControlButton, bcCopy
.Add msoControlButton, bcPaste
End With
Set menu = Nothing
End Sub
Private Sub CreateFormDataSheetCopyOnly()
Dim menu As Office.CommandBar
Set menu = CommandBars.Add("FrmDsCopyOnly", msoBarPopup, False)
menu.Controls.Add msoControlButton, bcCopy
Set menu = Nothing
End Sub
Private Sub CreateFormDataSheetRow()
Dim menu As Office.CommandBar
Set menu = CommandBars.Add("FrmDsRow", msoBarPopup, False)
With menu.Controls
.Add msoControlButton, bcNewRecord
.Add msoControlButton, bcDeleteRecord
.Add msoControlButton, bcCut
.Add msoControlButton, bcCopy
.Add msoControlButton, bcPaste
.Add msoControlButton, bcRowHeight
End With
Set menu = Nothing
End Sub
Private Sub CreateFormDataSheetRowClipboardOnly()
Dim menu As Office.CommandBar
Set menu = CommandBars.Add("FrmDsRowClipboardOnly", msoBarPopup, False)
With menu.Controls
.Add msoControlButton, bcCut
.Add msoControlButton, bcCopy
.Add msoControlButton, bcPaste
End With
Set menu = Nothing
End Sub
Private Sub RemoveAllCustomMenus()
Dim cbar As CommandBar
For Each cbar In CommandBars
If Not cbar.BuiltIn Then
cbar.Delete
End If
Next
End Sub
Private Sub CreateAllCustomMenus()
RemoveAllCustomMenus
CreateFormDatasheetClipboard
CreateFormDataSheetCopyOnly
CreateFormDataSheetRow
CreateFormDataSheetRowClipboardOnly
End Sub发布于 2014-07-24 20:29:40
正如您已经注意到的,所有CreateSomething方法都有相同的重复模式。我们可以提取这个模式并将其封装在一个重用的方法中:
Private Sub CreateCommandBar(name As String, ParamArray buttonIDs() As Variant)
Dim menu As Office.CommandBar
Set menu = CommandBars.Add(name, msoBarPopup, False)
For Each ID In buttonIDs
menu.Controls.Add msoControlButton, i
Next
Set menu = Nothing
End Sub而且,CreateFormDataSheetRowClipboardOnly可以写成:
Private Sub CreateFormDataSheetRowClipboardOnly()
CreateCommandBar "asd", bcCut, bcCopy, bcPaste
End Subhttps://codereview.stackexchange.com/questions/57948
复制相似问题