アドインファイル(.xlamと.xla)のシート制御
アドインファイルのシート表示/非表示
アドインファイルは、シートを裏で持っている。
以下のコードで、シートを表示することができる。
'アドインファイルのシート表示 Thisworkbook.IsAddin = False
この状態では、ブックを上書き保存することはできないが、セルに書き込みを行うことは可能である。 そこで、たとえばSheet1のA1セルに「a」と書き込みを行った後、以下のコードで再びシートを隠す。
'アドインファイルのシート非表示 Thisworkbook.IsAddin = True
さて、この状態で、以下のサンプルコードを動かしてみよう。
'サンプルコード Msgbox Worksheets("sheet1").cells(1,1).value
無事、先ほど入力した値「a」が表示されたことだろう。
アドインファイルの上書きコード
一旦、作業がしやすいように、上書き用のコードを作成する。
Sub Addin_DevSave() 'アドイン上書きを随時行うためのエラー回避ロジック 'シートを出したまま保存しようとすると、エラーが出るため ThisWorkbook.IsAddin = True With ThisWorkbook .Save End With ThisWorkbook.IsAddin = False End Sub
Excelにこのファイルのアドイン設定を行い、ツールバーにボタンとして配置してしまうのがおすすめだ。
シート制御機能と、共通の呼び出し関数
※あとで記事を分割するかもしれません
これらのプロシージャが使いやすいように、呼び出し用の関数を作成した。
'呼び出し用の関数 Function Addin_Switch(ByVal NameProc As Variant, MemoProc As Variant) Addin_Switch = MsgBox("※ 機能をオンにする場合はYES、オフの場合はNOを選択してください" & vbCrLf & vbCrLf & "◆ " & NameProc & vbCrLf & vbCrLf & MemoProc, vbYesNo, "スイッチ:" & NameProc) End Function
以下のプロシージャを作成し、設定シート制御のボタンとして割り当てている。
'設定シート制御 Sub Addin_Setting() NameProc = "Addin_Setting" MemoProc = "アドインの設定シートを開きます。" If Addin_Switch(NameProc, MemoProc) = vbYes Then With ThisWorkbook .IsAddin = False .Activate End With Else ThisWorkbook.IsAddin = True Call Addin_Save End If End Sub
さて、自分がこのコードをどのように使っているかというと、シートへの変数の格納だ。複数ツール(Excel)からなる業務システムを組む際には、ひとつのファイルで共通の変数を管理したいシーンが多くある。
Excelのシートは、ノンプログラマの自分にとっては、計算内容の視認性が良く、変数の適用範囲もややこしいことがない。
何より、ドメイン知識が複雑な業務(金融・製造業など)の場合は、バックオフィスのスタッフがエラーの状況を理解できることが重要だし、変数を見える化することで、業務フローを簡略化できることすらある。
シートでどう変数を管理しているかは、別エントリに記載する。