[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Module名の変更』(T20)
あるマクロ内で他のマクロを実行しようとして「コンパイルエラー」になりました。
「他のマクロ」は標準モジュール内にあり、それ単体での実行に問題はありません。
この「他のマクロ」はプロパティウィンドでModule名を「他のマクロ」に変えていたので、
元に戻したらエラー回避できました。(全くの思いつきでした)
ただ、ブック内に多数のマクロがあるのでModule名は特定したいです。
いい方法ないでしょうか?
Sub あるマクロ() '(あるマクロの処理) Call 他のマクロ '←コンパイルエラー End Sub
< 使用 アプリ:2010、使用 OS:Windows10 >
名称の付け方が悪かったようです。
失礼しました…
(T20) 2020/08/22(土) 10:28
>「他のマクロ」は標準モジュール内にあり、それ単体での実行に問題はありません。 >この「他のマクロ」はプロパティウィンドでModule名を「他のマクロ」に変えていたので
モジュール名とプロシジャー名を同じにすると、誤動作と言うかまともに動かなかった記憶があります。 マクロが無い?とかの類だったような・・・。 (Why) 2020/08/22(土) 14:17
「他のマクロ」という名前がかぶっているので
「他のマクロ」というプロシージャがあるモジュール名(仮にModule2であれば)を明記して
Call Module2.他のマクロ とすればOKです。
(チオチモリン) 2020/08/22(土) 14:25
単体では同一名でも実行に問題ないので、なんだかなぁ〜…という感じです。
他にも同一名に変更してあるのが結構あるので、忘れないようにします。
ありがとうございました、 これからもよろしくお願いします。
(T20) 2020/08/23(日) 11:36
>「モジュール名とプロシジャー名が同じ」はNG ではありませんよ。誤解なきよう
>“好きな名前でOK” ですが、重複する場合にはそれなりの記述法が必要になるということです。
※ 同一モジュール内でのプロシージャ名の重複は許されてないので、同じブック内であれば どのモジュールのプロシージャかを指定すればユニークな指定になります。
(チオチモリン) 2020/08/23(日) 14:33
今回のケースでは、
「同一モジュール内でのプロシージャ名の重複は許されてない」 「同じブック内であればどのモジュールのプロシージャかを指定すればユニークな指定」
上記何れも満足しているはずなんですが、<「他のマクロ」という名前がかぶっているので >と
書かれてあるのと関係しますか?
【重複】の意味がよくわかんなくなっています…
(T20) 2020/08/23(日) 20:47
同姓同名の山田太郎さん(プロシジャー)が同じ会社(ブック)にいた場合、同一人物ではないので、 管理課(モジュール)の山田太郎さんとか、総務課の山田太郎さんと呼び分けるのと同じで、 同姓同名だからといって、同一人物ではないのでユニークという属性は変わってないです その会社(MS)では、同じ課に配属してはいけない就業規則があるだけです
もちろん、一人しかいなければ、管理課とかつけなくてもわかるので、省略できるだけです。 (稲葉) 2020/08/23(日) 22:11
上記は、その上の「それなりの記述」にかかるものです。 (混乱の元でしたかね。すいません)
どのモジュールのプロシージャかを指定すれば(複数モジュールで同じ名前のプロシージャが存在しても)ユニークな指定になるのと同じことです。
↑ 書き換えてみましたがわかりますか?
〜〜〜〜〜〜〜〜〜〜〜〜
>上記何れも満足しているはず
???
>Call 他のマクロ '←コンパイルエラー
↑にはモジュールの指定がありませんけど。
もしかして 2020/08/22(土) 14:25 のコメントは読み流しましたか?
(チオチモリン) 2020/08/23(日) 23:38
>Call 他のマクロ '←コンパイルエラー
は、モジュール名だけでプロシージャの指定がないと解釈された。のかも知れない。
(チオチモリン) 2020/08/23(日) 23:51
・同一ブックに複数のモジュールがあります
・存在するプロシジャー名は全て異なります
・今回の「あるマクロ」も「他のマクロ」もそれぞれ別のモジュールに単独で存在します
・今回「他のマクロ」のみモジュール名を【他のマクロ】に変更します
この時、『Call 他のマクロ』は何故コンパイルエラーになるのでしょうか?
モジュール名が【他のマクロ】でなければどんな名前でもエラーにはならないようなので、
「モジュール名とプロシジャー名が同じ」はNG、と解釈したのですが…
(T20) 2020/08/24(月) 11:45
--- 標準モジュール Module1 --- Sub test() Call subproc End Sub
--- 標準モジュール subproc --- Sub subproc() MsgBox "subproc" End Sub
で実行すると、
コンパイルエラー モジュールではなく、変数またはプロシージャを指定してください。
となるので、 >「モジュール名とプロシジャー名が同じ」はNG とういのが正しいでしょうね。 (´・ω・`) 2020/08/24(月) 12:44
"【他のマクロ】" なら、call 他のマクロ は通るけど、call 【他のマクロ】.他のマクロ は通らない。
"他のマクロ" なら、プロシジャ名と重なるから call 他のマクロ.他のマクロ としないと通らない。
同じ名前だと、モジュール名なのかプロシジャ名か判らないから明示しないとエラーになる、というだけの事でしょう。
そして、"【】" は、モジュール名には使えるけど、マクロからモジュール名指定すると「不正な文字」とされますね。 統一感はないですが、元々英語のアプリであり、日本語対応は甘いし、先日は日本語マクロがあると全部消される問題があったし、対応が怪しい日本語をモジュール名やプロシジャ名に使わないのが安全と思いますよ。
更に、モジュール名とプロシジャ名を同じにするなんて、コードを読む側を混乱させるだけで、全くメリットのない設計ではないでしょうか?(ちなみに、私の場合はサブプロシジャなら「s」、関数なら「f」を先頭とすることで、変数定義と混同しないようにしてます)
(???) 2020/08/24(月) 13:20
Sub test() Call subproc.subproc End Sub
でOKなので、
>「モジュール名とプロシジャー名が同じ」はNG
ではないですね。
横入したうえ、見当ちがいのこと書きました。すみません。 (´・ω・`) 2020/08/24(月) 13:32
>同じ名前だと、モジュール名なのかプロシジャ名か判らないから明示しないとエラーになる、というだけの事
これで、みなさんからいただいたコメントに合点がいきました。
理解力不足で申し訳ありませんでした。
日本語マクロの件や、記名に関することもとても参考になりました。
(尚、モジュール名に【】は実際には付けていません、紛らわしくて失礼しました)
これからも、よろしくお願いします。
(T20) 2020/08/24(月) 15:49
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.