wordで数十ページある文書でマクロを組んでおり、
何ページ及び前頁にオブジェクト(図)を挿入できるようにしております。
この図を削除をしたいのですが
まとめて削除はできたのですが、他の図を削除せずにマクロで組んだ図を削除したいです。
Private Sub CommandButton1_Click()
With ActiveDocument.Shapes
Dim i As Long
For i = .Count To 1 Step -1
.Item(i).Delete
Next
End With
End Sub
消したい画像はダイアログから引っ張ってきた
' 図の挿入ダイアログで図を指定
Set oDialog = Dialogs(wdDialogInsertPicture)
With oDialog
.Display
で選べるようにしているものです。
クリックとかで選ぶか、引っ張ってきた情報を引き継いで消せるのか
よろしくお願いいたします
No.5ベストアンサー
- 回答日時:
こんばんは#3です
>全ページ削除やvbMoodelessでフォームを起動しておいて選択したオブジェクトを削除とかはできないでしょうか?
各ページにこちらhttps://oshiete.goo.ne.jp/qa/12714690.htmlで回答したコードなどを使い追加されたシェイプが対象になります。
(各ページに同時期に(VBAで)(1ファイルを基に)追加されたシェイプ)
vbModelessでUserFormをShow(load)して
削除したいShapeを選択してCommandButton?を押下した時の処理です
全頁、同時に追加された該当シェイプが削除されます。
Private Sub CommandButton?_Click() '?登録ボタン№
Dim i As Integer, n As Integer
Dim Act_Pg_No As Integer, End_Pg_No As Integer
Dim iNo As Integer
Dim shp As Shape, shpN As Variant
With Selection
Act_Pg_No = .Information(wdActiveEndPageNumber)
End_Pg_No = .Information(wdNumberOfPagesInDocument)
End With
On Error GoTo Not_SelectionErr
For Each shp In Selection.ShapeRange
shpN = Split(shp.Name, " ")
Next
iNo = CInt(shpN(1)) - (Act_Pg_No - 1)
' 各ページごとの処理
For i = 1 To End_Pg_No
Selection.GoTo What:=wdGoToPage, _
Which:=wdGoToAbsolute, _
Count:=i
' 画像処理
With ActiveDocument.Shapes
For n = .Count To 1 Step -1
If .Item(n).Name = shpN(0) & " " & CStr(iNo) Then
.Item(n).Delete
Exit For
End If
Next
End With
iNo = iNo + 1
Next
Exit Sub
Not_SelectionErr:
MsgBox "Shapeが選択されていません。"
End Sub
選択したシェイプのみ削除する場合は
Private Sub CommandButton?_Click()
Selection.Range.ShapeRange.Item(1).Delete
End Sub
*現在Wordの画像操作においてアップデートによる不具合が発生しているようです。
VBA実行に対しても問題が発生する可能性もあると思いますので
未確認ですが、ご留意を
回答ありがとうございます。
上手くいきました。指定のとおりに動作できました。
ありがとうございます。
今回の作成しているマクロではNo.5、6の Qchan1962さんの方式のほうで行きたいと思いますのでベストアンサーに選ばさせていただきました。
No.6
- 回答日時:
#5 修正です、すみません。
For Each shp In Selection.ShapeRange
shpN = Split(shp.Name, " ")
Next
For Each shp In Selection.ShapeRange ’不要
shpN = Split(Selection.ShapeRange.Name, " ") ’修正
Next ’不要
よってshp As Shape, ’不要 ですネ
No.4
- 回答日時:
参考までに。
No.1の回答者さんが書いたように、名前があれば処理が簡単です。
ダイアログで挿入する際に、独自の名前を付ければ処理は単純に
なりますので、
https://docs.microsoft.com/ja-jp/office/vba/api/ …
こちら↓の処理を使うなら「画像処理」の下部分に追加します。
Set PIC = ActiveDocument.Shapes.AddPicture(FileName:=.Name)
With PIC
.Name = "独自の名前" & i ' この部分を追加(連番はページ番号)
削除するマクロは、No.1のお礼にあるように
Dim i As Long
With ActiveDocument.Shapes
For i = .Count To 1 Step -1
If .Item(i).Name Like "独自の名前*" Then
.Item(i).Delete
End If
Next
End With
で処理できます。
回答ありがとうございます。
動作確認できました。
独自の名前を取り込む際につけることで削除できました。
大変勉強にになりました。ありがとうございます。
No.3
- 回答日時:
こんにちは
>全ページにつけており、その後間違って消したい場合に上記コードを例えば40回繰り返せばいいのですがそれだと効率が悪いためいい方法を考えておりました。
前頁と言う事で最後に追加したShapeで良いでしょうか
方法は色々あるようですが、
参考:https://www.relief.jp/docs/word-vba-select-page. …
Sub Last_Shape_del() ' 最後の挿入画像を削除
Dim pg As Page
With ActiveWindow
.View.Type = wdPrintView
For Each pg In .ActivePane.Pages
pg.Rectangles(1).Range.Select
With ActiveDocument.Shapes
If .Count > 0 Then .Item(.Count).Delete
End With
Next pg
End With
End Sub
*If .Count > 0 はShapeの存在しないシートがある時の対策です
回答ありがとうございます。勉強になります。
ページ削除確認できました。
しかし、なぜか毎回その後ファイルが閉じて自動修復で再起動になってしまいます。
保存してしまった場合を考慮してあとから
指定したファイル名のオブジェクトを全ページ削除やvbMoodelessでフォームを起動しておいて選択したオブジェクトを削除とかはできないでしょうか?
No.2
- 回答日時:
こんにちは
>クリックとかで選ぶか、引っ張ってきた情報を引き継いで消せるのか
両方共に出来ると思いますし方法は色々あります。
>クリックとかで選ぶ
ユーザーフォームからでvbModelessでロードしていれば
オブジェクトを選択する事が可能ですね
また、(多分このように使いたいのかな)
VBAで挿入した画像をキャンセルの意味などで直後に削除したい場合は
一番大きいインデックスアイテム(最後に作られたShape)を
削除すれば良いので
With ActiveDocument.Shapes
.Item(.Count).Delete
End With
更に
#1様が回答されているようにNameプロパティで分岐、削除する方法や
各プロパティ Typeや色などを手掛かりに削除する方法が考えられます。
ShapeにTextFrame.TextRangeがあれば、テキスト内容で削除したり
逆に無い時のエラーをキーにテキストのないTypeを削除する事も出来ます。
例えばこのような場合は
既存(残したいShape)が固定で5つある場合などは
ご質問のコードのループ終端を6にすれば、初めからある
5つのShapeは削除されないような処理も出来ます。
With ActiveDocument.Shapes
Dim i As Long
For i = .Count To 6 Step -1
.Item(i).Delete
Next
End With
回答ありがとうございます。参考になります。
ひとつ前のオブジェクトをキャンセルすることはできました。ありがとうございます。
文書は40ページぐらいあり図とかもいろいろあってそこにタイトル的に一括でオブジェクトを下記の方法で全ページにつけており、その後間違って消したい場合に上記コードを例えば40回繰り返せばいいのですがそれだと効率が悪いためいい方法を考えておりました。
pg = Selection.Information(wdNumberOfPagesInDocument)
For i = 1 To pg
Selection.GoTo What:=wdGoToPage, _
Which:=wdGoToAbsolute, _
Count:=i
もう一つの方法でページ数分の数を選択してみましたが数ページの削除でうまくいきませんでした。
Private Sub CommandButton13_Click()
Dim i As Long
With ActiveDocument.Shapes
For i = .Count To 39 Step -1
.Item(i).Delete
Next
End With
End Sub
前提事項が一部抜けていたためわかりにくくてすいませんでした。
No.1
- 回答日時:
おはようございます。
下記の様な記載で、名前とかで区別できないでしょうか?
区別できれば、IF文などで分岐すれば、可能では?と思います。
For i = .Count To 1 Step -1
IF .Item(i).Name LIKE "*消したい図の名前など*" THEN
.Item(i).Delete
END IF
Next
回答ありがとうございます。
勉強不足ですいません。こういうことでしょうか?
Private Sub CommandButton14_Click()
Dim i As Long
With ActiveDocument.Shapes
For i = .Count To 1 Step -1
If .Item(i).Name Like "sumple.jpg" Then
.Item(i).Delete
End If
Next
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Excelのマクロコードについて教えてください 1 2022/03/27 12:02
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
【ワード】マクロで画像を選択する
Word(ワード)
-
ワードマクロで画像を選択する方法
Word(ワード)
-
Wordの文章中の一致した文字のある段落を削除する
Visual Basic(VBA)
-
-
4
word_VBA_フォームからダイアログそこからの復帰について
Word(ワード)
-
5
wordのマクロで縮小して貼り付ける方法を教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Word■図が編集画面外に出て消え...
-
【WORD】ヘッダーに設定した画...
-
Word文章で会社名の上に印鑑(J...
-
ワードに画像を貼り付ける時、...
-
エクセルのテキストボックスに...
-
WordにExcelの表を貼り付けると...
-
Word フィールドコードのみ削除...
-
Word 2003の図表番号挿入機能を...
-
ExcelからWordへの図のコピー時...
-
ネットから引用したい図や写真...
-
分かる方教えてください。 word...
-
パワーポイント2019 図の透...
-
注意などのマーク
-
Excel 図の挿入を小さい倍率で...
-
wordでの指定オブジェクトの削除
-
Excelへ貼り付けた画像の一部を...
-
ワードに貼り付けた画像の横に...
-
ワードに「枠空け」の機能は無...
-
ワードでロゴマークを入れて固...
-
図表番号が被って表示される
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Word■図が編集画面外に出て消え...
-
【WORD】ヘッダーに設定した画...
-
Word フィールドコードのみ削除...
-
エクセルのテキストボックスに...
-
Word文章で会社名の上に印鑑(J...
-
WordにExcelの表を貼り付けると...
-
Word2003に図を挿入すると、縦...
-
ExcelからWordへの図のコピー時...
-
パワーポイント2019 図の透...
-
エクセルで図を挿入したとき・・
-
ネットから引用したい図や写真...
-
Word 2003の図表番号挿入機能を...
-
エクセルの棒グラフの棒を他の...
-
wordの図をExcelで編集
-
エクセル 取り消し線の色
-
ワードに画像を貼り付ける時、...
-
wordでの指定オブジェクトの削除
-
図表番号が被って表示される
-
Excelのワークシートオブジェク...
-
相互参照で図1.1としか挿入され...
おすすめ情報