マクロ記録で写真の挿入を探ってみます。
1.記録してみよう
開発のタブから、マクロ記録で実際の操作を記録します。
下記、実際の操作と簡単な解説です。
https://www.youtube.com/watch?v=wIu31e36Qew
2.コードを見てみよう
次に記録されたコードを確認します。
プロパティやメソッドがわかります。
Sub Macro1() Range("C2").Select ActiveSheet.Pictures.Insert("D:\VBA\IMG_0107.JPG").Select Range("A5").Select End Sub
写真の追加は、 .Pictures.Insert("ファイル名") 無事に調べることができました。
3.コードを変えてテストしてみよう
確認ついでに、変更できそうな部分を変えてテストしてみます
ここでは、ファイル名を変えてみました。
4.記録された、プロパティやメソッドをググってみよう
googleで、記録されたプロパティやメソッドを検索すると、
先人が書いた記事が見つかります。
ここから、横に知識を広げてみたり。
4.1 .Pictures.Insert をキーワードに検索してみます
一番上の記事
Office TANAKA - Excel VBA Tips[画像を挿入する]
http://officetanaka.net/excel/vba/tips/tips174.htm
officetanaka.net
を見ると※上記サイトから下記のソースを引用しています。
Sub Macro10() With ActiveSheet.Pictures.Insert("C:\Work\Sample1.jpg") .Top = Range("B3").Top .Left = Range("B3").Left .Height = Range("B3:B12").Height End With End Sub
おっ、.Height で 挿入画像の高さ指定ができそうです。
5.積み残しの課題に応用してみる
.Height で 高さ指定ができそうなので、使ってみます。
前回の積み残し、
ken3memo.hatenablog.com
上記コードに.Height で 挿入画像の高さ指定 を追加してみます。
'Outlook で メールに添付された写真をExcelに貼る 'サブフォルダ ここでは 写真テスト 固定です の 受信メール読み込むサンプル '件名と添付ファイル名(複数)を取り出す(表示する) '添付ファイルを固定の D:\VBA\ に書き出すテスト '新規起動したExcelブック・シートに書き込むテスト Sub outlook_test20190527_001() 'Excel 起動処理 Dim objEXCEL As Excel.Application 'アプリケーションを入れる箱 Set objEXCEL = CreateObject("Excel.Application") 'エクセルのアプリケーションを作る objEXCEL.Visible = True '可視、見えるようにする。お約束/呪文? objEXCEL.UserControl = True 'マクロ終了後、ユーザー操作可能とする。※最近見かけないのでなくていいかも objEXCEL.Workbooks.Add '新規のブック作成 objEXCEL.Sheets.Add '新規のシート追加 'サブフォルダからメールを読み込みながら、Excelへ添付画像を貼り付ける Dim oNamespace As NameSpace Dim oFolder As Outlook.Folder 'フォルダー ' NameSpace オブジェクトへの参照を取得します。 Set oNamespace = Application.GetNamespace("MAPI") ' 既定のフォルダへの参照を取得し、フォルダを表示します。 Set oFolder = oNamespace.GetDefaultFolder(olFolderInbox) '受信トレイを指定 oFolder.Display '選択したフォルダーの表示 Dim mITEM As Outlook.MailItem 'メールアイテム Dim oAttachment As Outlook.Attachment 'Attachment 添付 アタッチメント Dim n As Integer 'n件目の写真 Dim yROW As Integer 'セットする行数 'テストで名前の表示 Debug.Print oFolder.Name n = 0 '処理件数の初期化 'メールアイテムの処理 サブフォルダーを.Folders("写真テスト").Itemsで指定 For Each mITEM In oFolder.Folders("写真テスト").Items 'アイテム数分ループ '↑代入が終わったので、各プロパティに mITEM.XXXX で アクセスする 'デバッグでイミディエイトに表示 Debug.Print "件名:" & mITEM.Subject '件名表示 'MsgBox "件名:" & mITEM.Subject & "処理" '添付ファイルの処理 ※添付ファイルは複数あるよ For Each oAttachment In mITEM.Attachments 'メールの添付複数.Attachments '添付ファイルのファイル名が、 oAttachment.FileNameでわかります。 Debug.Print ".FileName " & oAttachment.FileName '拡張子が.jpgだけ処理します If Right(oAttachment.FileName, 4) = ".jpg" Or Right(oAttachment.FileName, 4) = ".JPG" Then 'Dドライブの固定フォルダ D:\VBA\ に テストで保存してます '自分の環境で、テンポラリのフォルダを作ってください oAttachment.SaveAsFile "d:\VBA\" & oAttachment.FileName '↑.SaveAsFile "ドライブ:\フォルダー\ファイル名.xxx" で書き込めます '↑で、書き込んだファイルをExcel↓で読み込みます DoEvents yROW = n * 10 + 1 'セットする行位置 ※1 苦肉の策で50行単位にセット改善する objEXCEL.Cells(yROW, 1) = "件名:" & mITEM.Subject '件名セット objEXCEL.Cells(yROW + 1, 1).Select '写真のセット位置 '保存されたファイル名の写真を挿入する。 'Office TANAKA - Excel VBA Tips[画像を挿入する] ' http://officetanaka.net/excel/vba/tips/tips174.htm を参考にしました With objEXCEL.ActiveSheet.Pictures.Insert("d:\VBA\" & oAttachment.FileName) .Height = 100 .Left = 0 End With objEXCEL.Cells(yROW, 1).Select '※2 ここで.jpgファイルを消す処理を入れないと、処理済みのゴミがたまるかな n = n + 1 '最後に処理件数を増やす End If Next Debug.Print "" Next '使用したオブジェクトの解放 = Nothing Set mITEM = Nothing Application.ActiveExplorer.Close '新しく開いてしまったフォルダーを閉じる Set oFolder = Nothing Set oNamespace = Nothing End Sub
終わりの挨拶
こんな感じで(どんな感じだよ・・・)
マクロ記録からプロパティやメソッドを調べて、
google検索・ググって先人の記事を参考にする。
そんな流れで調べる方法もあるので、
少しでも、一つでも
プログラム作りのヒントとなれば幸いです。 三流プログラマー Ken3