括弧が入った名前のブックのマクロを実行しようとすると実行時エラーが表示されるが?
Question 005p 拙著「組み方講座・プロの定番」 Previous Next
242ページ 4章1-1 合わせ技(3) ◆ 環境・・ Excel 2003 & Windows 2000
詳細は こちら
はじめまして。 プログラムのようなものを今までやったことのない超初心者ですが、仕事上でVBAマクロというものを使うことになり、周りにVBAマクロというものに詳しい方もいらっしゃらないので、本を読みながら勉強しはじめました。
そんな中、「Ecxel VBA マクロ組み方講座 プロの定番・裏技・合わせ技」という本をネットで見つけまして、(超初心者ながら図々しくも)購入させていただきました。
その本の中に掲載されているコードについての質問なのですが、基本的なことも知らない私の言葉で書きますので、とても分かりにくいかと思います。 問題の状況について不明な点がありましたら、ご指摘いただければ何とかまたご理解いただけるよう説明を加えますので、よろしくお願いいたします。

242ページに掲載されている、"(3) ほかのブックを開いてそこにあるマクロを実行する" というコードを参考にさせていただき、今自分が作っている2つのブックの標準モジュール内に以下のようにコードを書きました。

ブック1: Book1(括弧).xls
Sub Auto_Open()
    パス = "C:\Documents and Settings\Administrator\デスクトップ\AAA\"
    ブック名 = "Book2(括弧).xls"
    マクロ名 = "呼び出されるマクロ"
    Workbooks.Open Filename:=パス & ブック名
    Application.Run ブック名 & "!" & マクロ名
End Sub
ブック2: Book2(括弧).xls
Sub 呼び出されるマクロ()
    MsgBox ThisWorkbook.Name & " のマクロを実行中です"
End Sub
そして、ブック 「Book1(括弧).xls」 を開いて Auto_Openマクロを実行させると、途中で、右図のエラーが出て止まってしまいます。
本に書いてあるコード、CD-ROMに入っているブックの中のコードと照合しましたが、どこが間違っているのか分かりませんでした。 もしエラーの原因がお分かりになられたら、ご教示お願いいたします。
Answer   Copyright (C) 2005.3.24 永井善王
拙著をご購読いただき、ありがとうございます。 周りに詳しい方がみえないので本を読みながら・・ と頑張ってみえますね。 ご質問文はよく分かりますし、あなたが作成されたマクロは正確ですよ。

しかし、1カ所だけ、ちょっと疑問を感じるところがあります。 それは、マクロの中のブック名に全角の括弧 ')' を使っている点です。 この場合、ハードディスクに保存されているブック名が半角の括弧 ')' ですと、不一致になるのではないでしょうか。 その点を再確認してから試してみて、 その結果をご連絡くださいませんか。
全角半角の不一致はありませんでしたが・・
お忙しい中、私のつたない質問に対し親切にお答えくださり、本当にありがとうございました。 自分が購入した本の著者ご本人様と、こうして質問のやりとりをさせていただけるのは、とてもありがたく、感激しています。 早速、試してみた結果をご連絡します。
私のPC上では、ブック名も全角括弧でした。 念のため、マクロ名中のブック名の全角括弧と、ブック名そのものの全角括弧を半角括弧に直してマクロを実行してみましたが、同じエラーが出てしまいました。(私が見当違いな直し方をしているかも 知れませんが。。。)

しかし、もう一度マクロ名をじーっと眺めて、マクロを途中まで実行しているうちに、あることに気付きました。
「ブック1の中のマクロ中のブック2の中のマクロ名」と、
「ブック2の中のマクロ名」とは同じですが、エラーが出て止まってしまった直後 (ブック1もブック2も開いている状態) にブック1をActiveにして、[ツール]メニュー [マクロ]でマクロ一覧を表示させて見てみたところ、
ブック2の中にあるマクロ名の前にはブック名が付いているのですが・・・
よーく見てみたところ、エラーが出ているマクロ名は右図のとおり、
Book2(括弧).xls'!呼び出されるマクロ となっていました。 なぜか、ブック名が 勝手に 「'」 で囲まれています。

ここで気付いたのですが、ブック1のマクロの6行目のコードを、
Application.Run "'" & ブック名 & "'" & "!" & マクロ名 というふうに書き換えて実行してみたところ、エラーが出なくなり、ブック2のマクロを実行させることが出来ました。

エラーが出なくなったのは嬉しいですが、なぜブック1上のマクロ一覧でブック2のマクロを見ると、ブック名が「'」で囲まれてしまうのかが分かりません。 こういう現象が起きる原因をもしご存知でしたら教えてください。
よろしくお願いします。
Answer 2   Copyright (C) 2005.4.7 永井善王
すごいですね。よく気が付かれました。周りに詳しい人がいないということなのに、優れた観察力をお持ちです。
[マクロ]ダイアログの [マクロ名]一覧では、マクロ名の前にブック名が付く場合でも、通常、' (アポストロフィ)は付かないのに、ブック名に括弧が混入していると ' が付くということですね。
あなたから頂いた情報は、きっと、他の読者さまにも参考にしていただけますよ。

自動的に ' が付与される理由については、マイクロソフト社に問い合わせれば分かるかも知れませんね。
しかし、推測ですが、VBAとしては、ブック名に混入している括弧が支障になる場合があるからではないでしょうか。

本の025ページに掲載されている 「Visual Basicの名前付け規則のポイント」の 「(2)使用禁止文字」 に例示されている7つの記号の中に括弧は含まれていません。 が、括弧は Subステートメントで引数の括りとして使われている等、特別の意味を持つ場合が多いから具合が悪いのでしょう。

Excel VBA Macro