• 締切済み

Rectangleクラスのselectメソッド失敗

EXCEL VBAで図形を描画するものを作成して動かしていました。 今までは通常に動作していたのですが、ある時から急に下記メッセージが表示してしまい。 それ以降、エラーが出続けています。 実行時エラー1004 Rectangleクラスのselectメソッドに失敗しました。 その図形を選択すると、四角形65580となっており、65536を超えている からかと想定しています。 図形の作成数を初期化すれば直るような気もしますが、どなたか 原因と対処方法が分かる方はいらっしゃらないでしょうか? なお下記の様に記述しています。 Sheets(シート名).Select ActiveSheet.Rectangles.Add(変数1,変数2,変数3, 変数4).Select Selection.Interior.ColorIndex = 変数5 Selection.SendToBack

みんなの回答

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

僕もカウント100万以上まで育った子もってます。今にも爆発しそうでドッキドキ。すこし調べなきゃとは思ってますが、カウント初期化はできないかも・・・。 そして、問題原因は別じゃないかと。 想定で終わらず、裏付け取らなきゃキケンですよ。 というか、こんな問題では?↓ -- myメモ帳より -- Excel2003、再描画ON(ScreenUpdating=True:デフォルト値)で、大量のシェイプを描画すると、1004エラーが発生することあり。 ShapesのAddTextBox/Group/Deleteで発生を確認。  ・発生頻度低(デバッグの中断がトリガー??)  ・一度発生すると毎回発生  ・エラー発生後、「継続」やステップ実行が可能 ファイルが壊れるっぽいので、要ファイル再作成。 現象から、おそらく描画絡み。タイミングや負荷が影響? 対処としては、  ◎ScreenUpdating = False  △直前でシートやシェイプを.Select/.Activate ------ 同一問題だといいんですが、どっちにしても不明だらけ。Excelが図形まわり弱いのだけは確かです。とりあえずファイル作り直してみて、再発さえしなければ忘れてよい気も。 分からないなら受け入れるしか・・・ 一応対策として、ScreenUpdating = Falseと、Selectしないのがオススメです。  Dim s as Rectangle  Set s = Sheets(シート名).Rectangles.Add(...)  s.Interior.ColorIndex = 変数5  s.SendToBack

全文を見る
すると、全ての回答が全文表示されます。
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

そのBookの中で該当シートのコピーをつくり 元のシートを削除し、コピー作成したシートを元の名前につけなおしてください。

mohba0702
質問者

お礼

