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