• ベストアンサー

エクセル2007のマクロ異常

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 おっしゃっていることは、こういうことだと思います。 最初のマクロ付きブックを母体にして、そこから新規ブックを生成したとき、元にあった親のオートシェイプのマクロも継承する。 そのブック、つまり親からみた子のブックから、母体のマクロを通して孫を生む。しかし、孫は、祖母のマクロは継承せずに、一世代前の自分の親の現実にはないマクロ名しかないのでエラーが生じる。 そして、おやりになりたいことは、子から孫、孫からひ孫、ひ孫からヤシャゴと、世代が下っても、元のマクロを呼ぶようにする、ということです。 このマクロの登録方法というのは、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

miwaki
質問者

補足

ご指導ありがとうございます。 <最初のマクロ付きブックを母体にして、そこから新規ブックを生成したとき、元にあった親のオートシェイプのマクロも継承する。 いえ、継承したくないのです。もとのBOOKの図形に登録したマクロが、新BOOKのマクロに変更されてしまうことが、excel2007の欠陥ではないかと思っています。 いろいろと実験してみましたら、当該マクロを使わなくても、手動でBOOK内のあるシートを新たなBOOKに移すという作業をすると、もとのBOOKの図形に登録されたマクロは、すべてありもしない新たなBOOKのマクロに登録替えされてしまいます。 こんな現象は、旧エクセルでは発生しませんでした。 図形にマクロを登録するのではなく、マクロの起動イベントをセルのダブルクリックや右クリック等に変更すると問題は起こりませんでした。 どうやら図形の「マクロの登録」に問題があるようです。

