[[20200822102052]] 『Module名の変更』(T20) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Module名の変更』(T20)

あるマクロ内で他のマクロを実行しようとして「コンパイルエラー」になりました。
「他のマクロ」は標準モジュール内にあり、それ単体での実行に問題はありません。
この「他のマクロ」はプロパティウィンドでModule名を「他のマクロ」に変えていたので、
元に戻したらエラー回避できました。(全くの思いつきでした)
ただ、ブック内に多数のマクロがあるのでModule名は特定したいです。
いい方法ないでしょうか?

 Sub あるマクロ()
 '(あるマクロの処理)
    Call 他のマクロ     '←コンパイルエラー
 End Sub

< 使用 アプリ:2010、使用 OS:Windows10 >


「Module他のマクロ」としたらOKでした。

名称の付け方が悪かったようです。

失礼しました…
(T20) 2020/08/22(土) 10:28


解決済みのようですが、コメントします。
 
モジュール名も付してプロシージャを呼ぶときは、
  Call module1.test
といった形式になるはずです。
 
>Call 他のマクロ
というのはモジュール名だけで、プロシージャを指定していないから
エラーになったのでしょう。
その際、
"モジュールではなく、変数もしくはプロシージャを指定してください。"
と表示されたはずです。
 
>「Module他のマクロ」としたらOKでした。
2バイト系文字で始まるモジュール名は不可、とかあるんでしょうか?
手元では再現しませんでした。(他のマクロ というモジュール名でもOK)
余り私は聞いたことはありませんでしたが。
(γ) 2020/08/22(土) 13:21

 >「他のマクロ」は標準モジュール内にあり、それ単体での実行に問題はありません。 
 >この「他のマクロ」はプロパティウィンドでModule名を「他のマクロ」に変えていたので

 モジュール名とプロシジャー名を同じにすると、誤動作と言うかまともに動かなかった記憶があります。
 マクロが無い?とかの類だったような・・・。
(Why) 2020/08/22(土) 14:17

 >名称の付け方が悪かった
 まあ そうとも言えますが、

 「他のマクロ」という名前がかぶっているので
 「他のマクロ」というプロシージャがあるモジュール名(仮にModule2であれば)を明記して

    Call Module2.他のマクロ とすればOKです。

(チオチモリン) 2020/08/22(土) 14:25


ああ、モジュール名とプロシージャ名が同一という話でしたか。
ご教示ありがとうございます。
mその他 とか書くかも私なら。
(γ) 2020/08/22(土) 15:35

「モジュール名とプロシジャー名が同じ」はNG、とは知りませんでした。
ネットでは、“好きな名前でOK”みたいなこと書いてありましたが。
てっきり、名前の先頭に「Module」が必要なんだとまたもや思い込んでしまいました。

単体では同一名でも実行に問題ないので、なんだかなぁ〜…という感じです。
他にも同一名に変更してあるのが結構あるので、忘れないようにします。

ありがとうございました、 これからもよろしくお願いします。

(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.