DreamyCatさん、ありがとうございます。 確かに言われたやりかたで、できるようになりました。 1回の操作で1.5万個位の描画をするので5回程度の 実行でまたエラーになってしまいそうです。 本操作をマクロ化すればよいのかもしれませんが、 マクロで数値を初期化する手段はないものでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • worksheetクラスのcopyメソッドが失敗しました。

    VBA初心者です。 「worksheetクラスのcopyメソッドが失敗しました。」 エラー回避方法を教えてください。 やりたいことは、データ入力シートから雛形シートにデータを参照して、データ入力シートの1行ずつを新しいシートにしたいです。35シートぐらいをコピーしたら上記のエラーがでました。メモリ不足でエラーになるんだろうなぁということは予測つくのですが、なにか回避方法はありますか? 別のブックを使う方法でもよいです。ご教示ください。 コードはこんな感じです。 Sub シート作成1() 'データ行選択 Range("B9").Select Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Unprotect Rows("8:8").Select Selection.AutoFilter Selection.AutoFilter Field:=12, Criteria1:="<>" Range("B9").Select Range(Selection, Selection.End(xlDown)).Select '選択したデータ行のシート作成 For Each 選択セル In Selection Worksheets("ひな形").Copy after:=ActiveSheet DoEvents 'シート名の変更 ActiveSheet.Name = 選択セル.Value ActiveSheet.Tab.ColorIndex = 38 Next 選択セル DoEvents 'オートフィルタを元にもどす Sheets("データ入力シート").Select Rows("8:8").Select Selection.AutoFilter Range("B1").Select Columns("L:O").Select Selection.EntireColumn.Hidden = True Range("B1").Select ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ False, AllowSorting:=True, AllowFiltering:=True End Sub よろしくおねがいします。

  • SheetsクラスのSelectメソッドが失敗

    Excelファイルのマクロで、SheetsクラスのSelectメソッドが失敗しましたのエラーが出ます 以下のマクロですが、最初のSheets(Array(................))._Select でエラーになりますその後は解りませんが...。 原因はSelectしているSheetの中に非表示なシートがあるのが原因ですが、 このマクロが入っているExcelファイルは色々な人が使うので人によって非表示にしたい シートがまちまちで、限定は出来ません。ただし、非表示にしたものはそのファイルを 使う人はそのシートはなくても構わないですので、使う人によってマクロを修正すれば 動くのですが、ちょっと面倒なのでこのマクロを修正して対応出来ればと思います。 このケースはsheet4~sheet10までのシートを選択して、選択した全てのシートの特定 部分を消去し、選択していないシートに入って選択を解除し基本となるシートに戻る というマクロです。 マクロの記録で作成して、いらなそうなやつを削除したものです。 ホームページで色々検索しましたが、非表示シートはSelect出来ないと言うことは何となく 解りましたが、マクロの記録で作成した事でも解るように全くの初心者ですので、そこの ところよろしくお願いします。 Sub クリアー() ' ' クリアー Macro ' Sheets(Array("sheet4", "sheet5", "sheet6", "sheet7", "sheet8", "sheet9", "sheet10")). _ Select Sheets("sheet6").Activate Union(Range( _ "F109:BO109,F112:BO112,F115:BO115,F118:BO118,F121:BO121" _ ), Range( _ "FJ225:GS225,FJ228:GS228,FJ231:GS231,FJ234:GS234,FJ237:GS237" _ ), Range( _ "OA535:PD535,OA538:PD538,OA541:PD541,OA544:PD544,OA547:PD547")).Select Selection.ClearContents Sheets("sheet3").Select Sheets("sheet6").Select Range("J1:L1").Select End Sub

  • range クラスのselectメソッドが・・・

    マクロ実行時に 実行エラー 1004 「Range クラスのselectメソッドが失敗しました。」 のメッセージが出てしまいます。 マクロは以下のとおりです。 ----------------------------------------------------------------------------------- Sub 振替表作成() Workbooks.Add Application.SheetsInNewWorkbook = 1 ActiveSheet.Name = "未収" MsgBox ("未収・前受振替表エクセルファイルを作成します。" & "任意の場所を指定して保存してください。 ") With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName = "未収・前受振替表" If .Show = -1 Then .Execute End With MsgBox ("対象月次の1370集計表 を選択してください。") With Application.FileDialog(msoFileDialogOpen) .InitialFileName = "" .AllowMultiSelect = True If .Show = -1 Then .Execute End With Columns("A:D").Select Selection.Delete Shift:=xlToLeft ---------------------------------------------------------------------------- Columns("A:D").Select の部分でエラーになります。 Columns("A:D").Select の前に ActiveWindow.Select を入れてみたんですが駄目です。 Columns("A:D").Select の前に Selection.Select を入れてみたんですが駄目です。 Columns("A:D").Select の前に Worksheets("シート名").Activate を入れてみたんですが駄目です。 原因と解消方法がわかりません。 何がいけないんでしょうか?

  • ECXEL VBA - Selectメソッドの失敗

    Rangeを指定するのに、 Workbooks("abc").Sheets("Sheet1").Range("A1").Select と言う風に指定したいのですが、これを行なうと -------------------------------------------- 実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。 -------------------------------------------- となってしまう為、いつもわざわざ下記のようにしています。 Workbooks("abc").Activate Sheets("Sheet1").Select Range("A1").Select Selectだけでなく、Copyの貼り付け等の時も同様で かなりの手間と、コードの長さになってしまっています。 どこかの設定を変えると出来たりするのでしょうか? 又、他に良い方法がありましたらお教え下さい。 よろしくお願いします。

  • エクセル・マクロ CSVファイルの読込方法と改行

    マクロがうまく作成出来ずにいます。 是非、教えて頂けないでしょうか、宜しくお願い致します。 マクロでやりたい事は二つあります。 (1)あるシステムよりRドライブ内にデータを落とし、その後エクセルシートへ貼り付ける作業を行っているのですが、この作業をマクロで出来るようにしたいです。 ただ、データを落とした段階では拡張子表示にしても何もついていないデータになっていますが、中身からしておそらくCSV形式のデータだと思います。 (2)シート(1)、(2)、(3)にあるデータをシート(4)に順番に貼り付けていきたいのですが、(1)のシートのデータと(2)の間に空白の行を一行、(2)と(3)の間にも空白の行を一行としていきたいのです。 (2)に関しては途中までマクロを書いたのですが、エラーが出てうまくいきません。 作成したマクロは以下です。 Sheets("summary").Activate Range("A3").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.ClearContents 'AUD シート Sheets("AUD").Activate ActiveSheet.Range("A1").Select ActiveSheet.Range("A1:P1").Select ActiveSheet.Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("summary").Activate ActiveSheet.Range("A3").Select ActiveSheet.Paste With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Application.CutCopyMode = False ActiveCell.Select ActiveSheet.Range(Selection.End(xlDown)).Select Cells.Replace What:=Chr(10), Replacement:="<br>" 最後の数行でエラーが出ます。 マクロの初心者でこんな事もわからないのかと思われるかもしれませんが、 どうぞ宜しくお願い致します。

  • エクセルで指定した行範囲を別のシートにコピーするには?

    (1)指定した行(数値)を変数として登録する方法 tx1 = Sheets("0").Range("A1") tx2 = Sheets("0").Range("A2") tx3 = Sheets("0").Range("A3") A1=2 A2=2000 A3=2500 (2)(1)で指定した変数を使用して行範囲を他のシートSheets(”1”)、Sheets("2”)にコピーペースト。 行(”2:1999”) ←tx1 : tx2-1(A2の数値から1を引いた数値) Rows(▲▲▲▲▲▲).Select Selection.Copy Sheets("1").Select Rows("1:1").Select ActiveSheet.Paste 行(”2000:2499”) ←tx2 : tx3-1(A3の数値から1を引いた数値) Range(▲▲▲▲▲▲).Select Selection.Copy Sheets("2").Select Rows("1:1").Select ActiveSheet.Paste ▲部分がエラーになってしまい、うまくいきません。 正しい方法を教えてください。

  • Do Loop Until 条件停止後のセル位置について

    こんにちは。いつもお世話になります。 ただ今、シート上の緑色のセルをカーソルで移動させるプログラムを 作っています。 停止の条件は[SHIFT]キーを押すと止まります。 一応は停止しますがセルの位置がズレてしまい、なんとか現在選択 している位置で停止できないものかと思い、アドバイス願います。 コードは下記になります。 Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vkey As Long) As Long Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Key_Sample() Cells(1, 1).Select On Error Resume Next '繰返し開始 Do '上方向のキー入力判定 If GetAsyncKeyState(38) <> 0 Then Selection.Interior.ColorIndex = xlNone ActiveCell.Offset(-1, 0).Select Selection.Interior.ColorIndex = 4 Else Selection.Interior.ColorIndex = 4 End If '下方向のキー入力判定 If GetAsyncKeyState(40) <> 0 Then Selection.Interior.ColorIndex = xlNone ActiveCell.Offset(1, 0).Select Selection.Interior.ColorIndex = 4 Else Selection.Interior.ColorIndex = 4 End If '左方向のキー入力判定 If GetAsyncKeyState(37) <> 0 Then Selection.Interior.ColorIndex = xlNone ActiveCell.Offset(0, -1).Select Selection.Interior.ColorIndex = 4 Else Selection.Interior.ColorIndex = 4 End If '右方向のキー入力判定 If GetAsyncKeyState(39) <> 0 Then Selection.Interior.ColorIndex = xlNone ActiveCell.Offset(0, 1).Select Selection.Interior.ColorIndex = 4 Else Selection.Interior.ColorIndex = 4 ActiveCell.Select End If Sleep 100 Loop Until GetAsyncKeyState(16) <> 0 End Sub

  • PowerPointで作った図形の名前を変更したい

    PowerPointで、図形描画を使い四角を作りました。マクロの記録でそれを選択すると、 ActiveWindow.Selection.SlideRange.Shapes("Rectangle 88").Select と出て名前が「Rectangle 88」だとわかりました。 この図形の名前を「shikaku1」に変更する事はできますか? また、マクロの記録を使わずに名前を確認する事はできますか?

  • エクセルのマクロについて

    エクセル97でマクロを組んで下記作業を行いたいと考えていますが(実際にやりたい事から抜粋した内容です)、不具合が起こっています。 ~やりたい事~ コマンドボタンを押すとあるシートのセルをコピーして、違うシートに貼り付ける。 ~不具合内容~ (1)普通にマクロを実行すると問題ないが、(2)コマンドボタンを使用するとエラーが起こる。 エラー内容は、 「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」 と言う内容です。 ~(1)のVB表記~ Sub Macro1() Sheets("sheet1").Select Range("A1").Select Selection.Copy Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~(2)のVB表記~ Private Sub CommandButton1_Click() Sheets("sheet1").Select Range("A1").Select (←ここでエラーが発生します) Selection.Copy  Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~質問事項~ 1)(2)の表記の何が原因でエラーが起こっているのでしょうか? 2)エラーが起きない為にはどのようにしたら良いでしょうか?

  • VBA セルの色を変更する

    VBA(エクセル2007使用)で、セルの背景色を変更する場合についての質問です。 マクロを実行する度に、セルの背景色を変更するマクロを作成しました。 オレンジ→水色→緑→灰色→無色  という風に変わっていくところまでは できたのですが、これだとマクロを実行するのにセルの状態が無色か、指定した カラーコードで塗りつぶされていないと実行できません。 下記、コードの一番最初の Case で ”背景色がどんな色の場合でも”という条件に したいのですが、どのように記載したらわからずにいます。。。 ---------------------------- Sub 色チェンジ() n0 = ActiveCell.Interior.ColorIndex Select Case n0 Case xlNone   ’ここを”どんな色の場合でも、、、という条件にしたいです。。” Selection.Interior.ColorIndex = 40 Case 40 Selection.Interior.ColorIndex = 34 Case 34 Selection.Interior.ColorIndex = 35 Case 35 Selection.Interior.ColorIndex = 15 Case 15 Selection.Interior.ColorIndex = xlNone End Select End Sub -----------------------------------

専門家に質問してみよう