情シスは何度でも甦るさ。

VBA!VBA!

C#でNPOIを使ってExcelを編集するとフォームボタンに割り当てたマクロが消える

最近、社内で1人しかSQLがわからないために、日々SQLをシコシコと実行する作業に嫌気がさして、 誰でもできるようにWindowsフォームアプリをC#で開発して、運用作業を他の人に振ることにした。

で、DBから抜いた値をExcelに取り込む → ユーザーに渡してユーザー側で編集 → 編集後ExcelをもらってDBの値を洗い替えるって、運用作業があるんですが、

Excel上のマクロを割り当てたフォームボタンが、いざ、NPOIを通して出力するとマクロの割り当てが初期化されるという事象にめぐり当たった。

これが

f:id:ryoben:20180428103139p:plain

こう

f:id:ryoben:20180428103144p:plain

色々と調べてStackOverFlowにも投稿があったのだが、NPOIの仕様で、Excelに直接貼り付けたフォームオブジェクトのマクロは消えるから、フォームにボタン貼り付けたりしようね。

とか、書いてた。

うーん、しかし、ボタンでさくっとマクロを起動したいのですよ。

色々と悩んだ挙句、Excelオープン時に、ボタンにマクロを割り当てるマクロを起動することで、とりあえず難を逃れることに。

Private Sub Auto_Open()
    ActiveSheet.Shapes.Range(Array("ボタン 1")).Select
    Selection.OnAction = "InputCheck"
End Sub

なんかもやっとするよね。

ちなみに、拡張子xmlのファイルだと、普通にボタンに割り当てたマクロはそのままになってたりした。