
エクセルマクロで指定範囲内の図形を削除する、
マクロをインターネット上で取得応用しているのですが、
範囲内に図形がない場合、でも動作するようにしたいです。
現状範囲内に図形が一つでもあれば、正常終了するのですが、
ない場合1004エラーで止まります。
どうにかならないでしょうか?
下記が使用中のマクロです。
Dim myRng As Range
Dim sp As Object
Set myRng = Range("A14:AR57")
Range("A14:AR57").Select
Range("A14").Activate
For Each sp In ActiveSheet.Shapes
If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing Then
sp.Delete
End If
Next
Set myRng = Nothing
このマクロの
If~Then構文にて1004エラーがでます。
急いでいます
教えてください。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
No.2 さん推しです。
.Shapes
を
.DrawingObjects
に書き換えるだけで簡単そうだし。
> 範囲内に図形がない場合、でも動作するようにしたいです。
> 現状範囲内に図形が一つでもあれば、正常終了するのですが、
> ない場合1004エラーで止まります。
図形がない筈、と思ってみているけれど、
[入力規則]の[リスト]のDropDownがあったとすると、
これは、Shapesのアイテムなのに、
.TopLeftCellも.BottomRightCellも属性として持たないので、
「'1004'オブジェクト定義」エラーになるとか、、、。
確かに昔はShapesのお仲間オブジェクトは他にも幾つかありましたね。
その点、.DrawingObjectsなら、
そもそもDropDownを相手にしてないとか、、、。
まぁバージョンによる変化が多い部分なので、
断言するのは現状、難しいとか、、、。
よく読んだら、補足コメントに
> 範囲外にはコントロールボタンや【プルダウン】はありますが、
と書いてありますね。
DrawingObjectsって、隠れキャラ(VBE非表示メンバー)なので、
馴染みがなく不安とか、だったら、別途皆さんに訊いてみて下さい。
非表示メンバーの中では使用頻度の高いものでですので、
情報は多いと思いますけれど、、、。
私はこれにて退散します。
No.5
- 回答日時:
>このマクロの
>If~Then構文にて1004エラーがでます。
なんですよねー
シートモジュールだったら
>Range("A14:AR57").Select
ここが1004エラーのはずなんですよねー
#や。別にSelect推奨してるわけではないです :)
No.4
- 回答日時:
ちょっとコメントさせていただきます。
最初は、「幽霊オブジェクト」かと思いましたが、コードに少し気になる部分はありますね。
>If~Then構文にて1004エラーがでます。
だいたい、この種にコードで、ランタイムエラーの1004が出るということは、初歩的なミスではないでしょうか。On Error Goto ErrHandler でも、Runtime Error1004では分かりません。
For Each sp In ActiveSheet.Shapes
If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing Then
sp.Delete
End If
ActiveSheet.Shapes
と
Range(sp.TopLeftCell, sp.BottomRightCell)
の親オブジェクトの整合性が取れていないのではありませんか?
早い話が、標準モジュールに書かれていないのではないでしょうか。
そのままのコードで通したいのでしたら、以下のような、With ステートメントでくくらないとダメです。正しくは、標準モジュールに移すかどちらかだと思います。
(そうでなかったら、ご容赦のほどを)
'----------------------
Dim myRng As Range
Dim sp As Object
With ActiveSheet
Set myRng = .Range("A14:AR57")
'2行は不要
''Range("A14:AR57").Select
''Range("A14").Activate
For Each sp In .Shapes
If Not Intersect(.Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing Then
sp.Delete
End If
Next
End With
Set myRng = Nothing
'----------------------
No.3
- 回答日時:
オンエラー文を使う手があります。
その時、ステップ変数 Dim wStep as long でコード上から wStep = 1000
wStep = 2000 などと数行毎に記しておきます。
問題の行でエラーにジャンプするなら
Msgbox "エラーだよ" & Err.Number & " " & Err.デスクリプション(つづり忘れました)
Stop
Resume Next
くらいしておけばよいでしょう。
エラーの原因をエラー名称から調べて回避するのが最もよいですが、
ひとまず完成にこぎつかす為によくやる手です。
No.2
- 回答日時:
Excelのバージョンにもよりますが、まずは単純なコードで確認したほうが良いでしょうね。
Sub test()
Dim sp As Shape
For Each sp In ActiveSheet.Shapes
sp.Visible = msoTrue
Debug.Print sp.Name, sp.TopLeftCell.Address
Next
End Sub
Ver2003の場合、上のコードでも、ある環境下でエラーになります。
TopLeftCellを持たないShapeがあるという意味です。
「Drop Down」つまりオートフィルタの▼。
以降のバージョンは改善されたように記憶してますが。
2003以前ならDrawingObjectsのLoopならいけたんじゃなかったっけかなー?(あやふや;|
Sub test2()
Dim d As Object
For Each d In ActiveSheet.DrawingObjects
d.Visible = msoTrue
Debug.Print d.Name, d.TopLeftCell.Address
Next
End Sub
No.1
- 回答日時:
こちらで試しましたが再現しませんね。
図形が無くてもちゃんと終了しました。
エラーが出た時にspが何を指しているかとか
その時のTopLeftCellとかイミディエイトウィンドウで
確認するのが近道ではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
このQ&Aを見た人はこんなQ&Aも見ています
-
指定範囲内で図形等を削除する方法は?
その他(Microsoft Office)
-
エクセル VBA 特定の範囲内に一部分でも入っていたら、そのオートシェイプを削除
Excel(エクセル)
-
画像を削除したい(VBA)
Word(ワード)
-
-
4
図形のクリアで実行時の1004エラーになる
Visual Basic(VBA)
-
5
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
6
Excelのセル内にある図形を削除したいのです。
Visual Basic(VBA)
-
7
セルをクリック⇒そのセルに入力された文字を○で囲む
Excel(エクセル)
-
8
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
9
オートシェイプの削除時のエラー回避法
Visual Basic(VBA)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
12
EXCELのオートシェイプを一括削除できないか?
その他(ソフトウェア)
-
13
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
14
指定範囲内のオートシェイプを数えるには?
Excel(エクセル)
-
15
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
16
UserForm1.Showでエラーになります。
工学
-
17
セルの文字を「印刷時だけ非表示」にしたいです。
Excel(エクセル)
-
18
VBAで特定のセルに画像があれば削除、なければ貼り付けを行いたい
Excel(エクセル)
-
19
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
-
20
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
ACCESS ADOでupdateが効かない
-
VB6より長文INSERT文でORA1756...
-
postgreSQLのエラーについて
-
SQLServer2005(SQLEXPRESS)
-
phpMyAdminでインポートできない
-
SQL Server2008 の解析
-
Access2000でDAOを使用したとき...
-
Access2000環境に対応するMid関...
-
何も表示されない実行時エラー...
-
@@ERRORと@@ROWCOUNT併用について
-
SQLServer・ストアドプロシージ...
-
SQL ServerのSQL実行時のエラー...
-
SQL Server 2008 0で除算ができ...
-
PostgreSqlでFunctionの作成に...
-
結合と集計、同一のステートメ...
-
TRANSACT-SQLでのシステムエラ...
-
Excel-VBAの「しばらくお待ちく...
-
create temporary tableについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
PostgreSqlでFunctionの作成に...
-
バッチファイルからのBCP起動に...
-
ACCESS ADOでupdateが効かない
-
ACCESS2000ディスクまたはネッ...
-
GROUP BYでエラーが発生
-
エクセルマクロで指定範囲内の...
-
何も表示されない実行時エラー...
-
エクセルのグループボックス枠...
-
sqlで文字列を最後に追加したい
-
エクセルからSQLサーバー ...
-
ACCESSで作成したアプリケーシ...
-
クエリの存在チェック
-
Access2000環境に対応するMid関...
-
複数の表の外部結合について
-
SQLServerが存在しないか、アク...
-
自作関数を含んだクエリをエク...
-
SQLServer・ストアドプロシージ...
-
SQLserverのIF文について
おすすめ情報
追加補足です
なにかでエラーとしかわからない状態です。
たまに正常終了します。
ただ大半はエラーではじかれます
範囲外にはコントロールボタンやプルダウンはありますが、
範囲内は罫線が描かれている以外何もありません