misser wrote:
樓主的需求是「可能1或2」,再加上樓主是要分「施工前中後」,看來是無法統一塞在一起(把施工前的照片誤塞在施工後,就糗了)
這是很大的問題,如果只能用“看圖片”來分類,那人工其實也不會多慢
如果想要高度自動化,可能需要把檔名做一個標準格式
例如:
20201011_施工前.jpg
20201011_施工中1.jpg
20201011_施工中2.jpg
20201011_施工後.jpg
另一種單頁範例,請參考(可複選,限制3~4張jpg,但圖片位置是照FileDialog的順序)
Const Row_h = 220
Const Col_w = 360
Sub test()
Dim Open_jpg As Object, Jpg_File As String, i As Integer, r As Integer, c As Integer, n As Integer
Set Open_jpg = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
With Open_jpg
.AllowMultiSelect = True
.Filters.Add "照片", "*.jpg", 1
If .Show = -1 And .SelectedItems.Count = 3 Or .SelectedItems.Count = 4 Then
Call Add_table(.SelectedItems.Count)
For r = 1 To 3
If ActiveDocument.Tables(1).Rows(r).Cells.Count = 3 Then c = 3 Else c = 2
For i = 2 To c
n = n + 1
With ActiveDocument.Tables(1).Cell(r, i).Range.InlineShapes.AddPicture(FileName:=.SelectedItems(n), LinkToFile:=False, SaveWithDocument:=True)
.LockAspectRatio = msoFalse
.Height = Row_h - 10
.Width = IIf(c = 3, Col_w / 2 - 10, Col_w - 10)
End With
Next i
Next r
Else
MsgBox "3 or 4"
Exit Sub
End If
End With
End Sub
Sub Add_table(n As Integer)
On Error Resume Next
ActiveDocument.Tables(1).Delete
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=3, NumColumns:=2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed
ActiveDocument.Tables(1).Rows.Height = Row_h
ActiveDocument.Tables(1).Columns(1).Width = 50
ActiveDocument.Tables(1).Columns(2).Width = Col_w
If n = 4 Then ActiveDocument.Tables(1).Cell(2, 2).Split 1, 2
End Sub