|
▼ようちゃん さん:
>以前のレスを確認しました。
>確かに私の質問内容と一緒ですね。その原因が分かりました。
>
>私とその方は別人ですが、一緒にVBAを勉強している仲間でした。
>お互い先生から同じ課題を出されているのですが、
>コードがなかなかわからなかったところ、
>このサイトを見つけたため、別々に質問してしまったようです。
>不愉快な思いをさせてしまい、誠に申し訳ありませんでした。
>私が以前のレスを事前に確認しておりましたら、
>このようなことにはならなかったと反省しております。
>本当に申し訳ございません。。。
以下を試してみてください。
始めに、画像のある「Folderを指定」します。これまでのコードは
C:\ となってましたが、↓ではdesktopに変更してあります。
また、BrowseForFolder のツリーにFolder名だけでなく ファイル名
までも表示することがオプションを付け加えることにより、可能に
なります。
フォルダが選択されたら、Dir関数のLoopで フォルダ内のすべての
ファイルを検索し、そのうちファイル拡張子が <.jpeg><.jpg><.gif>
のファイルだけ シートのA列に「図の挿入」をします。
Excel2003までは 貼り付け先セルをアクティブにしておけば、その位置
に貼り付くのですけど、Excel2007 なのでそうなりません。ウィンドウ
の真ん中に貼り付けてから、 .Left .Top を指定しなおして目的のセルに
移動します。
貼り付けセルは最初 [A10]セルで、あとは 20行ずつ下に移動していき
ます。
貼り付ける画像の「高さ方向のサイズ」は、もし元の画像がセル15行
分より大きかったら、セル15行分に縮小しています。縦横比は固定です。
貼り付け作業は 独立したプロシージャで行ってます。
画像を貼り付けたら、そのセルのF列の位置に 貼り付けた画像名 を
書き込みます(J列だと、離れていたので)。
...などなど、いろいろ、勝手に仕様を変更しています。
コードを読んで、そちらの仕様に変更してください。
Sub PasteDirImage()
'フォルダ選択
Dim oFolder As Object
Const BIF_RETURNNONLYFSDIRS = &H1 'ディレクトリのみ選択可
Const BIF_EDITBOX = &H10 'アイテム名入力用のEdit_boxを表示
Const BIF_BROWSEINCLUDEFILES = &H4000 'ファイルも表示して選択できる
Dim hWnd As Long
Dim sPath As String
hWnd = Application.hWnd
Set oFolder = CreateObject("Shell.Application") _
.BrowseForFolder _
(hWnd, _
"フォルダを選択して下さい", _
BIF_RETURNNONLYFSDIRS Or BIF_EDITBOX, _
CreateObject("WScript.Shell").Specialfolders("desktop"))
If (oFolder Is Nothing) Then Exit Sub
sPath = oFolder.Self.Path & "\"
' Dirで指定フォルダ内をLoop 画像をA列に貼り付け
Dim fileName As String
Dim c As Range
Dim pos As Integer
Dim szoom
szoom = ActiveWindow.Zoom
ActiveWindow.Zoom = 100
'最初の画像貼り付けセル
Set c = [A10]
fileName = Dir$(sPath & "*.*")
Do Until Len(fileName) = 0
' ファイル拡張子の判別
pos = InStrRev(fileName, ".")
If pos > 0 Then
Select Case LCase$(Mid$(fileName, pos))
Case ".jpeg", ".jpg", ".gif"
c.Select
'画像貼り付け(図の挿入)
PasteImage sPath & fileName, c.Resize(15)
Set c = c.Offset(20) '次の画像貼り付け位置
End Select
End If
fileName = Dir()
Loop
ActiveWindow.Zoom = szoom
MsgBox "画像の読込みが終了しました"
End Sub
'// 画像貼り付け(図の挿入) F列に 画像名
Private Sub PasteImage(fileName$, c As Range)
Dim ratio As Double
With ActiveSheet.Pictures.Insert(fileName).ShapeRange
.Left = c.Left
.Top = c.Top
.LockAspectRatio = True
' 画像が大きい場合、画像サイズをセル高さに合わせる
ratio = c.Height / .Height
If ratio < 1# Then .Height = .Height * ratio
End With
c.Range("F1").Value = fileName 'または Dir$(filename)
End Sub
|
|