EXCELで別EXCELワークブックにあるVBAを実行し、結果を取得します。
以下のサンプルでは、呼び側のコマンドボタンをクリックすると、別プロセスでEXCELを起動し、起動した先のA1セルに現在時刻を書き込みます。
起動したEXCEL側では、A1セルのchangeイベントが走り、B2セルの値を読み取り、1つインクリメントした値をセットします。
Changeイベントで反応するセルを変えれば、複数のパラメータを渡して起動ということも容易に出来るでしょう。
呼び側
画面
VBAソース
Option Explicit Private Sub CommandButton1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Object '独自のプロシージャを定義しているのでExcel.Sheetオブジェクトではダメ Dim sNowValue As String '別プロセスで動かすEXCELファイルをオープン Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.Path & ".\BackGround.xlsm") 'xlApp.Visible = True Set xlSheet = xlBook.Worksheets(1) xlSheet.Cells(1, 1).Value = Now 'セルA1が更新されたら BackGround側の処理が走る '結果を取り出す sNowValue = xlSheet.Cells(2, 2).Value 'xlBook.Saved = True '保存しないならこのコメントを外して、下の行をコメント化する xlBook.Save '保存する 'EXCEL開放処理 Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing 'BackGround EXCELファイルから取得した値をセット Cells(2, 2).Value = sNowValue End Sub
呼ばれる側のExcelファイル(VBA)
画面
VBAソース
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Static bExtit As Boolean Dim i As Integer If bExtit = True Then Exit Sub End If 'A1セルかチェックする If Target.Row = 1 And Target.Column = 1 Then 'Changeイベント無限ループ回避 bExtit = True 'セルの値を1つ増やす Cells(2, 2) = Cells(2, 2).Value + 1 bExtit = False End If End Sub
コメント