Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11059 / 76734 ←次へ | 前へ→

【71216】Re:写真を指定して貼り付ける
発言  kanabun  - 12/2/10(金) 21:01 -

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

5 hits

【71205】写真を指定して貼り付ける ようちゃん 12/2/9(木) 15:50 質問
【71207】Re:写真を指定して貼り付ける kanabun 12/2/9(木) 19:05 発言
【71212】Re:写真を指定して貼り付ける ようちゃん 12/2/10(金) 15:56 回答
【71214】Re:写真を指定して貼り付ける kanabun 12/2/10(金) 18:55 発言
【71208】Re:写真を指定して貼り付ける kanabun 12/2/9(木) 20:12 発言
【71210】Re:写真を指定して貼り付ける UO3 12/2/9(木) 20:38 発言
【71215】Re:写真を指定して貼り付ける ようちゃん 12/2/10(金) 20:07 回答
【71216】Re:写真を指定して貼り付ける kanabun 12/2/10(金) 21:01 発言
【71217】Re:写真を指定して貼り付ける ようちゃん 12/2/10(金) 22:20 回答
【71220】Re:写真を指定して貼り付ける kanabun 12/2/11(土) 9:43 発言
【71229】Re:写真を指定して貼り付ける ようちゃん 12/2/11(土) 21:50 お礼

11059 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free