- ベストアンサー
OnTime 使用時のプロシージャへの引数の与え方、その記述方法を教えて下さい。
- OnTime 使用時のプロシージャへの引数の与え方や記述方法について教えてください。初心者ですが、よろしくお願いします。
- 初心者向けに、OnTime 使用時のプロシージャへの引数の与え方や記述方法を教えてください。
- OnTime のプロシージャに引数を与える方法や記述方法を初心者にも理解しやすく教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Option Explicit Sub test() Dim s As String Dim i As Long Dim j As Long Dim x As String s = "a" i = 1 j = 2 '文字列 & 変数 & 文字列...みたいに繋ぎます。 MsgBox "'my_func """ & s & """," & i & "," & j & "'" Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _ Procedure:="'my_func """ & s & """," & i & "," & j & "'" ' 'x = "'my_func """ & s & """," & i & "," & j & "'" 'MsgBox x 'Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _ Procedure:=x End Sub Sub my_func(prm1 As String, prm2 As Long, prm3 As Long) MsgBox prm1 & prm2 & prm3 End Sub
その他の回答 (4)
- end-u
- ベストアンサー率79% (496/625)
VisualBasicEditorでの作法みたいなものです。 基本、コードは1ステップを1行で記述します。 右に長くなりすぎると見にくいですよね。 適宜折り返して可読性を良くします。 http://www.accessclub.jp/actips/tips_108.htm
お礼
なるほど、よく分かりました。 この度は終始、丁寧に回答下さり、誠にありがとうございました。 とても助かりました!
- end-u
- ベストアンサー率79% (496/625)
先のアドバイスコードをそのままコピーペーストしてもらえればいいんですけど。 新規Book、新規標準モジュールで試して、どうなのか教えてください。 MsgBox "a" ってやると『a』と表示されますよね。 VBAで『"』で囲むと文字列とみなされます。 では『"』をMsgBoxで表示させたい場合はどうするか。 MsgBox """" 外側の『"』2つは、中の文字を文字列として扱うために囲ったものです。 中の『"』2つでMsgBoxの結果『"』を表示します。 ダブルクォートを2つ重ねる事で『"』を表現します。 今回、引数Procedure:=に設定したいプロシージャ名の文字列は 'my_func "a",1' です。 MsgBoxで文字列として表示させる場合 MsgBox "'my_func ""a"",1'" シングルクォート my_func 半角スペース ダブルクォート ダブルクォート a ダブルクォート ダブルクォート カンマ 1 シングルクォート と記述しなければいけません。 まずは単純なもので確認するなら Sub test() Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _ Procedure:="'my_func 1'" End Sub Sub my_func(prm As Long) MsgBox prm End Sub こんな感じのものからやってみてください。
お礼
再度、分かりやすく教えて頂き、ありがとうございます。 教えて頂いたコードをテストし、そのコードに問題がないことが確認できました。 しかし、私の問題は依然として解決していません。 なぜかと言いますと、 プロシージャの引数に渡したいものは、「変数(prm)」なのです。 1とか"a"という、具体的な数値や文字列ではないので、 それが原因でうまくいかないようです。 つまり、 Procedure:="'my_func 1'" :○(うまくいく) ↓ Procedure:="'my_func prm'" :×(うまくいかない) とすると、プロシージャが見つかりません、とアラートが出ます。 (prm は変数です。prm = "この変数を渡したい" とでもしておきましょうか。) 変数を引数として渡す場合の記述方法はまた違ったものになりそうですね? もし、お分かりでしたら、教えて頂けると助かります。 ちなみに、引数に渡したい変数の数は、3つあります。 (当初2つでしたが、3つになりました) 型としては、string、long、それぞれ1つは含む可能性があります。 以上、宜しくお願い致します。
- end-u
- ベストアンサー率79% (496/625)
Sub test() Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _ Procedure:="'my_func ""a"",1'" End Sub Sub my_func(prm1 As String, prm2 As Long) MsgBox prm1 & prm2 End Sub こんな感じでスペースで区切って引数を渡し、シングルクォートでプロシージャ文字列を括ります。 でも >Dim prm1 As String, prm2 As Long > >Function my_func(prm1,prm2) >: という書き方から推測すると、グローバル変数を利用する事を想定しているのでしょうか。 Option Explicit Dim prm1 As String Dim prm2 As Long Sub test2() prm1 = "a" prm2 = 1 Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _ Procedure:="my_func2" End Sub Sub my_func2() MsgBox prm1 & prm2 End Sub
お礼
アドバイスありがとうございます > Procedure:="'my_func ""a"",1'" > こんな感じでスペースで区切って引数を渡し、シングルクォートでプロシージャ文字列を括ります。 そういった方法があるのですね! まだ試していませんが、早速試してみたいと思います。 試しましたら、改めて、こちらにてご連絡致します。 > という書き方から推測すると、グローバル変数を利用する事を想定しているのでしょうか。 いえ、グローバル変数を利用しようという考えは、今のところありませんが、 本件の解決にあたり、必要とあれば、使うかもしれません。 ただ、本件とは関係のない所における、グローバル変数の使用というのは、ない、と考えて頂いて結構です。 では、早速、教えて頂いた記述方法を試してみますね。
補足
「お礼」を書かせて頂いた後、実際に試してみましたところ、 「マクロ"~~ファイルの存在場所~~ my_func "a",1" が見つかりません」 というようなアラートが出ました。 教えて頂いた記述の、シングルorダブルクォートが、とても繁雑であるため、 本当に、これで良いのだろうかとも思ってしまっているのですが、 教えて頂いたアドバイスの記述には、問題はないでしょうか? ちなみに、もし宜しければですが、 ここで教えて頂いているクォートの意味、について、 分解して教えて頂けると大変助かります。 またよろしければ、教えて下さい。
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
タイムアウトルーチン(my_func)は引数なしプロシジャーなので無理でしょう。 何らかの値を渡したいのであれば、グローバル変数で渡すのが普通です。
お礼
回答ありがとうございます。 「引数なしのプロシージャ」ということを知らずに使っておりました。 グローバル変数で対処する方法を検討してみます。 どうもありがとうございました。
お礼
レスポンスが大変遅くなり、申し訳ございませんでした。 早速、試させて頂きました所、うまくいきました。 ありがとうございます。 ちなみに、 Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _ Procedure:="'my_func """ & s & """," & i & "," & j & "'" の箇所における、「_Procedure:="」の部分にあります、先頭のアンダーバーは、 これは何でしょうか? このアンダーバー無しで試して上手くいきましたので、これは無視していますが、 何か意味のある記号なのでしょうか。 もしよろしければ、また教えて下さい。 近々、締め切らせて頂くつもりです。 その際には、ベストアンサーとさせて頂きます!