セルの内容を引数として Excel 2007/2010 コンテキスト メニューから実行ファイルを起動する

セルの内容を引数として Excel 2007/2010 コンテキスト メニューから実行ファイルを起動する

Excel 2007 と 2010 の両方で、セルを右クリックして、選択肢の 1 つに「Slump を実行」を設定します。ユーザーがそれを選択すると、実行可能ファイルが起動します。

     \\servername\path\slump.exe 12345

12345 は右クリックされたセルの内容です。これをコンテキスト メニューに追加し、プロジェクトを起動する VBA にセルの内容を渡す方法と、ユーザーが管理者であるマシン上の Excel のコピーに機能を追加する最適な方法について概要を教えていただけますか。

編集: 展開方法の決定に影響が出る可能性があるので、おそらく 7 人か 8 人が使用することになるだろうと述べておく必要があります。私たちは全員同じ会社で働いています。マクロに署名するための証明書を所有しているとは思いません。おそらく、さまざまなプロジェクトで同様のものをたくさんインストールしたりアンインストールしたりすることになるでしょう。

答え1

機能が 1 つのブックでのみ必要な場合は、そのブックにマクロを追加して、xslm として保存するだけです。これが最も簡単です。

ただし、複数のワークブックに機能が必要な場合は、ニーズに応じて、アドイン (誰の Excel のコピーにもロードできるコード) または共有マクロとして作成する必要があります。

コードは非常にシンプルです。マクロが有効になっているワークブック (またはアドイン) が読み込まれたら、コンテキスト メニュー (右クリック メニュー) にエントリを追加します。

Private Sub Workbook_Open()
With Application.CommandBars("Cell")
    With .Controls.Add(Type:=msoControlButton)
        .BeginGroup = True
        .Caption = "Run Slump"
        .OnAction = "doTheSlump"
    End With
End With
End Sub

ワークブックが閉じられる(または非アクティブになる)たびに、コンテキスト メニューを削除します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With Application.CommandBars("Cell")
    .Controls("Run Slump").Delete
  End With
End Sub

コードは実行され、VBA モジュール内にある必要があります。この例では、セルの内容をファイルパスとして使用してノートブックを開きます。

Sub doTheSlump()
retval = Shell("C:\WINDOWS\notepad.exe " + Selection.Value, 1)
End Sub

関連情報