
Worksheet上には、楕円図形+テキストで作られたまたは、エクセル用無料判子アプリで作った、判子オブジェクトが1ケ~複数個あります。
他の図形やマクロボタンもありますが、それは選択の対象外で、判子オブジェクトだけ消したいのです。
アクティブシートに存在する判子オブジェクトのみを選択し、オブジェクトのタイプがオートシェイプまたは、画像であるか判定し、それら選択したオブジェクトを削除する。というシナリオで見様見真似で書いてみた以下のコードではおかしいのですが、どうおかしいかわかりません。
Sub AutoShapeDel()
Dim objShape As Object
Dim arr() As String
ReDim Preserve arr(0)
For Each objShape In ActiveSheet.Shapes
arr(UBound(arr)) = objShape.name
If objShape.Type = msoAutoShape Then
arr(UBound(arr)) = objShape.name
ReDim Preserve arr(UBound(arr) + 1)
End If
Next
ReDim Preserve arr(UBound(arr) - 1)
ActiveSheet.Shapes.Range(arr).Select
Selection.Delete
For Each objShape In ActiveSheet.Shapes
arr(UBound(arr)) = objShape.name
If objShape.Type = msoPicture Then
arr(UBound(arr)) = objShape.name
ReDim Preserve arr(UBound(arr) + 1)
End If
Next
ReDim Preserve arr(UBound(arr) - 1)
ActiveSheet.Shapes.Range(arr).Select
Selection.Delete
End Sub
どなたかこの不出来なコードをなんとか動くコードにしていただけないでしょうか?
No.3ベストアンサー
- 回答日時:
No2です。
>複数のmsoPictureにはどうすればいいかです。もしよろしければ、
>そこの部分をご解説いただけますと幸いです。
「判子オブジェクト」というのは画像ということですね?
で、他の(=判子以外の)画像と区別したいということでしょうか?
一般的な、属性だけで区別しようというのは難しいと思います。
こちらではわかりかねますが、何か「判子オブジェクト」固有の特徴を探すしかないのではないでしょうか。
どうしても特徴がないとなると、
・判子オブジェクトのピクセルサイズ
(サイズはエクセル上で可変ですが、固定ピクセルではないかと想像)
・画像の構成色を調べる
(多分、「赤と白」、あるいは「赤と透明」のみと想像)
あたりを手掛かりにするしかないような気がします。
(これだけでは確実とは言えませんが、ある程度の精度はでるかも知れません)
検索していたら、画像の色構成を調べるのに便利そうなDLLを作成している方のページを発見しましたので、ご参考までに。(win7時代のDLLのようですが・・)
https://mamesan.com/image/image_viewer_j.html
No.2
- 回答日時:
こんばんは
コードの前に、そもそも論になってしまいますが・・・
>判子オブジェクトだけ消したいのです。
シート上には他のShapeも存在するようですが、現状で正しく識別できているのでしょうか?
>If objShape.Type = msoAutoShape
の判定だけでは、「図の挿入」で作成される図は全て該当してしまいますが、それで問題はないのでしょうか?
例えば、「他の図形やマクロボタン」と言うのが、矢印線や矩形や星形などということはありませんか?
(これらは、そのままだと上記の判定にヒットします)
あるいは、ボタンに角丸の矩形を用いていることはないでしょうか?
(フォームボタンよりも、色を付けたり立体的に表示したりしやすいので)
また、
>エクセル用無料判子アプリで作った、判子オブジェクト
というのがどのようなものかわかりませんが、図形等がグループ化されていたりしませんか?
(グループ化されていると、上記の判定ではスルーされると思います)
特に、「楕円図形+テキスト」で作成された「判子状の図形」を他の図形と区別することは、かなり難しそうな気がしますけれど・・・
※ いらぬお節介的な杞憂なので、既に解決済みであるのなら無視してください。
こんばんは。
気にかけてくださりありがとうございます。
エクセル用無料判子アプリで作った、判子オブジェクトは、1ケしか存在しない場合は、msoPictureでヒットし、消すことができました。マクロボタンは、フォームのコントロールですし、今のところ他のAutoShapeの図形はないので、(今後の可能性がありますが・・) とりあえずmsoPictureの判定で進めようと思います。
今直面している最大の問題は、複数のmsoPictureにはどうすればいいかです。もしよろしければ、そこの部分をご解説いただけますと幸いです。
No.1
- 回答日時:
ザックリしか見ていませんが、
For Each objShape In ActiveSheet.Shapes
arr(UBound(arr)) = objShape.name ’←必要?
If objShape.Type = msoAutoShape Then
arr(UBound(arr)) = objShape.name
ReDim Preserve arr(UBound(arr) + 1)
End If
ActiveSheet.Shapes.Range(arr).Select
Selection.Delete
ここで、
ActiveSheet.Shapes.Range(arr).Select
が可能であれば、「objShape.Type = msoAutoShape」に合致するものは全て削除されているはずです。
その後、arr()をreset?していないので、
UBound(arr)はそのままの大きさです。
それでよろしいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vb.netです。2次元配列の要素をFor Eachでひとつづつ取得したい。 4 2022/07/05 11:30
- Excel(エクセル) excel vbaの配列なんですが・・・ 1 2022/12/26 18:50
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) VBAオートフィルターについて 6 2021/11/15 17:00
- JavaScript 配列の1要素を代入した変数を使って元の配列要素を削除できるか 1 2023/07/28 03:34
- PHP c言語 文字 - '1'+26 3 2022/03/26 20:58
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- C言語・C++・C# int temp = 0; if(isdigit(arr[i])){//文字が数字であれば(0~9) 1 2022/03/27 01:37
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでマウスの左クリック...
-
Accessのフォーム上にエクセル...
-
コードでオブジェクトを最前面に
-
EXCEL VBA ユーザフォームで複...
-
VBA エンターキーでイベントに...
-
ExcelのシートをAccessで表示し...
-
【エクセルのマクロ】クリップ...
-
文字列で小数点以下の0を削除し...
-
日本語の文字化けを直す方法
-
txtNo,txtDate等の意味
-
Webbrowserで完全にHPを表示さ...
-
ACCESSマクロ、Me![氏名] その...
-
VB6にて文字型変数の内容をオブ...
-
アクセスVBAのMe!と[ ]
-
Imageコントロールにグラフを表...
-
「ご処理進めて頂きますようお...
-
VBAでループ内で使う変数名を可...
-
エクセルで、日付を入力すると...
-
エクセルVBAで、MsgBox やInput...
-
Excelシート上のマクロを登録し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
エクセルVBAでセル番地を指定し...
-
【エクセルのマクロ】クリップ...
-
文字列で小数点以下の0を削除し...
-
Excel VBAでマウスの左クリック...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
現在アクティブになっているオ...
-
【エクセル】複数のTextBoxに共...
-
日本語の文字化けを直す方法
-
PowerpointVBAで指定のShapeオ...
-
VBでExcelの表形式の様なデザイ...
-
サブルーチンにオブジェクト名...
-
ユーザーフォームのインポート...
-
コードでオブジェクトを最前面に
-
GDIオブジェクトが増える……
-
エクセルのデータをwebフォーム...
-
ChexBox1等の「1」を変数にで...
-
Access からオブジェクトとして...
おすすめ情報