回答受付が終了しました

エクセルはどうして馬鹿なのでしょうか? マクロを呼ぶボタンを配置したシートを他のbookにコピーして保存し、開き直すと「外部のリンクがほにゃらら」という警告メッセージが出ます。

補足

残念ながら今のところベストアンサーはありません。

Excel | Visual Basic965閲覧

回答(6件)

0

他のソフトに対してもそうですが、命令通りに動いてるだけで馬鹿ではありません。命令もしてないのに勝手に判断して動くやつの方が馬鹿です。 Excelは相手の頭の中を読み取って操作してくれるようなAI搭載型のソフトではないです。 >「外部のリンクがほにゃらら」 シートを別のブックにコピーしても、標準モジュールは一緒にコピーされません。ボタンを動かすコードはコピー元にあります。ボタンはコピー元のコードを参照しようとするので、「外部のリンクがほにゃらら」というメッセージがでます。 windowsで表せば・・・ショートカットを開こうとしたら「リンク先が存在しません。」と出ることがあるかと思います。参照先が指定されてないと、動きません。 コピー先でマクロを動かすには、コピー元の標準モジュールのコードもコピーしてこなければなりません。

2

VBAのコードがブックごとに紐づいているからです。 VBEの画面を表示してCtrl+Rを押してプロジェクトエクスプローラを開いてみてください。 まずブックがあり、その下にオブジェクトがあり、別フォルダで標準モジュールがあるのが分かると思います。 シートにボタンを設置してマクロを呼び出すように設定するとします。 ボタンに登録されているマクロのコードは、そのブックの標準モジュールに記載されたコードです。 ここでシートをコピーします。 シートはオブジェクトです。標準モジュールはありません。 つまりここにはコードは存在していないんです。 でもシートにはマクロを登録したボタンが存在しています。 ではここのコードはどこから? 元のブックの標準モジュールから引っ張るしかありません。 そこはコピーしてるんだから配慮しろと思うかもしれませんが、操作する人の意思を読むことは機械にはできません。 ボタンもコードもそのままコピーしたい場合は、ブックを丸ごとコピーして、そこに他のシートを持ってくる が正しいです。

2人がナイス!しています

2

エクセルがバカなのではありません。 忠実に指示されたとおりの動作をするように、作成者の指示にエクセルは従っているだけです。 他のブックにコピーすると言う事は ・他のブックへのハイパーリンク ・他のブックのボタンの複製 なのか、操作で指示しなければ、必ず前者だとエクセルは判断します。 それだけの事。 あなただって、「これコピーして」と紙を渡されたら、 コピー機はどこ?部数は? と思いませんか? 誰も、「紙に書いてある文章をワードで入力して電子化」とは思わないと思いますよ。 残念ですが、エクセルは指示通りにしただけです。

2人がナイス!しています

>どうしてボタンのマクロは自分のbook内の >マクロじゃないのでしょうか? コピー元の場所を参照するのは当然ですけどね。 元のブックからコピーしているのですから、シートの相対参照の様な融通は通用しませんよ。 プログラムをコピーしているだけですから、参照元を修正する必要があるのは必然です。 ボタン自身にマクロが登録されているわけではありませんからね。 ボタンの表示の文字とは違います。

1

EXCELはもともと別に賢い訳では有りません。忠実なだけで賢い人に使われたら実に柔順です。 つまり使う側に賢さを求めます。

1人がナイス!しています

>残念ながら今のところベストアンサーはありません。 残念なのは貴方のオツム。 ちゃんと回答されてる方々が気の毒です。 理解しようとしないなら質問しない方がいいよ。 せめて回答が理解できないなら、どこが判らないかを 回答者とやり取りしてみるべきです。 ベストアンサーがないなど、理解しようとせずに 判断するのはおこがましい。