|    | 
     ▼ようちゃん さん: 
>以前のレスを確認しました。 
>確かに私の質問内容と一緒ですね。その原因が分かりました。 
> 
>私とその方は別人ですが、一緒に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 
 
 | 
     
    
   |