Excelで合成オートシェーブにマクロ登録でエラーが発生する原因と対策

このQ&Aのポイント
  • Excelで非表示列を表示にするためにボタンを使用していますが、突然エラーが発生し、実行時エラーとして「指定した名前のアイテムが見つかりませんでした」と表示されます。
  • この問題は、Excelのバージョンの違いが原因である可能性があります。開発はExcel2003で行い、昨日はExcel2007で実行することができましたが、Excel2003で再度実行しようとしたらエラーが発生しました。
  • また、合成オートシェーブの場合、登録したマクロ名が表示されず、「Group1295_Click」と表示されることがあります。これは正常な動作です。
回答を見る
  • ベストアンサー

Excelで合成オートシェーブにマクロ登録でエラー

excelで、非表示列を表示にするのに、ボタンで行えるようにしました。 オートシェーブ画像を合成した図形をセル内に置き、そのボタンを押すとその隣の列が表示になるというものです。 col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col + 1).Hidden = False これで、うまく動作していたのですが、突然動作しなくなってしまいました。 ボタンを押すと 「実行時エラー'-2147024809(80070057)' 指定した名前のアイテムが見つかりませんでした」 というエラーメッセーが出て、 col = ActiveSheet…の行で停止してしまいます。 原因と対策について教えていただけませんか? 思い当たることとしては、開発はExcel2003で行っているのですが、昨日Excel2007上で動作させました。(ちゃんと動きました。)その後、そのファイルをUSBメモリで持ち帰り、Excel2003で動かそうとしたら、上記の状態で動かなくなっていました。 それと、単独のオートシェーブにマクロを登録したときは、再度マクロ登録の画面に行くと マクロ名という覧に登録したマクロが表示されるのですが、 合成オートシェーブの場合、 「Group1295_Click」 と表示され、登録されているマクロ名が表示されないのですが、これは正常なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

グループ化したオートシェープに対してApplication.Callerで名前を取得すると、クリックする部分によってそれぞれのオートシェープ名が取得されますが、これが全体のオブジェクト名(Group1295)と異なるために、ご質問のエラーが発生します。 このようなケースでは、グループ化した図形を1つの図形に変換してしまうのが簡便な対応です。 すなわち、グループ化した図形を選択して右クリック「切り取り」、そのままもう一度右クリック「形式を選択して貼り付け」で「図(png)」を選択し、この図にマクロを登録し直してみてください。

