過去ログ

                                Page     566
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼一定時間(10ms)毎に適当な処理をしたい  とし 03/1/18(土) 14:50
   ┗Re:一定時間(10ms)毎に適当な処理をしたい  JuJu 03/1/18(土) 19:09

 ───────────────────────────────────────
 ■題名 : 一定時間(10ms)毎に適当な処理をしたい
 ■名前 : とし
 ■日付 : 03/1/18(土) 14:50
 -------------------------------------------------------------------------
   はじめまして、としといいます。
OfficeXPのExcelでVBAからWIN32APIを呼び出していてわからないことがあるので
教えてください。

ある一定時間(10ms)ごとに適当な処理をしたいということSetTimerを使ってみました
標準モジュールで
'<WIN32APIの宣言>
Public Declare Function SetTimer Lib "user32" ( _
      ByVal wndHandle As Long, _
      ByVal nIDEvent As Long, _
      ByVal uElapse As Long, _
      ByVal lpTimerFunc As Long _
) As Long
'<コールバック関数>
Public Sub TimerProc(ByVal wndHandle As Long, ByVal uMsg As Long, ByVal idEventg As Long, ByVal dwTime As Long)
  Sheet1.Range("A4").Value = 1000 '特に意味はありません
End Sub
としています。

呼び出し側は
Private Sub CommandButton1_Click()
  wndExcel = FindWindow("XLMAIN", Application.Caption)
  idTimer = SetTimer(wndExcel, 32767, 10, AddressOf TimerProc)
End Sub
です。
これで一応10ms毎にWM_TIMERは飛んできているようです。SPY++で確認しました。
が、適当なセルをクリックすると必ずEXCELがクラッシュします。
コールバック関数のなかの
Sheet1.Range("A4").Value = 1000
をコメントにすると問題ないので、コールバック関数の中からEXCELを参照するのは
NGなのかな?と思っています。
何がいけないのかお分かりになる方是非ご意見ください
 ───────────────────────────────────────  ■題名 : Re:一定時間(10ms)毎に適当な処理をしたい  ■名前 : JuJu <juju-bbs@su-u.com>  ■日付 : 03/1/18(土) 19:09  -------------------------------------------------------------------------
   としさん、こんにちはぁ

>はじめまして、としといいます。
>OfficeXPのExcelでVBAからWIN32APIを呼び出していてわからないことがあるので
>教えてください。
>ある一定時間(10ms)ごとに適当な処理をしたいということSetTimerを使ってみました

Excel(VBA)は非同期で呼び出されるコールバック関数は使用することができません。
(VBをIDE環境で実行していても同じですね)
AddressOfは同期実行されるAPI(Enum系等)用に用意されています。
VBであればネイティブにコンパイルされている状態でしたら、特定の条件化であれば非同期で呼び出されるもの(SetTimer, CreateThread等)も使えることがありますが、エクセルを含むVBA環境ではまず使えません。

エクセルでタイマでしたら、ActiveXコントロールかActiveXDLL等を使ったほうが良いのかな。

ではではぁ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 566