2016-12-14 38 views
2

Excelアドインを作成しています。これは、このようなモジュールでは、いくつかの機能で構成されていますExcel AddinのMacroOptionsを設定するタイミング

Public Function MyFunctionOne(X As Range, Y As Double) As Double 
    MyFunctionOne = 1 'Example 
End Function 
Public Function MyFunctionTwo(X As Range, Y As Double) As Double 
    MyFunctionTwo = 2 'Example 
End Function 
Public Function MyFunctionThree(X As Range, Y As Double) As Double 
    MyFunctionThree = 3 'Example 
End Function 

私は.xlamエクセルアドインとして全体を保存しました。したがって、これらの機能は、毎回新しいスプレッドシートを開始するたびに利用できます。

私は最近、カテゴリに機能を割り当てることができたことを知りました。これは本当に役に立ちます。これにより、Excelファンクションウィザードから簡単に使用できます。私はカテゴリを割り当てるには、次のコードを使用します。

Public Sub MyRegister() 
    Application.MacroOptions Macro:="MyFunctionOne", Description:="Returns 1", Category:="My New Category" 
    Application.MacroOptions Macro:="MyFunctionTwo", Description:="Returns 2", Category:="My New Category" 
    Application.MacroOptions Macro:="MyFunctionThree", Description:="Returns 3", Category:="My New Category" 
End Sub 

を今、私は手動でマクロ、MyRegisterを実行した場合、関数はすべて新しいカテゴリを取得し、それは非常によく動作します。しかし、新しいスプレッドシートを作成するたびに手動でマクロを実行する必要はありません。私の質問は、アドインが新しいスプレッドシートごとにどのようにこれを自動的に行うのですか?

私はこのようなアドインのWorkbook_Openでそれを入れてみました:

Private Sub Workbook_Open() 
    Call MyRegister 
End Sub 

問題は、それが動作しないということです。 Excelが起動するたびに、エラーメッセージ "Cannot edit a macro on a hidden workbook."が表示されますので、Workbook_Openイベントはこれを行う場所が間違っているようです。

私の質問は、適切な時間にMyRegisterマクロを実行して、アドイン機能をカテゴリに割り当てる方法です。

ところで、私は本当にテンプレートを作りたくありません。私は本当にこれを唯一のものとして保つべきです。

ありがとうございます!

答えて

1

、あなたはこれを行うことができます。

1

ほぼあります。通常のブックとしてアドインを変換し、オプションを設定し、アドインとしてリセットします。詳細については、コードコメントを参照してください。

Private WithEvents App As Application 

Private Sub App_WorkbookActivate(ByVal Wb As Workbook) 
    MyRegister 
End Sub 

Private Sub Workbook_Open() 
    Set App = Application 
End Sub 

ワークブックがアクティブであるとき、それは実行されますそのように、あなたはあなたが取得しているエラーを回避ます:代わりにWorkbook_Openを使用しての

Public Sub MyRegister() 
    Application.ScreenUpdating = False '/ Turn it off to avoid flicker. 
    ThisWorkbook.IsAddin = False '/ Make the add-in workbook as normal, hence unhiding sheets 
    Application.MacroOptions Macro:="MyFunctionOne", Description:="Returns 1", Category:="My New Category" 
    Application.MacroOptions Macro:="MyFunctionTwo", Description:="Returns 2", Category:="My New Category" 
    Application.MacroOptions Macro:="MyFunctionThree", Description:="Returns 3", Category:="My New Category" 
    ThisWorkbook.IsAddin = True '/ Set back as add-in, hides everything. 
    Application.ScreenUpdating = True '/ Turn on screen updating 
End Sub 
関連する問題