関連するQ&A

  • excelでマクロシートをコピーしたとき

    excelでbook1のsheet1のセルA1に「1」を入力→プリントアウト→A1に「11」を入力→プリントアウト・・・以下「31」まで繰り返し。 というマクロが組んであります。 (ボタンにマクロが登録されています。) このシートをbook2にコピーをしたときに マクロを実行する(ボタンを押す)とbook1が開いてしまいます。 これをbook1を開かずにbook2でマクロを実行するには どのようにしたらよいでしょうか。 book2でマクロを作成し直して さらにボタンにマクロを登録していますが、 bookの数が多いのでけっこうな手間になります。 簡単な方法があれば教えて下さい。

  • エクセル2007マクロについて。お願いいたします。

    excelファイルの容量が10MBにもなってしまい大変困っています。すべてのシートを新しいブックにコピーしたのですがサイズは変わりませんでした・・・方法が間違っているのでしょうか??? 関数やマクロを組み込んだsheetが14枚くらいです。軽量化するにはどうしたら良いでしょう??また、肥大化しないためのマクロ等ありましたら教えていただけますでしょうか、よろしくお願いいたします。

  • エクセルマクロを教えてください

    エクセル2003を使用しています。ブックに1シートあります。シート名は「C3」セルに入力してある日付にしますが、シート上の表示形式は「平成20年1月」となっているところをシート名は「08-01」にします。その後シートを11枚コピーし、それぞれのシートの「C3」セルに年月を入力し、シート名を「08-02」「08-03」・・・「08-12」としたいのですが、うまくいきません。 マクロに詳しい方のご指導をお願いいたします。

  • エクセル2007でマクロ警告が出る

    エクセル2007を使用しています。 古いブックから新しいブックにシートをコピーしました。 古いブックは開くたびに「セキュリティの警告 オプション」の表示が上部にでていましたが、シートをコピーしたことで、それを引き継いでしまったようです。 〚開発〛からマクロを調べてもなにもありません。 警告が出ないようにするにはどうしたらいいでしょうか? ほかに確認方法はありますか?

  • エクセル2007 マクロ シート 移動

    マクロ学習中のものです。 エクセル2007 マクロの複数のブックのシートをひとつのブックにまとめたいです。 ふつうにコピペすると、コピー先ではマクロが走りません、 どのようにすればよいか、アドバイスください!! よろしくおねがいします。

  • EXCELのマクロで

    よろしくお願いします。 さて、過去にとあるEXCELのブックにマクロを登録しました。そのマクロも不要となり、マクロ一覧から全て削除した。 最近になってそのファイルを雛型として使用するケースが増え、名前を付け替えて使用していますが、ファイルを開く度に『マクロを有効にしますか?』と聞いてきます。 (マクロのセキュリティは中にしてあります) 正直 これがかなりウザいのですが、どうすれば聞いてこなくなるでしょうか? (但し、マクロウィルス防止の為、セキュリティは中のまま使用したいと思っています) シートだけを新規のブックに保存すればいけるとは思うのですが、現在のブックの何が問題なのかを知りたいのです。 尚、マクロ実行のダイアログを出しても、登録したマクロは何も残っていません。

  • コピーするExcelマクロを作りたいです(2)

    「コピー元」ブックから「コピー先」ブックにコピー&ペーストを 行うマクロを作りたいのですが、列の計算が複雑で困っています。 Excelブックのキャプチャ画像を加えて再投稿します。 画像ではシートになっていますが、画面左のシートのような表から 右のシートの当てはまるセルにデータを写すようにお考えください。 「コピー元」ブックは月に一度ダウンロードするデータで、ピボット テーブルです。一月ごとに、前月の列が各営業所ごとに増えていき ます。行には、商品ごとの売上げが入力されています。 また、各営業所ごとに、年度合計列があります。(営業所の数は10 前後、商品の行は50以上はあります。) 「コピー先」ブックは、あらかじめ年度末までの行列セル、合計列が 用意されていて、「コピー元」ブックからデータを移動してくるのみ でレポートとして毎月提出する体裁です。 単純にコピーするだけならばよいのですが、毎月各営業所一列ずつ 増えていくというのが式にして表せません・・・また、できる限り 数値の変更を最低限にして、毎年度利用できるマクロにするという 希望もあります。 ご面倒かと思いますが、お力を貸してください。

  • エクセルマクロ

    入力したワークシートを 新しいブックにコピーして保存するマクロを作成しました。 ただ下記の様に保管すると、 数式もそのまま元のエクセルファイルの数式を参照してしまいます。 下記のマクロをあまり変更しないで、 値貼付け(もしくは値貼付けしながら、新しいブックへコピー) するにはどの様に変更するといいでしょうか? よろしくお願いします。 'Sub newfilesave() Sheets("Sheet1").Copy '名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 'ActiveWorkbook.SaveAs _ ' Filename:="C:\Users\xxxxx\Desktop\" & Format(Now(), "yyyymmdd_hhmm"), _ ' FileFormat:=xlOpenXMLWorkbook 'End Sub

  • EXCEL(マクロ機能あり)のコピー

    お世話になります。 現在、マクロ機能のあるEXCELファイルを別のPCへコピーし実行すると 思うような結果が返ってこない。 Sheetが2つあり、 ・Sheet1はDBより取得 ・Sheet2はSheet1を参照し集計 というように構成しています。 自分のPCでは全て問題なく実行できるが、 別のPCではSheet1のデータ取得は実行でき、Sheet2の参照集計ができない。 という点で悩んでいます。 お力添えをお願いいたします。 考えられる問題点は、 1.ファイルの作成時にマクロ機能を別のEXCELファイルよりコピー(ボタンの機能など)し、マクロの登録を行ったので参照がうまくいっていない。 2.マクロのコピーの仕方が正しくない 3.Excelファイルに何か設定をしなければならない(参照設定など) と考え調べていたのですが、解決に至りませんでした。 どなたかご教授をお願いいたします。

  • エクセルのマクロは超初心者のため、難しいことは全く分かりません。

    エクセルのマクロは超初心者のため、難しいことは全く分かりません。 よろしくお願いいたします。  m(_ _)m 同じbook内に複数のsheetがあります。 そのsheetは同じ型式のデータベースなのですが、sheetによって行が違います。 そのsheetのデータを一つのシートにコピー(一番上の先頭行はデータベースの名称でコピーしたくありません) をして一覧でまとめたいのですが、方法がわかりません。 sheet数が多いので、一つずつコピー→ペーストをするのが大変なので…どうぞよろしくお願いします。