前提・実現したいこと
C#でコーディングしており、Excelのマクロ(VBA)実行を試みています。
C#でExcelをOpenするところまでは難なく実装できております。
単純にVBAマクロを呼び出すだけであれば .Run メソッドを用いれば可能なのですが、
肝心のマクロ内に Application.caller を使った分岐があり、そもそもC#から呼ばれることを想定していないマクロである為難儀しております。
そもそものExcelには、日付(1~31)が縦に並んでおり、その各日付の横に [+] [-] のボタンが設置されているようなイメージです。(ボタンは計62個(31日 x 2種))
該当のソースコード(抜粋)
呼び出したいVBAマクロと、コーディングしているC#の現況の2部構成で記載いたします。
C#
1 2 // Excel.Application のインスタンス生成 3 Microsoft.Office.Interop.Excel.Application xlApp = null; 4 xlApp = new Microsoft.Office.Interop.Excel.Application(); 5 Microsoft.Office.Interop.Excel.Workbooks xlBooks = null; 6 Microsoft.Office.Interop.Excel.Workbook xlBook = null; 7 Microsoft.Office.Interop.Excel.Sheets xlSheets = null; 8 Microsoft.Office.Interop.Excel.Worksheet xlSheet = null; 9 10 // オープン 11 xlBooks = xlApp.Workbooks; 12 xlBook = xlBooks.Open(@"D:\share\work\Book1.xlsx",0,false); 13 14 xlSheets = xlBook.Worksheets; 15 // 初めのシートを参照 16 xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet; 17 18 'この辺りまでは動作確認できており、これより後ろの実装(マクロ呼出し方法)に苦戦しています。 19 20 '(困り果てていて未実装です)
VBA
1Public Sub sub_AddDel_DayLine() 2 On Error GoTo ERR_TRAP 3 4 Dim strButtonName As String 'マクロを呼び出したボタン名(BtnAdd01~31 or BtnDel01~31) 5 Dim strShori As String '追加(Add)/削除(Del) 6 7 'ボタン名から処理区分、対象日を取得 8 strButtonName = Application.Caller 9 10 '処理区分(追加/削除) 11 If InStr(strButtonName, "Add") Then 12 strShori = "Add" 13 ElseIf InStr(strButtonName, "Del") Then 14 strShori = "Del" 15 End If 16 17 Select Case strShori 18 Case "Add" 19 '省略(追加処理) 20 21 Case "Del" 22 '省略(削除処理) 23End Sub
Application.caller 部分で押下されたボタン名を取得し、どの日付のどのボタンが押されたかに応じて分岐しているマクロのようです。
諸事情あり、VBA側には変更を加えられないので、C#だけでこのマクロを正しく動かしたいと考えています。
試したこと
VBAを呼び出す前に、C#側で Application.caller に値を代入したらいいのではないか、など考えてみましたが、VBAのプロパティをC#で設定することはできないようで(当たり前?)うまくいきませんでした。
C#で、マクロが設定されているボタン名称を指定してクリックイベントを発生させるのが有力手段かなと考えているのですが、
ボタン名称指定でクリックイベントを起こす方法を調べても見つけられませんでした。
###ご相談内容
・C#でExcelのマクロボタンの名称を指定してクリックイベントを起こす方法
もしくは
・呼び先VBAの Application.caller をC#で扱う(設定する)方法
のいずれかについてご教示いただけませんでしょうか。
よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
VisualStudio 2019(.NET Framework 4.7.2)
回答1件
あなたの回答
tips
プレビュー