• 締切済み

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

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

みんなの回答

回答No.1

前後のマクロがないと原因はわかりませんね。 row = ActiveSheet.Shapes(Application.Caller).TopLeftCell.row debug.print(row) としたら何回クリックしても動きますよ。 タイミングがずれるとダメな処理が入っているのでは? よく入れるのはDoEventsですね。

ryou4649
質問者

補足

debug.print(row)を入れて見ましたが、状況は変わりませんでした。2回目にエラーが発生します。 使用している部分は以下の部分です。 ・ある試合の結果から賞状を印刷します。 ・Worksheets("大会結果")は試合の結果です。   行数により男女とか何位とかが変わります。 ・ Worksheets("県弓連")は賞状の印刷形式です。 ・ご指摘のDoEventsなどは使っておりません。 Sub 弓連賞状印刷() Dim col, row As Integer Dim target1, target2 As String Dim MyPrinter As String MyPrinter = Application.ActivePrinter 'INKJET 'Canon inkjet Pixus iX5000 Worksheets("県弓連").Unprotect ("atari") Worksheets("大会結果").Unprotect ("atari") row = ActiveSheet.Shapes(Application.Caller).TopLeftCell.row target1 = CStr(row) If row < 20 Then Worksheets("県弓連").Columns("R:R").ColumnWidth = 15.38 Worksheets("県弓連").Columns("T:T").ColumnWidth = 0 Else Worksheets("県弓連").Columns("R:R").ColumnWidth = 10.38 Worksheets("県弓連").Columns("T:T").ColumnWidth = 5 End If Worksheets("県弓連").Range("af1").Value = Worksheets("大会結果").Range("d" + target1).Value '種目 Worksheets("県弓連").Range("af2").Value = Worksheets("大会結果").Range("n" + target1).Value '順位 Worksheets("県弓連").Range("af3").Value = Worksheets("大会結果").Range("j" + target1).Value '1 Worksheets("県弓連").Range("af4").Value = Worksheets("大会結果").Range("f" + target1).Value '2 Worksheets("県弓連").Calculate Worksheets("県弓連").PageSetup.PrintArea = "$a$1:$W$49" Sheets("県弓連").Select k = Val(InputBox(prompt:="1 表示のみ")) If k = 0 Then '賞状用ブリンタで印刷 Worksheets("県弓連").PrintOut Copies:=1, Collate:=True, ActivePrinter:=Worksheets("大会結果").Range("C69").Value Worksheets("大会結果").Range("r" + target1).Value = "済" End If Sheets("大会結果").Select Worksheets("県弓連").Protect ("atari") Worksheets("大会結果").Protect ("atari") Application.ActivePrinter = MyPrinter End Sub

関連するQ&A

  • 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で合成オートシェーブにマクロ登録でエラー

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

  • Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

    Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。 オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。 マクロ記録をすると以下のようになりました。 Sub Macro1() ActiveSheet.Shapes("AutoShape 1").Select Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45 Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid End Sub このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。 ・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう? ・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか? よろしくお願いします。

  • エクセルVBAでオートシェイプのType取得でエラー

    シート上に複数のグループ化したオートシェイプがあり、 それを一括して消すマクロを組みました。 その時、シート上のボタンまで消してしまわないようTypeで判断しています。 Dim Sp As Shape For Each Sp In Shapes If Not Sp.Type = 12 Then Sp.Delete End If Next 簡単な図形であれば、数百個でも問題ありません。 また、複雑な図形でも数個であれば正常に動作します。 これが、複雑な図形が数十個になると、 "Tyepメソッドは失敗しました。"とエラーが表示されExcel自体が強制終了します。 1、2回で出ないこともたまにありますが、何度か繰り返しますと確実に出ます。 原因が特定できず困っています。 推測や可能性でもかまいません、どうぞよろしくお願いいたします。 ※複雑な図形とはフリーハンドを組み合わせたような絵です。(人物の顔など) 動作はWindows2000のEXCEL2000で2台 WindowsXPのEXCEL2003で1台でテストしました。

  • エクセル2002マクロ オートシェイプの消去方法を教えて下さい

    エクセルでB5~F18に掛けて表があります。 この表は毎日1表ずつ分あり、使わない日は右上から左下に向かって斜線を引きます。 オートシェイプで引いた線をマクロで記録して引いているのですが、誤って引いてしまった時の消去マクロが作れないかな、と考えているのですが、可能でしょうか? マクロの記録で、オートシェイプをクリックしてDeleteとやってみたのですが、うまくいきません。 どうやら線を引くたびに番号がつくらしく、その番号の線を消す、という風に記録してしまう為、エラーになってしまうようです。 表に斜線が引ければ良い訳で、他に方法があるのならそれで構いませんし、表は印刷してペーパーで保管しています。 何か良い方法がありましたら、宜しくお願い致します。 ちなみに今、描写の為に使っているマクロは下記の通りです。 Sub Macro2() ActiveSheet.Shapes.AddLine(15.75, 59.25, 323.25, 475.5).Select Selection.ShapeRange.Flip msoFlipHorizontal End Sub

  • [エクセル2007] 図形を非表示にするマクロ

    図形「図A」を非表示にするマクロがあります。 Sub 図削除() ActiveSheet.Shapes("図A").Visible = False End Sub これを図A、図B、図C・・・・・・と増やしていく場合はどうすれば良いのでしょうか? Sub 図削除() ActiveSheet.Shapes("図A").Visible = False ActiveSheet.Shapes("図B").Visible = False ActiveSheet.Shapes("図C").Visible = False            ・            ・             ・ End Sub とするしかないのでしょうか?

  • excelマクロについて エラー

    登録して、クリックしてマクロ開始できるように(図形に右クリックでマクロ登録)して マクロ有効ブックに「マクロを有効にする(:セキュリティ)」にして保存します。 そして開きなおして、クリックするとエラー(メソッドは失敗しました)がでます。 作り直してもでます。これはどうすればいいのでしょうか。

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

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

  • VBAでオートシェープのテキストを取得の際、ShapesとDrawingObjects?

    エクセル2003です。 オートシェープの基本図形の「額縁」に以下のマクロを登録しました。 マクロを呼び出したオートシェープに表示してあるテキストを取得しようとするものです。 Sub test() x = Application.Caller MsgBox ActiveSheet.Shapes(x).Characters.Text End Sub ところが実行時エラーとなってしまいます。 試行錯誤の結果、ShapesをDrawingObjectsに変えるとうまくいきます。 なぜでしょうか?

  • エクセルマクロでロックするとエラーが出る

    こんにちは エクセルマクロでロックをかけるとエラーが出てしまいます。 具体的には↓ Sub tes() Range("a1:c1").Copy ActiveWorkbook.Worksheets("Sheet2").Activate ActiveSheet.Unprotect '(1) Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial End Sub 上記のマクロでSheet2にロックをかけるとエラーが起こります。 (1)まではちゃんと行きますし、Sheet2にロックをかけなくても上手く動作します。 原因が思いつかないので、ぜひアドバイスをお願いいたします。

専門家に質問してみよう