
初心者ですが、宜しくお願いします。
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)」
のようにやっても、うまくいきません。
正しい書き方をどなたか教えて下さい。
No.4ベストアンサー
- 回答日時:
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
レスポンスが大変遅くなり、申し訳ございませんでした。
早速、試させて頂きました所、うまくいきました。
ありがとうございます。
ちなみに、
Application.OnTime EarliestTime:=Now + TimeValue("0:00:01"), _
Procedure:="'my_func """ & s & """," & i & "," & j & "'"
の箇所における、「_Procedure:="」の部分にあります、先頭のアンダーバーは、
これは何でしょうか?
このアンダーバー無しで試して上手くいきましたので、これは無視していますが、
何か意味のある記号なのでしょうか。
もしよろしければ、また教えて下さい。
近々、締め切らせて頂くつもりです。
その際には、ベストアンサーとさせて頂きます!
No.5
- 回答日時:
VisualBasicEditorでの作法みたいなものです。
基本、コードは1ステップを1行で記述します。
右に長くなりすぎると見にくいですよね。
適宜折り返して可読性を良くします。
http://www.accessclub.jp/actips/tips_108.htm
No.3
- 回答日時:
先のアドバイスコードをそのままコピーペーストしてもらえればいいんですけど。
新規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つは含む可能性があります。
以上、宜しくお願い致します。
No.2
- 回答日時:
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ダブルクォートが、とても繁雑であるため、
本当に、これで良いのだろうかとも思ってしまっているのですが、
教えて頂いたアドバイスの記述には、問題はないでしょうか?
ちなみに、もし宜しければですが、
ここで教えて頂いているクォートの意味、について、
分解して教えて頂けると大変助かります。
またよろしければ、教えて下さい。
アドバイスありがとうございます
> Procedure:="'my_func ""a"",1'"
> こんな感じでスペースで区切って引数を渡し、シングルクォートでプロシージャ文字列を括ります。
そういった方法があるのですね!
まだ試していませんが、早速試してみたいと思います。
試しましたら、改めて、こちらにてご連絡致します。
> という書き方から推測すると、グローバル変数を利用する事を想定しているのでしょうか。
いえ、グローバル変数を利用しようという考えは、今のところありませんが、
本件の解決にあたり、必要とあれば、使うかもしれません。
ただ、本件とは関係のない所における、グローバル変数の使用というのは、ない、と考えて頂いて結構です。
では、早速、教えて頂いた記述方法を試してみますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Excel(エクセル) ハイパーリンクの削除について 2 2022/11/10 07:32
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) エクセル マクロ 指定日の指定時刻にプロシージャを実行 4 2022/04/17 16:44
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
OnTimeを使ったのですが「エラー」になってしまいます
Visual Basic(VBA)
-
Excelマクロで、稼働中のマクロを確認する方法
その他(Microsoft Office)
-
-
4
OnTime の中断方法について
Excel(エクセル)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
Application.OnTimeで引数付き関数を呼び出したい
Visual Basic(VBA)
-
7
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
8
vba セルに入力した時間をマクロで受け取るには?
Excel(エクセル)
-
9
タイマーマクロの二重起動防止をしたい
Visual Basic(VBA)
-
10
Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない
Excel(エクセル)
-
11
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
12
EXCELのVBAで作業ファイルを閉じてもメモリの解放をしなくて困っています
Excel(エクセル)
-
13
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
14
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
15
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
16
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
17
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
18
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
19
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
20
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
VBAでの Replace関数で、ワイル...
-
EXCELで=より左の文字を一括で...
-
【Excel VBA】複数ある特定の文...
-
16表記の文字列を数字に直した...
-
VBA2005 16進を2桁で表示したい。
-
変数に入れた文字列(定数)で書...
-
OnTime 使用時のプロシージャへ...
-
文字列からタブコードを取り除...
-
エクセルで文字列の最大値を抽...
-
LEFT関数で文字数を指定しない...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルVBAで特定の文字列が見...
-
ヒアドキュメントのEOLとEOMの違い
-
C++のdefine文の使い方の質問で...
-
漢数字に変換するプログラム
-
C# 巨大な文字列の計算をさせたい
-
Excelで指数表現しないようにす...
-
アクセスで特定の数字以外(複...
-
bashスクリプトでの文字列から...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
Excelで3E8を3.00E+8にしない方...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
Excelで指数表現しないようにす...
-
MS SQLServer のSQLで文字列の...
-
VBの「As String * 128」とは?
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
bashスクリプトでの文字列から...
-
LEFT関数で文字数を指定しない...
-
アクセスで特定の数字以外(複...
おすすめ情報