関連するQ&A

  • Excel マクロ オートシェイブのコピーについて

    列を自動的に表示したり、非表示にするマクロを組みました。 例えばA列にあるオートシェイブXを置いて、それに以下のマクロを登録します。 Sub 表示1() Dim col As Integer col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col + 1).Hidden = False End Sub 次に、B列に別のオートシェイブYを置いて以下のマクロを登録します。 Sub 非表示() Dim col As Integer col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col).Hidden = True End Sub これで、YをクリックするとB列が非表示になり、XをクリックするとB列を表示にすることができました。 ところが、このオートシェイブX、Yを別の列にコピーして使おうとすると、うまくいくときといかないときがあります。 例えば、オートシェイブXをG列にコピーしたとき、 ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column の値が、7になるときと、1のままのときがあります。 オートシェイブのコピーにおいて、そのままコピーされるとき(7になるとき)と、ちょうどショートカットのようなものになるとき(1になるとき)があるようです。 両者の違い(どのようなときに違いが出るのか)についてどなたか、お教えください。

  • excel オートシェイブのコピーについて

    ワークシート内にオートシェイブを使って、マクロのボタンを作りました。 同じボタンを複数個使うのでコピーしてマクロ登録しようとしたところ、 1)同じオートシェーブNoになる場合(AutoShape1_Click) と 2)違うオートシェイブNoになる場合(AutoShape1_ClickとAutoShape2_Click) がありました。 登録したマクロが、オートシェイブオブジェクトの置かれているセル行を使用しているため col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 1)の場合は最初に置いたAutoShape1のセル行が返されてきます。 質問ですが、  イ) コピーをして、1)になる場合と、2)になる場合はどこが違うんでしょうか?  ロ) オートシェイブのプロパティを見る方法ってありますか?    コピーしたオートシェイブNoを確認したいのですが…

  • Excel マクロ オートシェイブに登録したマクロ

    EXcel2003,2007,2010を使用しています。 オートシェイブに、マウスの右クリックで「マクロの登録」から登録したマクロを解除する方法を教えて下さい。

  • excel オートシェープでマクロエラー

    どうにも不思議な現象が発生して困っています。 どなたか原因と解決方法を教えてください。 ワークシートに挿入した図形にマクロを登録し、選んだ図形によって処理を変えます。 登録したマクロに row = ActiveSheet.Shapes(Application.Caller).TopLeftCell.row を書いて、図形のある行を取得し、どの図形がクリックされたかを判断しています。 不思議なのはここからで、 【その1】  ずっと何年間も不具合無く動作していたのに急に「指定した名前のアイテムがみつかりませんでした。」というエラーが発生するようになりました。  しかも1回目に図形をクリックしたときは正常に動作するのに、続けて2回目をクリックするとこのエラーが出ます。 そして、デバッグでVB画面に移り、マクロを一度停止して再起動すると、また1回目は正常動作するのに2回目はエラーとなります。 【その2】 原因をさぐるためにrow = ActiveSheet.Shapes…の行の前にブレークポイントを設定してみたところ、ブレークポイントを置いて停止後に継続させると何回でも正常に動作します。 この現象自体が不明です。 どなたかよろしくお願いいたします。

  • excel マクロでデータ抽出したい

    excelの抽出をマクロ化しようと思っています。 キー記録で Sheets("data").Range("B11:O714").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("data").Range("G3:G5"), CopyToRange:=_ Range("B4:O615") , Unique:=False を得たので、これを元にして、条件範囲をオートシェイプのある列を条件にしようと思い、 col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column で、オートシェイプの列を取得し、 Sheets("data").Range("B11:O714").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("data").Range(Cells(3, col), Cells(5, col)),_ CopyToRange:=Range("B4:O615") , Unique:=False としたのですが、エラーになってしまいます。 colを使って条件範囲をするにはどうしたらいいのでしょうか? よろしくお願いします。

  • オートシェイブだけ削除したい場合、

    シートの上にオートシェイブとOLEオブジェクトの方のコマンドボタンがあり、 オートシェイブだけ削除したい場合、 どのようなvbaコードになるのでしょうか? Sub Sample() ActiveSheet.Shapes.Delete End Sub 上だと 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 になります。

  • マクロとオートフィル

    オートフィルを使った「マクロの記録」の部分でつまずいてしまいました。 A列に名前、B列に数字が入っていて、2列にオートフィルタをかけている場合 B列の0の数字のみを非表示にしたかったので オートフィルのタブを使って「0」のチェックマークを外すという動作を「マクロの記録」で記録しました。 そこまではいいのですが、データの追加があったのでオートフィルタの範囲内に数字と名前をそれぞれの列に追加したあと上記のマクロを使ってみると、どうしても追加したデータと0が非表示になってしまいます。 これを避けるにはVBAで指示しないと行けないのでしょうか?

  • エクセル2000(EXCEL)で日毎で実行させるマクロをひとつのオートシェイプに登録する方法

    エクセル2000(EXCEL)でツール→マクロ→マクロの新しい記録(マクロの自動記録)を使用して日によって実行する内容の違うマクロ31個、つまり31日分のマクロを作ったとします。ひとつのオートシェイプを実行ボタンとして使いこれに日毎によって実行するマクロを変える様に登録する事ってできるのでしょうか?日付が変わっている条件としてはNOW関数で拾えるとしてこの条件を元にひとつのオートシェイプで日ごとに実行するマクロを変えるということはできますか?やっぱり実行ボタンとしてのオートシェイプを31個作りひとつづつマクロを登録していくしかないのでしょうか?またできない場合は他にどんな方法があるでしょうか?分かる方宜しくお願いいたします。

  • excel オートシェープでマクロエラー

    前回、不思議なエラーについて質問した者です。 その後、原因と対処法は分かったのですが、エラーになる理由が分かりません。 現象について極簡単に簡略化して説明します。 ①ワークシートを2つ作ります。sheet1,sheet2 ②sheet1のA列の任意のセルに図形を挿入します。 ③その図形に以下のマクロを登録します。 Sub Macro1() Dim row, j As Integer Dim target As String Worksheets("sheet1").Unprotect ("") Worksheets("sheet2").Unprotect ("") row = ActiveSheet.Shapes(Application.Caller).TopLeftCell.row target = CStr(row) j = Worksheets("sheet1").Range("B" + target).Value j = j + 1 Worksheets("sheet1").Range("B" + target).Value = j Worksheets("sheet2").Protect ("") Worksheets("sheet1").Protect ("") End Sub 図形をクリックした回数をその図形の右に表示するだけのものです。 sheet2はその動作には関係ないのですが、エラーに関係します。 ④ここで4行目と5行目のプロテクト解除を  先にsheet1を解除してから次にsheet2を解除 Worksheets("sheet1").Unprotect ("") Worksheets("sheet2").Unprotect ("")  すると、正常に動作しますが、  先にsheet2を解除してから次にsheet1を解除 Worksheets("sheet2").Unprotect ("") Worksheets("sheet1").Unprotect ("")  にすると、1回目のクリックは動作しますが、2回目のクリックでは「指定した名前のアイテムがみつかりませんでした。」というエラーになります。 この現象について、どなたか理由を教えていただけませんか?

  • Excel マクロでボタンを押してリンク先に行く

    前回はお世話になりました。 ボタンを押した時にボタンの裏のセルに隠れているURL先に行くマクロを作っています。 具体的には D列から最大F列までの13行から下(変動します)にボタンがあり、 それぞれ行きたいURLがボタンの裏に書かれています。 D13にあるボタンをクリックすると、その裏にあるURLに行くイメージです。 http://okwave.jp/qa/q210243.html を参考に、セルの位置を取得するまでは出来ました。 次に objIE.Navigate Range("○●")の要領で Sell Range("○●")を作りたいのですが、 ○●の表し方が間違っているためかURL先に行けません。 Dim tmp As Variant tmp = Split(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address, "$") Shell Range(tmp(1) & tmp(2)) としてみたり、色々試してみましたがダメでした。 他の方法でも構いませんのでご教授願います。

専門家に質問してみよう