Excel VBA To Insert Multiple Images From A Folder To Worksheet
VBA Code -
Option Explicit
Private Sub
btnInsertPictures_Click()
    Dim photo As
Shape
    Dim ImgNameCol As
Integer, ImgCol As Integer
    Dim CCol As
Integer, TCol As Integer
    Dim CRow As
Integer, TRow As Integer
    Dim Ws As
Worksheet
    Dim imgno As
Integer
    imgno = 1
    Set Ws =
ActiveWorkbook.Sheets(Me.cmbSheets.Text)
    '************
delete all images **************
    Dim Shp As Shape
    For Each Shp In
Ws.Shapes
        If
VBA.Left(Shp.Name, 8) = "EmpImage" Then
       
    Shp.Delete
        End
If
    Next Shp
   
'*********************************************
    CRow =
Me.txtHeadingRow.Text
    TCol =
Ws.Cells(CRow, Columns.Count).End(xlToLeft).Column
    For CCol = 1 To
TCol
        If
Ws.Cells(CRow, CCol).Value = Me.cmbPicturesName.Text Then
       
    ImgNameCol = CCol
       
    GoTo EX1
        End
If
    Next CCol
EX1:
    For CCol = 1 To
TCol
        If
Ws.Cells(CRow, CCol).Value = Me.cmbImageColumn.Text Then
       
    ImgCol = CCol
       
    GoTo EX2
        End
If
    Next CCol
EX2:
    TRow =
Ws.Cells(Rows.Count, ImgNameCol).End(xlUp).Row
    Dim tmpCRow As
Long
    Dim Filename As
String
    For tmpCRow =
CRow + 1 To TRow
       
Filename = Me.txtImagePath.Text & "\" & Ws.Cells(tmpCRow,
ImgNameCol).Value & ".jpg"
        If
VBA.Dir(Filename) <> "" Then
       
    Set photo = Ws.Shapes.AddPicture(Filename, msoFalse, msoTrue,
Ws.Cells(tmpCRow, ImgCol).Left, Ws.Cells(tmpCRow, ImgCol).Top,
Ws.Cells(tmpCRow, ImgCol).Width, Ws.Cells(tmpCRow, ImgCol).Height)
       
Else
       
    Set photo = Ws.Shapes.AddPicture(Me.txtImagePath.Text &
"\No Image.jpg", msoFalse, msoTrue, Ws.Cells(tmpCRow, ImgCol).Left,
Ws.Cells(tmpCRow, ImgCol).Top, Ws.Cells(tmpCRow, ImgCol).Width,
Ws.Cells(tmpCRow, ImgCol).Height)
        End
If
       
With photo
       
    .Name = "EmpImage" & Ws.Cells(tmpCRow,
ImgNameCol).Value
       
   .LockAspectRatio = msoFalse
       
   .Placement = 1
        End
With
       
imgno = imgno + 1
    Next tmpCRow
    Ws.Activate
    Unload Me
    MsgBox
("Done")
End Sub
Private Sub
btnSelectImagePath_Click()
    Dim folderDialog
As FileDialog
    Dim
selectedFolder As Variant
    Set folderDialog
= Application.FileDialog(msoFileDialogFolderPicker)
   
folderDialog.Title = "Select a Folder"
    If
folderDialog.Show = -1 Then
       
selectedFolder = folderDialog.SelectedItems(1)
       
Me.txtImagePath.Text = selectedFolder
    End If
End Sub
Private Sub
txtHeadingRow_AfterUpdate()
   
Me.cmbImageColumn.Clear
   
Me.cmbPicturesName.Clear
    Dim ActSheet As
Worksheet
    Dim CRow As
Integer, CCol As Integer, TCol As Integer
    Set ActSheet = ActiveWorkbook.Sheets(Me.cmbSheets.Text)
    CRow =
Me.txtHeadingRow.Text
    TCol =
ActSheet.Cells(CRow, Columns.Count).End(xlToLeft).Column
    For CCol = 1 To
TCol
        If
ActSheet.Cells(CRow, CCol).Value <> "" Then
       
    Me.cmbImageColumn.AddItem (ActSheet.Cells(CRow, CCol).Value)
       
    Me.cmbPicturesName.AddItem (ActSheet.Cells(CRow, CCol).Value)
        End
If
    Next CCol
    If
Me.cmbImageColumn.ListCount > 0 Then
       
Me.cmbImageColumn.ListIndex = 0
       
Me.cmbPicturesName.ListIndex = 0
    End If
    
End Sub
Private Sub
UserForm_Initialize()
    Dim Ws As
Worksheet
   
Me.cmbSheets.Clear
    For Each Ws In
ActiveWorkbook.Worksheets
       
Me.cmbSheets.AddItem Ws.Name
    Next
    If
Me.cmbSheets.ListCount > 0 Then
       
Me.cmbSheets.ListIndex = 0
    End If
End Sub
Please Watch YouTube Video -
Comments
Post a Comment