|
クロさん こんにちは。 ありがとうございました。
やっと解決しましたが、まだまだ詳細部分については理解できていません。
特に、As Long = &H400,As Long = &H103 の記述はチンプンカンプンです。
以下のURLを参考にさせて頂きました。
http://miyabi.la.coocan.jp/technic/index.php?ID=1&Category=1&Topic=10
http://homepage1.nifty.com/rucio/main/tyukyu/tyukyu4.htm
1. フォームモジュールレベルで文字列データの比較条件を定義しました。
・Option Compare {Binary | Text | Database}
ここではAccess内でのみ使用しますので以下のように記述しました。
Option Compare Database
・Option Explicit
ここで、定数を記述しました。
Private Const PROCESS_STATUS As Long = &H400 'プロセスの状態を取得する
Private Const PROCESS_ACTIVE As Long = &H103 'プロセスは実行中
* As Long = &H400,As Long = &H103 の記述はまだ理解できていません。
ここでは、WinAPI宣言(APIのハンドル) を記述しました。
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
* プロセスハンドルの情報を取得する。
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
* プロセスの状態を取得する。
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
* プロセス終了時にプロセスハンドルを閉じる。
※General定義は以上です。 整理すると以下のようになりました。
Option Compare Database
Option Explicit
Private Const PROCESS_STATUS As Long = &H400
Private Const PROCESS_ACTIVE As Long = &H103
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
2. 次は、Private Subの記述です。
Private Sub export_Click()
' 変数宣言
Dim ProcessID As Long
Dim ProcessHandle As Long
Dim ExitCode As Long
Call SaveRec
' テーブルの更新
DoCmd.RunMacro "cif_export"
' テキストファイルの作成
MsgBox " 抽出条件を作成しました。 "
' Call Shell("C:\sinsystem_mdb\object\fs8e290a.exe")
' このCall文を以下のように変更しました。
ProcessID = Shell("C:\sinsystem_mdb\object\fs8e290a.exe")
ProcessHandle = OpenProcess(PROCESS_STATUS, False, ProcessID)
' プロセスハンドル情報の取得
Do
GetExitCodeProcess ProcessHandle, ExitCode
' プロセス状態の取得
DoEvents
Loop While ExitCode = PROCESS_ACTIVE
' プロセスが終了するまでループさせる(或いは、待っているのでしょうか)
Call CloseHandle(ProcessHandle)
' プロセスハンドルを閉じる
MsgBox " 抽出処理を終了しました。 "
DoCmd.RunMacro "tacifimport_delete"
' テーブルの初期化
DoCmd.RunMacro "cif_import"
' テーブルの作成(インポートです)
MsgBox " データベースを作成しました。 "
End Sub
※Private Sub定義は以上です。 整理すると以下のようになりました。
Private Sub export_Click()
' 変数宣言
Dim ProcessID As Long
Dim ProcessHandle As Long
Dim ExitCode As Long
Call SaveRec
DoCmd.RunMacro "cif_export"
MsgBox " 抽出条件を作成しました。 "
ProcessID = Shell("C:\sinsystem_mdb\object\fs8e290a.exe")
ProcessHandle = OpenProcess(PROCESS_STATUS, False, ProcessID)
Do
GetExitCodeProcess ProcessHandle, ExitCode
DoEvents
Loop While ExitCode = PROCESS_ACTIVE
Call CloseHandle(ProcessHandle)
MsgBox " 抽出処理を終了しました。 "
DoCmd.RunMacro "tacifimport_delete"
DoCmd.RunMacro "cif_import"
MsgBox " データベースを作成しました。 "
End Sub
以上です、ありがとうございました。
|
|