Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


30688 / 76732 ←次へ | 前へ→

【51308】OnTimeメソッドで呼び出すプロシージャへの引数の渡し方
質問  jabjab  - 07/9/11(火) 13:49 -

引用なし
パスワード
   Excel2003のVBAで一定時間間隔で処理を行うプログラムを考えています。

過去の質問箱やMicrosoftのページなどを調べ、OnTimeメソッドを使った
下記のテストプログラム作ったところ、目的とする動作を行うことができ
ました。
------------------------Test1ここから----------------------
Type testType
  i As Integer
  B As String
  dummyFlag1 As Boolean  'Testでは使用しません
  dummyFlag2 As Boolean  'Testでは使用しません
  dummyFlag3 As Boolean  'Testでは使用しません
End Type
Dim A As testType

Sub test()
  With A
    .i = 10
    .B = "ABC"
  End With
  TestOnTime
End Sub

Sub TestOnTime()
  If A.i > 0 Then
    Cells(1, A.i + 2) = A.B & CStr(A.i)
    A.i = A.i - 1
    Application.OnTime Now + TimeValue("00:00:3"), "'TestOnTime'"
  End If
End Sub
------------------------Test1ここまで----------------------

最終的には変数Aを引数としてTestOnTimeプロシージャに渡したいと考えて
いるため、下記のプログラムに書き換えたのですが、動作しません。
「マクロ"C:\...\test4.xls'!'TestOnTime "A""が見つかりません」
のエラーが出ます。
------------------------Test2ここから----------------------
Type testType
  i As Integer
  B As String
  dummyFlag1 As Boolean  'Testでは使用しません
  dummyFlag2 As Boolean  'Testでは使用しません
  dummyFlag3 As Boolean  'Testでは使用しません
End Type

Sub test()
  Dim A As testType
  With A
    .i = 10
    .B = "ABC"
  End With
  TestOnTime A
End Sub

Sub TestOnTime(A As testType)
  If A.i > 0 Then
    Cells(1, A.i + 2) = A.B & CStr(A.i)
    A.i = A.i - 1
    Application.OnTime Now + TimeValue("00:00:3"), _
      "'TestOnTime " & """A""" & "'"
  End If
End Sub
------------------------Test2ここまで----------------------

Application.OnTime Now + TimeValue("00:00:3"), _
"'TestOnTime " & "" & A & "'"

Application.OnTime Now + TimeValue("00:00:3"), _
"'TestOnTime " & """" & A & """'"
だと、「型が一致しません」のコンパイルエラーが出ます。

Aがint型やDate型などでは下記のテストプログラムで動作しました。
------------------------Test3ここから----------------------
Sub test()
  Dim A As Date
  
  A = Now
  TestOnTime 10, A
End Sub

Sub TestOnTime(i As Integer, A As Date)
  If i > 0 Then
    Cells(1, i + 2) = A
    i = i - 1
    Application.OnTime Now + TimeValue("00:00:3"), _
      "'TestOnTime" & """" & i & """,""" & A & """'"
  End If
End Sub
------------------------Test3ここまで----------------------


------------------------Test4ここから----------------------
Sub test()
  TestOnTime 10
End Sub

Sub TestOnTime(i As Integer)
  If i > 0 Then
    Cells(1, i + 2) = CStr(i)
    i = i - 1
    Application.OnTime Now + TimeValue("00:00:3"), _
      "'TestOnTime " & "" & i & "'"
'      "'TestOnTime " & """" & i & """'" ←こちらでも動作
  End If
End Sub
------------------------Test4ここまで----------------------

Type で作製した型ではOnTimeメソッドの引数にならないのでしょうか?

1 hits

【51308】OnTimeメソッドで呼び出すプロシージャへの引数の渡し方 jabjab 07/9/11(火) 13:49 質問
【51312】Re:OnTimeメソッドで呼び出すプロシージャ... Lindy 07/9/11(火) 15:20 発言
【51313】Re:OnTimeメソッドで呼び出すプロシージャ... jabjab 07/9/11(火) 15:42 発言
【51374】Re:OnTimeメソッドで呼び出すプロシージャ... ichinose 07/9/13(木) 19:10 発言
【51375】Re:OnTimeメソッドで呼び出すプロシージャ... ichinose 07/9/13(木) 20:22 発言
【51389】繰り返し処理プロジェクト 設定編 ichinose 07/9/14(金) 10:46 回答
【51390】繰り返し処理プロジェクト 運用編 ichinose 07/9/14(金) 10:47 回答

30688 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free