
マクロ初心者です。
下記のコードはグーグルで検索してコードの継ぎ接ぎで作成しています。
処理内容は
【sub 画像 の処理について】
1、指定フォルダからフォルダ内の画像をすべて開く。
2、開いた画像名をセル「ax1」~順番に記入
3、画像は適当なところに貼り付ける
【sub 名前変更の処理について】
1、アクティブシートの画像をすべてに名前の変更を1からナンバリングする。
上記のような処理を行いたいのですが、
【画像】マクロを実行し【名前変更】の処理をすると
エクセル画面の「名前ボックス」セル番号とか表示される内容は
画像保存名のままでナンバリングできません。
オブジェクトだからなのでしょうか?
説明不足で恐縮ですがアドバイスをお願いします。
Sub 画像()
Dim strFileName As String, dirPath As String
Dim Obj As Object
Range("Ax1").Activate
dirPath = "C:\Users\画像\"
strFileName = Dir(dirPath & "*.JPG")
Do Until strFileName = ""
ActiveSheet.Pictures.Insert(dirPath & strFileName).Select
ActiveCell.Value = strFileName
ActiveCell.Offset(1, 0).Activate
strFileName = Dir()
Loop
End Sub
----------------------------------------------
Sub 名前変更()
Const conName As String = ""
Dim c As Long
Dim objShape As Object
For Each objShape In ActiveSheet.Shapes
If objShape.Type = msoPicture Then
c = c + 1
objShape.Name = conName & c
End If
Next
End Sub
No.2ベストアンサー
- 回答日時:
>→回答を頂いたように、パス名と画像ファイルをしているのでリンク画像という扱いになります。
であれば、
If objShape.Type = msoPicture Then
は、
If objShape.Type = msoLinkedPicture Then
となります。
msoPictureは、画像です。
msoLinkedPictureは、リンク画像です。
つまり、リンク画像の場合、If objShape.Type = msoPicture Then はFalseとなり
c = c + 1
objShape.Name = conName & c
が実行されません。
ちなみに、画像を挿入時に名前を変える場合と後から変える場合では
実際の処理結果に違いが出ます。
すでに、名前が存在した場合は、どうするかとか、、、
後からなら、既存のシェイプも条件を通れば、リネームされることになります。
このあたりの仕様を検討してプロセスを考えると良いかと思います。
ちなみに、後からシートにある画像に対してリネームを行うなら
同じモジュールにある場合。
Loop
Call 名前変更
End Sub
でOKかと、、
また、挿入時なら
Const conName As String = ""
Dim c As Long
Range("Ax1").Activate
strFileName = Dir(dirPath & "*.JPG")
Do Until strFileName = ""
ActiveSheet.Pictures.Insert(dirPath & strFileName).Select
c = c + 1
Selection.Name = conName & c ’ここでリネーム
ActiveCell.Value = strFileName
ActiveCell.Offset(1, 0).Activate
strFileName = Dir()
Loop
エラー対策が必要になるかと、、、
ファイルを選択して、、、ならファイルピッカー FileOpenPicker
フォルダ内すべてなら、、、フォルダピッカーを FolderPicker を使うと良いでしょう。
No.3
- 回答日時:
投稿して気が付きました。
13などの番号が間際らしかったのですね。
Shapeの種別に関する参考サイトです。
https://www.relief.jp/docs/excel-vba-list-msosha …
No.1
- 回答日時:
こんにちは、
>画像保存名のままでナンバリングできません。オブジェクトだからなのでしょうか?
If objShape.Type = msoPicture Then は、画像ならとなっていますが、貼り付けたjpgは画像(13)と確定していますか?
>ActiveSheet.Pictures.Insert(dirPath & strFileName).Select リンク画像 (11)になっているのではないでしょうか?
リンク貼り付けが問題になる場合は、貼り付け方を検討する必要があると思います。
このまま、リネームするのであれば、Typeを確認してみてはいかがでしょう。
Const conName As String = ""
Dim c As Long
Dim objShape As Object
For Each objShape In ActiveSheet.Shapes
Debug.Print objShape.Type ’を追加してイミディエイトウィンドウで確認(msoPictureは13です。)
If objShape.Type = msoPicture Then
c = c + 1
objShape.Name = conName & c
End If
Next
Qchan1962さん丁寧な回答ありがとうございます。
無事に自分のしたいマクロを組むことに成功しました。
説明不足なところが多くお手数をお掛けしました。
また近いうち質問することがあると思うので、
その際はまたよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像のビット数を変更する方法
-
vb.net 画像の透過について
-
イメージマップでマウスオーバ...
-
背景画像の繰り返しについて
-
uwcs のマクロで画像認識をして...
-
bmp形式の画像を色の深さを24ビ...
-
画像のピクセルデータの取得
-
Excel ユーザーフォームで表示...
-
【WPF】画像の切り替え
-
万華鏡
-
UWSC 画像判定と条件分岐について
-
【EXCEL VBA】ダブルクリックで...
-
画像の一部だけが点滅する画像...
-
「using Windows」でエラーが出る
-
PowerPoint VBA で画像の鮮明度...
-
マウスオンで画像を切り替える...
-
UWSCについて
-
JPEG画像のじわじわ表示は可能?
-
VB6での画像のサイズ変更に関して
-
UWSCでループ処理がうまくいき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画像のビット数を変更する方法
-
「using Windows」でエラーが出る
-
EXCEL VBA 複数のImageコントロ...
-
背景画像の繰り返しについて
-
Excel ユーザーフォームで表示...
-
【EXCEL VBA】ダブルクリックで...
-
jqueryスライダーを2段でスライ...
-
画像処理したBitmapをピクチャ...
-
uwscの画像認識に失敗します。
-
uwcs のマクロで画像認識をして...
-
VBAのユーザーフォームのイメー...
-
gif 画像上の ボタンに リン...
-
UWSCでループ処理がうまくいき...
-
UWSCの画像認識と条件分岐につ...
-
画像のピクセルデータの取得
-
画像比較
-
OpenCVでマスク処理で「ぼかし...
-
PowerPoint VBA で画像の鮮明度...
-
UWSCの色判定
-
UWSC 画像判定と条件分岐について
おすすめ情報
早速の回答ありがとうございます。
>画像保存名のままでナンバリングできません。オブジェクトだからなのでしょうか?
If objShape.Type = msoPicture Then は、画像ならとなっていますが、貼り付けたjpgは画像(13)と確定していますか?
→マクロ起動後の画像は「図13」のように確定しています
>ActiveSheet.Pictures.Insert(dirPath & strFileName).Select リンク画像 (11)になっているのではないでしょうか?
→回答を頂いたように、パス名と画像ファイルをしているのでリンク画像という扱いになります。
「挿入タブ」から「画像」を複数選択するような通常動作である場合、
最初の質問のマクロ「名前変更」が実行され
開いた順番に1から10にナンバーリングされます
のようにしたいです。説明不足で申し訳ありません。