仕事が重なり更新が遅れがちなので仕事ネタで暫くしのごうと思う。
ファイルメーカーPro(FMP)は大変使いやすいDBソフトですが、複雑なレイアウトの印刷やデータ加工(クエリー)にはOfficeとの連携が欠かせません。
筆者が手掛けた開発事例から、使えそうなものを紹介します。
※これはあくまでもWindows版の事例ですので悪しからず。Macな方はAppleScriptでガンガンやってください。
FMPからEXCELを起動し任意のマクロをキックする
EXCELの起動はスクリプトで
「Eventを送信」(旧版は「メッセージを送信」)
指定ボタンで「ファイル/アプリケーションを開く」
ファイル指定ボタンで「xx.xls」等を選択
予め「xx.xls」にマクロ「Auto_Open」を作成しておく。
例
Sub Auto_Open()
ここに処理を記述する、又は本編のマクロ名を書いておく。
End Sub
※Accessでは「AutoExec」という名前のマクロを作成する(Access編で解説予定)
又は起動オプション「/cmd」「/ x」等が使える。
ここまでが一般的なEXCEL連携の方法。
EXCELでは使える起動オプションが無いので(バッチも約不足なので)
Windows Scripting Host「WSH」(xx.vbs)を使います。
'=============================================================
Option Explicit ' おまじない
Dim strFolderName ' フォルダ名
Dim strScriptName ' スクリプト名
Dim objExcel ' エクセルオブジェクト
Dim myBook ' エクセルBOOKオブジェクトk
'実行されるスクリプトのpathを取得
strScriptName = WScript.ScriptName
strFolderName = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")) ' バックスラッシュは¥マークです
MsgBox "path=" & strFolderName ' 注1)
'エクセルオブジェクトを作成
Set objExcel = CreateObject("Excel.Application")
'ワークブックを開く(実行されるスクリプトと同じところに置く例ブック名をtest.xlsマクロ名をmake_dataとする)
Set myBook = objExcel.Workbooks.Open(strFolderName & "test.xls")
'エクセル画面を表示(表示しない場合はFalse)
objExcel.Visible = True
'セルに値を書き込む場合は(例 2番目のシートのセルB2に"vbstest"を代入)
objExcel.sheets(2).cells(2,2) = "vbstest"
'Excelのマクロ"make_data"をKick
objExcel.Run myBook.Name & "!make_data" ' フルパスのブック名!&マクロ名にする
'アラートダイアログを非表示
objExcel.DisplayAlerts = False
'ワークブックの保存(保存しない場合は記述しない)
objExcel.Workbooks(1).Save ' 注2)名前を付けて保存
'エクセルを終了
objExcel.Quit
'エクセルオブジェクトの破棄
Set objExcel = Nothing
MsgBox "処理終了しました!!" ' 注1)
※ここまでを「xx.vbs」のように拡張子「.vbs」を付けて保存
' 注1)MsgBoxの行は適宜はずして下さい。
' 注2)objExcel.Workbooks(1).SaveAs フルパスのブック名(当然文字列なので「"」ダブルコーテーションで括ってください)
'=============================================================
GetObjectバージョンもあるのでそのうち紹介します。
Windowの表示などちょっと解りづらいので。
補足
作業用のシートを確保しておけば(無ければWorksheets.Add等で追加し終了時に削除する)
文字でも数字でも渡せるので応用範囲が広く柔軟なシステムが作れます。
更にFMP側に会社基本情報等の1レコードファイルを作成しそこにVBS用フィールドを設定し(TXTで構わない、ブック名やマクロ名を組み込みたければ計算フィールドにする)上記VBS文を書き込む。
FMPのスクリプトに「フィールド内容のエクスポート[会社基本情報::VBS_feild;「test.vbs」自動的に開く]」を設定すれば
ボタン一つでExcelと連携出来ます。
加工済みシートやcsvに吐き出したデータをインポートするなどすれば高度なデータ処理も夢ではありません。
全銀協の統一データ作成なども過去にフロッピー渡しで運用していました。
※生意気なようですがここはプライベートなBlogなのでQ&Aは「No,thank you!」でお願いします。