• 締切済み

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