- ベストアンサー
エクセル2007のマクロ異常
旧エクセルでシートを新BOOKへコピーするマクロを使っていたのですが、エクセル2007でこのマクロを使うと、登録マクロが新BOOKのマクロに変わってしまって、元のBOOKに戻った時には、このマクロが使えません。マクロ登録で元のBOOKに登録替えしなくてはなりません。解決法をご指導ください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
時間が経過しているので終わってるかと思いますが… ttp://support.microsoft.com/kb/974239/ja 調査中の問題かと思います。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >どうやら図形の「マクロの登録」に問題があるようです。 だから、#4のマクロを直したはずです。直っていないのですか? Excel 2007の問題を表面化したいという理由なら、質問の意図が違います。 >いえ、継承したくないのです。もとのBOOKの図形に登録したマクロが、新BOOKのマクロに変更されてしまうことが、excel2007の欠陥ではないかと思っています。 すみませんが、おっしゃっている内容がさっぱり理解出来ません。こちらは、言葉のやり取りをしているわけではないのです。こちらのマクロのどこに問題があるのでしょうか?直っていないのですか? 「継承」という、意味がお分かりになりますか?本来は、オブジェクト指向の用語のひとつです。元の働きを持つ遺伝子を残しているという意味です。親・子・孫でエラーを起こさずに同じ働きを持つということです。 継承したくないのなら、マクロのアクションは飾りにして良いのですか?マクロは働きません。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 おっしゃっていることは、こういうことだと思います。 最初のマクロ付きブックを母体にして、そこから新規ブックを生成したとき、元にあった親のオートシェイプのマクロも継承する。 そのブック、つまり親からみた子のブックから、母体のマクロを通して孫を生む。しかし、孫は、祖母のマクロは継承せずに、一世代前の自分の親の現実にはないマクロ名しかないのでエラーが生じる。 そして、おやりになりたいことは、子から孫、孫からひ孫、ひ孫からヤシャゴと、世代が下っても、元のマクロを呼ぶようにする、ということです。 このマクロの登録方法というのは、Ver.5 時代に生まれたものなので、すでに、Excel 2003 などでも、継承しない現象はあったような気がします。私は、あえてこういう部分のマクロは触らないようにしてきましたので、分かりませんでした。こういうマクロの使い方は、単独のブックのみです。本来は、コントロールツールのオブジェクトを使うのが良いです。また、#3で示した方法は、Ver.2007では確実な方法だと思います。 それはともかくとして、今回の便宜的な救済策としては、少し最初手間が掛かりますが、以下のようにしてください。 '------------------------------------------- 手順: きちんと、以下をのマクロ・ブックのフルパスと、マクロ名を入れてください。 Public Const sMACRONAME As String =............................. 次に、母体のマクロに対して、二番目のマクロを Sub MacroInShapeDel() というマクロを「一回だけ」実行してください。正しく登録されたら、もう、使わなくてよいです。 オートシェイプに登録するマクロは、最初のオートシェイプに登録されていることにします。 以下のマクロは、元の親ブックに登録するものとします。 こちらが提供した不要なマクロは削除して構いません。 '------------------------------------------- '標準モジュール (必ず、上端の先頭から書くこと!) '------------------------------------------- 'マクロ名をフルパスで以下のように登録します。 Public Const sMACRONAME As String = "'C:\Documents and Settings\[Your ID]\My Documents\MacroBookl'!CopyShMacro" Sub CopyShMacro() Dim shName As String On Error GoTo ErrHandler ActiveWorkbook.Worksheets("勝馬投票券").Select shName = ActiveSheet.Name With Worksheets.Add(Before:=Worksheets(1)) Worksheets(shName).Cells.Copy .Cells .Cells.Copy .Cells.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False '値貼り付け .Move '新しいブックを作成 End With With ActiveSheet .Range("A1").Select .Shapes(1).OnAction = sMACRONAME 'シートの名前を自動登録 .Name = shName End With ''保存 'Application.Dialogs(xlDialogSaveAs).Show Application.CutCopyMode = False ErrHandler: If Err.Number > 0 Then MsgBox Err.Description End If End Sub '------------------------------------------- '最初にこのマクロを1回だけ親の元ブックに実行する Sub MacroInShapeDel() '図形のマクロを削除する On Error GoTo ErrHandler ActiveWorkbook.Worksheets("勝馬投票券").Select With ActiveSheet If .Shapes(1).OnAction <> "" Then .Shapes(1).OnAction = "" End If .Shapes(1).OnAction = sMACRONAME End With ErrHandler: If Err.Number > 0 Then MsgBox Err.Description End If End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 お話を読んでいて、私は、良く理解できていないのですが、 >新たに作成したファイルが「BOOK1」だとしますと、 もともと、新規のブックに、マクロを登録するつもりで作られたものではありません。 新規ブックに登録するようなマクロは、非常に特殊なものです。それは、既存の規定のマクロブックに登録していればよいのですが、そうすると、そのマクロを利用するたびに、規定のマクロブックが呼び出されてしまいます。それがうっとうしいなら、マクロを「個人用マクロブック」に登録しておけばよいと思います。 >マクロボタンをクリックすると Office 2007 では、画面の上部の「クイックツールバーのカスタマイズ」でマクロを登録すればよいです。 Office 2007 の場合は、リンク先のマクロでも、セキュリティの警告が出ますが、セキュリティを変更しておけばよいと思います。もちろん、拡張子は、xlsxのままで良いのです。 ただし、個人用マクロブックの場合は、以下のように多少変える必要があるかもしれません。個人用マクロブックの「標準モジュール」に登録すればよいです。 '------------------------------------------- Sub CopyTest() On Error Goto ErrHandler '加える ActiveWorkbook.Worksheets("勝馬投票券").Select '変更 With Worksheets.Add(Before:=Worksheets(1)) Worksheets("勝馬投票券").Cells.Copy .Cells .Cells.Copy '書式情報等のコピー .Cells.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False '値貼り付け .Move '新しいブックを作成 End With With ActiveSheet .Range("A1").Select ' 'シートの名前 ' .Name = "勝馬投票権" End With ' '保存 ' ActiveWorkbook.SaveAs "ブックの名前" Application.CutCopyMode = False Goto ErrHandler: '加える End Sub
お礼
私の説明不足のようですね。 私の作ったマクロはこのファイル専用のマクロで、ファイルの中の特定のシートを新たなBOOKとして取り出すマクロです。 >新たに作成したファイルが「BOOK1」だとしますと、 これは、私のマクロで作成した新たなファイルを指しています。 図形ボタンに登録した上記の目的のマクロを実行すると、1度だけ意図通りに作動し、2度目は、ボタンに登録されたマクロが、どういうわけかexcel2007では、このマクロで作成した新BOOKのマクロに変わってしまいます。新BOOKには一つもマクロが登録されていないから、当然エラーになります。 昔のエクセルではこういうことはありませんでした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 返事が遅くなりました。 シートの名前とブックの名前のオプションを付けておきましたので、不要でしたら、削除してください。必要なら、行の先頭の「'(コメントブロック)」を外してください。 '------------------------------------------- '***** 標準モジュールのみ ****** '------------------------------------------- Sub CopyTest() Worksheets("勝馬投票券").Select With Worksheets.Add(Before:=Worksheets(1)) Worksheets("勝馬投票券").Cells.Copy .Cells .Cells.Copy '書式情報等のコピー .Cells.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False '値貼り付け .Move '新しいブックを作成 End With With ActiveSheet .Range("A1").Select ' 'シートの名前 ' .Name = "勝馬投票権" End With ' '保存 ' ActiveWorkbook.SaveAs "ブックの名前" Application.CutCopyMode = False End Sub
補足
ありがとうございます。 コマンドをそっくり入れ替えてみましたが、状況は変わりません。 例えば、新たに作成したファイルが「BOOK1」だとしますと、このマクロを実行した後、すべてのマクロボタン(このマクロボタンの登録マクロだけでなく)に登録されたマクロが、もともと「Macro n」とあったものが、「BOOK1.xlsm!Macro n」に変わってしまいます。 このため、これらのマクロボタンをクリックすると、「マクロ'BOOK1Macro n'は実行できません。・・・・・」という警告表示が出ます。マクロ登録を自己BOOKのマクロに登録しなおさねければなりません。 マクロ登録の際のマクロの保存先を「作業中のブック」「開いているすべてのブック」等々いろいろと変えて登録してみましたが、状況は一緒です。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >登録マクロが新BOOKのマクロに変わってしまって という意味が良く理解できません。 2007以前のマクロが、2007に換わって問題が起こすということは、新しくなったオブジェクトの部分以外では基本的にはありませんから、おそらく、マクロ自体の問題ではないかと思います。 コードを見せていただけませんか?
補足
シート上に図形を描き、マクロを登録して、その図形をマクロボタンとして使っています。このボタンをクリックすると、新しいBOOKを作成してそのBOOKに特定のシートがコピーされるようなマクロを実行します。 従来のエクセルでは問題なく作動したのですが、EXCEL2007では、 1回だけちゃんと作動して新しいBOOKが作られるのですが、2回目以降はエラーになってBOOKが作れません。そこで図形を右クリックして登録マクロを見てみると、マクロの存在するBOOK名でなくて新しいBOOK名のマクロに変わってしまっているために実行できないのです。 コードは次の通りです。 Sheets("勝馬投票券").Select ActiveSheet.Copy Before:=Sheet1 'シートのコピー Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '値で貼り付け Application.CutCopyMode = False ActiveSheet.Move '新しいブックを作成
補足
ご指導ありがとうございます。 <最初のマクロ付きブックを母体にして、そこから新規ブックを生成したとき、元にあった親のオートシェイプのマクロも継承する。 いえ、継承したくないのです。もとのBOOKの図形に登録したマクロが、新BOOKのマクロに変更されてしまうことが、excel2007の欠陥ではないかと思っています。 いろいろと実験してみましたら、当該マクロを使わなくても、手動でBOOK内のあるシートを新たなBOOKに移すという作業をすると、もとのBOOKの図形に登録されたマクロは、すべてありもしない新たなBOOKのマクロに登録替えされてしまいます。 こんな現象は、旧エクセルでは発生しませんでした。 図形にマクロを登録するのではなく、マクロの起動イベントをセルのダブルクリックや右クリック等に変更すると問題は起こりませんでした。 どうやら図形の「マクロの登録」に問題があるようです。