當前位置:首頁 > 科技 > 正文

【代工案例001】Word VBA批量插入圖片

▎具體需求

手裡面有上千個文件夾,每個文件夾裡面包含2張照片,我們需要把這些圖片插入到word文檔的表格中。每3個文件夾作為一頁

文件夾示意


文件夾内部圖片

最終效果

▎思路分析

首先需要獲取文件夾的個數,根據文件夾個數确定一下word文檔的表格總行數。接着插入空的表格,向表格裡面寫内容,并且插入圖片。

▎源代碼

實現功能的源代碼在下方,由于文件隐私,不再推送原始附件。可以從下面的源代碼中獲取思路。

Sub 執行() If ActiveDocument.Tables.Count = 1 Then '删除上次數據 ActiveDocument.Tables(1).Delete End If '//獲取文件夾,存入數組 Dim kr() Set fso = CreateObject("scripting.filesystemobject") With Application.FileDialog(msoFileDialogFolderPicker) If .Show Then PathSht = .SelectedItems(1) Else Exit Sub End With Set f_num = fso.getfolder(PathSht) For Each fl In f_num.subfolders i = i + 1 ReDim Preserve kr(1 To i) kr(i) = fl.Path Next '//開始新建表格 tbl_rowcount = UBound(kr) + Int(UBound(kr) / 3) + 1 Dim tbl As Table Set tbl = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=tbl_rowcount, NumColumns:=4) '新建表格 tbl.Style = "網格型" Set tbl = ActiveDocument.Tables(1) tbl.Columns(1).Width = 1.27 * 28.35 '設置表格各列的列寬 tbl.Columns(2).Width = 2.13 * 28.35 tbl.Columns(3).Width = 3.3 * 28.35 tbl.Columns(4).Width = 11.58 * 28.35 tbl.Rows.Alignment = wdAlignRowCenter '居中對齊 tbl.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter '文字垂直居中 '//開始插入圖片 For i = 1 To tbl_rowcount '對Word中的表格中的行進行循環。 If i Mod 4 = 1 Then '當表格的行号除以4的餘數是1的時候,就是标題行。 tbl.Rows(i).Range.Font.Bold = True '字體加粗 tbl.Cell(i, 1).Range.Text = "序号" tbl.Cell(i, 2).Range.Text = "發布形式" tbl.Cell(i, 3).Range.Text = "線路/車牌号" tbl.Cell(i, 4).Range.Text = "驗收照片" tbl.Rows(i).Height = 1.9 * 28.35 '設置标題行行高 Else p = p + 1 fod_index = fod_index + 1 tbl.Cell(i, 1).Range.Text = p tbl.Cell(i, 2).Range.Text = "司機背闆" srr = Split(kr(fod_index), "\") tbl.Cell(i, 3).Range.Text = srr(UBound(srr)) tbl.Rows(i).Height = 6.4 * 28.35 Dim shp As InlineShape pic = Dir(kr(fod_index) & "\*.JPG") tbl.Cell(i, 4).Range.Select Do While pic <> "" 'Do While循環插入圖片 Set shp = Selection.Range.InlineShapes.AddPicture(FileName:=kr(fod_index) & "\" & pic) shp.Height = 6 * 28.35 shp.Width = (10 / 2) * 28.35 pic = Dir tbl.Cell(i, 4).Range.Select '選中該單元格,為了下一步光标定位到單元格内部 Selection.EndKey wdLine Selection.TypeText " " '設置圖片間隔 Loop End If Next MsgBox "完成!"End Sub


Function getfol()'該函數的作用:彈出對話框提示用戶選擇文件夾,并且返回該文件夾路徑。'如果用戶選擇了取消,則返回空值 Dim PathSht As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show Then PathSht = .SelectedItems(1) Else PathSht = "" Exit Function End With getfol = PathSht & IIf(Right(PathSht, 1) = "\", "", "\")End Function

▎知識點

  • 獲取子文件夾

    利用FSO對象,獲取子文件夾,這個代碼很常用。

Set fso = CreateObject("scripting.filesystemobject")Setf_num=fso.getfolder(PathSht)ForEachflInf_num.subfoldersmsgboxfl.nameNext
  • Word VBA新建表格

Word VBA中很大一部分代碼,都可以通過錄制宏獲取。比如下方的代碼。

Sub Add_table()'新建一個3行4列的表格 Set tbl = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=3, NumColumns:=4) tbl.Style = "網格型"End Sub
  • Word中的單位

    行高列寬默認是磅。如果是厘米,需要轉化一下。轉化關系如下:

    1磅約等于0.03527厘米,1厘米約等于28.35磅。

你可能想看:

有話要說...

取消
掃碼支持 支付碼