引数付きのプロシージャを、コマンドボタンなどのコントロールにマクロとして登録しているとします。
登録は下図のようにシングルクォーテーションで囲み、引数の前に半角スペースを入れればできます。
実行結果:
さて、このマクロを登録したブックが2003形式(.xls)だった時、Excel 2010や2013で操作していたらおかしなエラーが発生するのに気づきました(図は2013)。まず、ブックを2007形式(.xlsm)で保存し直そうとするとエラーメッセージが表示されました。
もちろんそんなプロシージャはありませんので、実行してもエラーになります。元から2007形式のブックで上のようにマクロを登録していれば、この現象は起きません。
これと原因は同じなのか、もう一つおかしなことがありました。
上の2003形式のブックから、2007形式のブックへシートをまるごとコピーするとします。コピーするのは新規のシートで、データもコントロールも何もありません。
これでもエラーになりました。
ちなみにここで「いいえ」を選択すると、「重複する」名前を変更するためのダイアログが表示されました。
妙なのは、ここで新しい名前を指定しようと先のメッセージで「はい」を選択しようと、コピー自体は完了するということです。手作業でやってるならいいんですが、VBAで自動化している場合は実行が中断してしまうので困ります。
いずれにしても、最初から2007形式で作っていればこんな問題は起きません。早く2003と2007以降が混在した環境がなくなるといいんですが。
登録は下図のようにシングルクォーテーションで囲み、引数の前に半角スペースを入れればできます。
実行結果:
さて、このマクロを登録したブックが2003形式(.xls)だった時、Excel 2010や2013で操作していたらおかしなエラーが発生するのに気づきました(図は2013)。まず、ブックを2007形式(.xlsm)で保存し直そうとするとエラーメッセージが表示されました。
名前 <登録マクロ名> は有効な参照範囲と競合するか、Excelでは無効です。名前は _1<プロシージャ名>(アンダーライン)<引数> に置き換えられました。この時点ではメッセージだけで何も変化はありません。しかし一度ブックを保存して閉じてから再度開くと、登録してあったマクロが警告通りに書き換えられていました。
もちろんそんなプロシージャはありませんので、実行してもエラーになります。元から2007形式のブックで上のようにマクロを登録していれば、この現象は起きません。
これと原因は同じなのか、もう一つおかしなことがありました。
上の2003形式のブックから、2007形式のブックへシートをまるごとコピーするとします。コピーするのは新規のシートで、データもコントロールも何もありません。
これでもエラーになりました。
移動またはコピーする数式に名前<登録マクロ名>が含まれていますが、この名前は有効なセル範囲またはExcel 2013で内部的に使用されている名前と重複するため、変更する必要があります。ちょっと何言ってるかわかりません。
ちなみにここで「いいえ」を選択すると、「重複する」名前を変更するためのダイアログが表示されました。
妙なのは、ここで新しい名前を指定しようと先のメッセージで「はい」を選択しようと、コピー自体は完了するということです。手作業でやってるならいいんですが、VBAで自動化している場合は実行が中断してしまうので困ります。
いずれにしても、最初から2007形式で作っていればこんな問題は起きません。早く2003と2007以降が混在した環境がなくなるといいんですが。
0 件のコメント:
コメントを投稿