2

多数の通常の VBA マクロを含む Excel ワークシートがあります。このファイルは常に更新され、Excel アドイン (.xlam) として配布されます。これまでのところ、私はこれがどのように機能するかに非常に満足しています.

ここで、これらのマクロの一部を実行するリボン タブとボタンを追加します。当初、私はこの MSDN の記事を見つけて興奮してSetCustomUIいましたが、Excel (Project のみ) には存在しないように思われるのでがっかりしましたWorkbook_Open。他の SO の質問でこれが確認されますが、代替案はありません。

私の要件:

  • ユーザーは、現在のようにマクロ VBA コードにアクセスできる必要があります (アドインは VBE でプロジェクトとして表示されます)。
  • アドインの更新と再配布は簡単でなければなりません。今日、更新するファイルを送ります。
  • いくつかのマクロのボタンを備えたリボン タブが必要です。

何か案は?

4

2 に答える 2

7

アドイン ファイルでしばらく使用してきたコードを次に示します。私は他の人からそれを継承しましたが、それは常に私にとって十分に機能していました.

AddInsリボンに新しいツールバーを作成する必要があります。

アドイン ツールバーのスクリーンショット

関連するコードをすべてコピーしたと思います。質問がある場合や問題が発生した場合はお知らせください。

Option Explicit
'This module contains functions and subroutines to create Add-in menus

Public Const MenuName As String = "Menu Name"
Public Const APPNAME As String = "&Menu Name"
Private Sub Credit_Inf()

MsgBox "Created by YOUR NAME"

End Sub

Private Sub Auto_Open()

Dim NewMenuItemMacro As String
Dim NewMenuItem As String
Dim XLCommandBar As Integer
Dim NewItem As CommandBarButton
Dim ToolsMenu As CommandBarPopup
Dim NewMenu As CommandBar

NewMenuItemMacro = MenuName
NewMenuItem = APPNAME & "..."
XLCommandBar = 1 'Worksheet Menu Bar


'Delete the current menu if it exists (just in case)
On Error Resume Next
CommandBars(MenuName).Delete
On Error GoTo 0
Set NewMenu = Application.CommandBars.Add(MenuName, msoBarTop)

' .....
NewMenu.Visible = True

' Create a popup control on the bar and set its caption.
Set ToolsMenu = NewMenu.Controls.Add(Type:=msoControlPopup)
ToolsMenu.Caption = "Who built this?"
ToolsMenu.BeginGroup = True
    With ToolsMenu.Controls.Add(Type:=msoControlButton)
      .OnAction = "Credit_Inf"
      .Caption = "Find out who built this"
      .FaceId = 99
      .Style = msoButtonCaption
      .BeginGroup = False
    End With

'##Repeat ToolsMenu.Controls.Add, as necessary



End Sub


Private Sub Auto_Close()

'Delete the current menu if it exists (just in case)
On Error Resume Next
CommandBars(MenuName).Delete
On Error GoTo 0

End Sub

Private Sub EnableMenuItem(sItem As String, bEnable As Boolean)
On Error GoTo Err_EnableMenuItem

Dim NewItem As CommandBarButton
Dim NewMenu As CommandBar

Set NewMenu = Application.CommandBars(MenuName)

Set NewItem = NewMenu.FindControl(Tag:=sItem, recursive:=True)

NewItem.Enabled = bEnable

Err_EnableMenuItem:
    Resume Next

End Sub
Public Function IsWorkbookOpen() As Boolean

IsWorkbookOpen = True

If Application.Workbooks.count = 0 Then
    IsWorkbookOpen = False
End If

End Function
于 2013-04-28T15:08:41.667 に答える
2

リボン CustomUI を XLAM ファイルに埋め込むだけでよいはずです。Microsoft には、これを支援するためのツールがあると思います (ただし、手動で作成して埋め込むこともできます)。


OPから、 OfficeカスタムUIツールを使用してこれを達成するために彼らが行ったことは次のとおりです。

この回答が推奨することを試しました:元のワークシートでツール(カスタムUIエディターツールを使用)を使用してタブとボタンを追加し、アドインとして保存します。これは私が望んでいたものに完全に機能します。

セットアップは次のとおりです。

Module mdlMyActions in MyAddin.xlsm:

 Public Sub HelloWorld(ctl As IRibbonControl)
    MsgBox("Hello, world!")
End Sub

MyAddin.xlsm に挿入された XML:

 <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="tabMyTab" label="My Tab">
        <group id="grpMyGroup" label="My Group">
          <button id="btnHelloWorld" label="Hello World"
                  imageMso="HappyFace" size="large" onAction="HelloWorld" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

これはアドインとして保存する前のすべてであることに注意してください。アドインとして保存して Excel にインストールすると、アドインは完全に機能します。


于 2013-04-28T16:32:02.037 に答える