dポイントプレゼントキャンペーン実施中!

初心者ですが、宜しくお願いします。

Application.OnTime EarliestTime:=TimeValue(time_ptn), Procedure:="my_func"

上記コードの、末尾のプロシージャの指定において、

Dim prm1 As String, prm2 As Long

Function my_func(prm1,prm2)
   ~内容~
End Function

または、

Sub my_func(prm1,prm2)
   ~内容~
End Sub

というプロシージャを指定したいのですが、
末尾の書き方が分からず困っております。

「Procedure:="my_func(prm1,prm2)"」
「Procedure:= my_func(prm1,prm2)」

のようにやっても、うまくいきません。
正しい書き方をどなたか教えて下さい。

A 回答 (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
    • good
    • 2
この回答へのお礼

レスポンスが大変遅くなり、申し訳ございませんでした。
早速、試させて頂きました所、うまくいきました。
ありがとうございます。

ちなみに、
Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _
            Procedure:="'my_func """ & s & """," & i & "," & j & "'"

の箇所における、「_Procedure:="」の部分にあります、先頭のアンダーバーは、
これは何でしょうか?

このアンダーバー無しで試して上手くいきましたので、これは無視していますが、
何か意味のある記号なのでしょうか。
もしよろしければ、また教えて下さい。

近々、締め切らせて頂くつもりです。
その際には、ベストアンサーとさせて頂きます!

お礼日時:2010/04/28 12:53

VisualBasicEditorでの作法みたいなものです。


基本、コードは1ステップを1行で記述します。
右に長くなりすぎると見にくいですよね。
適宜折り返して可読性を良くします。
http://www.accessclub.jp/actips/tips_108.htm
    • good
    • 0
この回答へのお礼

なるほど、よく分かりました。
この度は終始、丁寧に回答下さり、誠にありがとうございました。
とても助かりました!

お礼日時:2010/04/28 23:29

先のアドバイスコードをそのままコピーペーストしてもらえればいいんですけど。


新規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
こんな感じのものからやってみてください。
    • good
    • 0
この回答へのお礼

再度、分かりやすく教えて頂き、ありがとうございます。
教えて頂いたコードをテストし、そのコードに問題がないことが確認できました。

しかし、私の問題は依然として解決していません。
なぜかと言いますと、
プロシージャの引数に渡したいものは、「変数(prm)」なのです。

1とか"a"という、具体的な数値や文字列ではないので、
それが原因でうまくいかないようです。

つまり、
Procedure:="'my_func 1'"  :○(うまくいく)

Procedure:="'my_func prm'"  :×(うまくいかない)

とすると、プロシージャが見つかりません、とアラートが出ます。
(prm は変数です。prm = "この変数を渡したい" とでもしておきましょうか。)

変数を引数として渡す場合の記述方法はまた違ったものになりそうですね?
もし、お分かりでしたら、教えて頂けると助かります。
ちなみに、引数に渡したい変数の数は、3つあります。
(当初2つでしたが、3つになりました)
型としては、string、long、それぞれ1つは含む可能性があります。

以上、宜しくお願い致します。

お礼日時:2010/04/16 05:23

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

この回答への補足

「お礼」を書かせて頂いた後、実際に試してみましたところ、

「マクロ"~~ファイルの存在場所~~ my_func "a",1" が見つかりません」
というようなアラートが出ました。

教えて頂いた記述の、シングルorダブルクォートが、とても繁雑であるため、
本当に、これで良いのだろうかとも思ってしまっているのですが、
教えて頂いたアドバイスの記述には、問題はないでしょうか?

ちなみに、もし宜しければですが、
ここで教えて頂いているクォートの意味、について、
分解して教えて頂けると大変助かります。
またよろしければ、教えて下さい。

補足日時:2010/04/15 23:36
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます

> Procedure:="'my_func ""a"",1'"
> こんな感じでスペースで区切って引数を渡し、シングルクォートでプロシージャ文字列を括ります。

そういった方法があるのですね!
まだ試していませんが、早速試してみたいと思います。
試しましたら、改めて、こちらにてご連絡致します。

> という書き方から推測すると、グローバル変数を利用する事を想定しているのでしょうか。

いえ、グローバル変数を利用しようという考えは、今のところありませんが、
本件の解決にあたり、必要とあれば、使うかもしれません。
ただ、本件とは関係のない所における、グローバル変数の使用というのは、ない、と考えて頂いて結構です。

では、早速、教えて頂いた記述方法を試してみますね。

お礼日時:2010/04/15 23:23

タイムアウトルーチン(my_func)は引数なしプロシジャーなので無理でしょう。


何らかの値を渡したいのであれば、グローバル変数で渡すのが普通です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

「引数なしのプロシージャ」ということを知らずに使っておりました。
グローバル変数で対処する方法を検討してみます。
どうもありがとうございました。

お礼日時:2010/04/15 23:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A