[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『画像貼り付けについて』(emiko)
複数のフォルダがあり、フォルダ内に入っている写真をEXCELに貼り付けて
フォルダごとに保存していくマクロを実行したいと考えています。
フォルダに入っている名前がバラバラの写真jpg(最大6枚)を自動で貼り付ける
マクロを組んでいて、セル【J27】【K27】【L27】【J39】【K39】【L39】に
貼り付けて保存したいと考えています。
色々と調べたりして作成しているのですがうまくいきません。
ご教授宜しくお願いします。
下記がコードです。
Dim fpath As String, fname As String, tname As String Dim x As Long, y As Long
Application.ScreenUpdating = False fpath = "C:\" 'CドライブのDフォルダ内 tmpath = fpath & "d\" & (j.Cells(i, 1).Value) & "\" ’セル名前と一致しているファルダ fname = Dir(tmpath & "*.jpg", vbNormal) tname = tmpath & fname y = 10 x = 10
Do Until fname = ""
If y < 13 Then
s.Cells(27, y).Select With s.Pictures.Insert(tname) .Left = Selection.Left .Top = Selection.Top .Width = Selection.Width .Height = Selection.Height End With y = y + 1
Else
s.Cells(39, x).Select With s.Pictures.Insert(tname) .Left = Selection.Left .Top = Selection.Top .Width = Selection.Width .Height = Selection.Height End With x = x + 1 End If
fname = Dir()
Loop
'Next x Application.ScreenUpdating = True
w.SaveAs (p & "\E\" & j.Cells(i, 1).Value & ".xlsx") ’Eフォルダに名前をつけてxlsxで保存 w.Close Next i
宜しくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
このコードは先頭から最後までのフルセットですか?
> tmpath = fpath & "d\" & (j.Cells(i, 1).Value) & "\" ’セル名前と一致しているファルダ
j.Cells とありますから j はシートオブジェクト? でも、それを格納しているところがありません。 i は 行番号変数でしょうけど、具体的にはどこで、何をセットしているのでしょうか?
まぁ、それはそれとして。
>うまくいきません。
うまくいかない とは、具体的には?
・どこかでエラーになる? ・画像が張りつかない? ・張り付くけど、思った場所に貼りつかない?
等々、いろんな 『うまくいかない』状態がありますので。
それを、回答側で、コードをよ〜く読んだり、さらには実行してみて、どこがうまくいかないかを見つけなさい というのは いささか・・・(コード自体が、中途半端で For/Netx の For が見えませんし)
( β) 2017/02/19(日) 11:34
状況を具体的に説明してもらい、コードも、ちゃんとフルセットアップしてもらえれば 皆さんから回答がつくと思いますが、それとは別に。
コードをデバッグするうえでも、きちんとインデントをつけましょう。 アップされた部分だけでも以下のようになっていたら、ロジックが追いかけやすいでしょ?
また、コードがフルセットではないので、もしかしたら見えていないところで規定されているのかもしれませんが 変数はすべて定義しましょう。そのためにもモジュール先頭には必ず Option Explicit を記述しましょう。 VBE画面のツール->オプション->編集タブ で 変数の宣言を強制する(R) にチェックしておくと モジュールを挿入した時に自動的に記述されます。
Option Explicit なしで、かつ未定義の変数を使ってコードを書くと、記述ミスによるトラブルが発生し しかも、その発見に時間がかかるという、無駄なことが発生しますので。
Dim fpath As String, fname As String, tname As String Dim x As Long, y As Long Dim i As Long Dim j As Worksheet
Application.ScreenUpdating = False fpath = "C:\" 'CドライブのDフォルダ内 tmpath = fpath & "d\" & (j.Cells(i, 1).Value) & "\" 'セル名前と一致しているファルダ fname = Dir(tmpath & "*.jpg", vbNormal) tname = tmpath & fname y = 10 x = 10
Do Until fname = ""
If y < 13 Then
s.Cells(27, y).Select With s.Pictures.Insert(tname) .Left = Selection.Left .Top = Selection.Top .Width = Selection.Width .Height = Selection.Height End With y = y + 1
Else
s.Cells(39, x).Select With s.Pictures.Insert(tname) .Left = Selection.Left .Top = Selection.Top .Width = Selection.Width .Height = Selection.Height End With x = x + 1 End If
fname = Dir()
Loop
'Next x Application.ScreenUpdating = True
w.SaveAs (p & "\E\" & j.Cells(i, 1).Value & ".xlsx") 'Eフォルダに名前をつけてxlsxで保存 w.Close Next i
( β) 2017/02/19(日) 11:53
私の知る限り、サロン、質問箱、mougでも同じ質問をしてるんですね。
サロンはマルチ禁止なので、マナー違反です。
他の掲示板も基本回答者は共通の人が多いので、βさんから回答もついてるので、 他の掲示板はこちらで続ける旨を明記して解決済みにしてはどうでしょうか。
(sy) 2017/02/19(日) 12:08
Dim AdrStr As String, Adr As Variant Dim i As Long, j As Long, iMax As Long Dim wPath As String Dim wb As Workbook Dim ws As Worksheet, oWs As Worksheet Dim wx As Double, wy As Double Dim Pic As Variant, MyName As Variant, wName As String Dim flg As Boolean
'写真貼付先セルの設定 AdrStr = "A1,B1,C1,A2,B2,C2" Adr = Split(AdrStr, ",")
Set ws = ThisWorkbook.Worksheets("フォルダ名") iMax = ws.Range("A" & Rows.Count).End(xlUp).Row For i = 2 To iMax 'フォルダ名の取得ループ wPath = ThisWorkbook.Path & "\D\" & ws.Range("A" & i) MyName = Dir(wPath & "\", vbNormal) j = 0: flg = False Do While MyName <> "" ' ループを開始します。 If MyName <> "." And MyName <> ".." And MyName Like "*.jpg" Then j = j + 1 If j > 6 Then Exit Do '6枚を超える場合抜ける If j = 1 Then Set wb = Workbooks.Add ThisWorkbook.Worksheets("写真").Copy Before:=wb.Worksheets(1) Set oWs = wb.Worksheets("写真") flg = True End If wName = wPath & "\" & MyName '写真の縦横比により大きさを決定 Set Pic = LoadPicture(wName) wx = ThisWorkbook.Worksheets("写真").Range(Adr(0)).Width wy = CLng(CDbl(Pic.Height) * 24 / 635) * wx / CLng(CDbl(Pic.Width) * 24 / 635) oWs.Shapes.AddPicture wName, True, True, oWs.Range(Adr(j - 1)).Left, oWs.Range(Adr(j - 1)).Top, wx, wy oWs.Range(Adr(j - 1)).Value = MyName End If MyName = Dir Loop If flg Then '写真ブックの保存 wb.SaveAs ThisWorkbook.Path & "\E\" & ws.Range("A" & i) & ".xlsx" wb.Close End If Next i End Sub
(ななし) 2017/02/20(月) 10:35
https://support.microsoft.com/ja-jp/help/2396509
(ななし) 2017/02/20(月) 10:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.