misser wrote:
樓主,巨集我放進去囉(恕刪)


M大

有沒有辦法像之前有巨集1跟3那樣
可以有兩個快捷設定大小
(兩種照片格式)




目前先插入3張

版面會這樣


可能跟圖片大小有關

(確認跟照片有關,可能高度在小一點)



稍微把中間高度拉小就OK ,可能設定要改一下

第一個範例目前是沒有動嗎?
還是第一個範例也有巨集了呢?
anson_830701 wrote:
有沒有辦法像之前有巨集1跟3那樣
可以有兩個快捷設定大小

不解?2張的部分,您後來不是會在開啟視窗中直接選2張,所以我才改的啊?......現在改的這個合併單一巨集,會自動依您選一張或2張不同,做不同的處理.......就等於2種方式都還在啊。(之前是分2個巨集執行,現在是同一個,但會判斷1張或2張,做不同動作。)


anson_830701 wrote:
稍微把中間高度拉小就OK ,可能設定要改一下


因為沒有您的照片,沒有先做實際測試。不過現在要改高度也OK,樓主可以直接改看看?
1.按 Alt+F11,會打開巨集編輯視窗。
2.進入,會看到程式碼(沒有的話,先按左邊的Module1,應該就能看到)
3.修改:h_f = Selection.Range.Cells(1).Height - 10 '高度=表格格子高度-10
把-10改-20試試?(多減一點。)
圖示:


anson_830701 wrote:
第一個範例目前是沒有動嗎?
還是第一個範例也有巨集了呢?

呃,第一個範例,是哪個?不就只有這個嗎?(我漏掉了?)
我中午只有處理 109年度潭子區路燈相片-空白-有程式.doc 這個檔案喔。
Der,misser1
misser wrote:
不解?2張的部分,您(恕刪)




之前這樣我按巨集3 ,第二格兩張是OK的(有自動排好)

現在這樣


你的意思是第二格選兩張,它會自動變成像上面那樣嗎?
(救世會變成巨集3,自動塞兩張牌好)
因為這個的確可以選2張照片,但是他好像不會自動擺到格內
(我選兩張,格子會跑掉且沒看到選的照片)
《不知道是不適大小沒調好還要再調》

設定部分


原本-10改-20 之後左上要按儲存對吧?
我改-20再插入圖片,圖片好像跟原本一樣

不知道我哪邊錯了
anson_830701 wrote:
原本-10改-20 之後左上要按儲存對吧?


其實不用儲存,改了,再次執行就會生效(當然,檔案關閉前若沒存檔,改的部分下次再開就不會生效,還是未改前)
20是略估值,如果您懷疑沒改變,可以改成-50或更多,試試看。

anson_830701 wrote:
(我選兩張,格子會跑掉且沒看到選的照片)
《不知道是不適大小沒調好還要再調》

有可能。

要改回之前的2個巨集,也很簡單,我待會(或晚上在家)幫您再補一個檔案,改成舊的巨集方式(用您那個word檔),再給您試試?

~~其實最好的方法,就是樓主把您的照片丟個4~5張,我來試試,要調整數值到多少才合適。
(當然,不方便的話沒關係,我們還是先解決數值修改,或許問題就解決了。)
anson_830701 wrote:
目前遇到瓶頸
就是標題無法輸入


這是新問題喔?....之前好像沒聽到樓主提過,標題有問題。

anson_830701 wrote:
https://youtu.be/MTWw0VX8tP8

這可能得晚上在家才打開看囉~~sorry
Der,misser1
misser wrote:
其實不用儲存,改了,(恕刪)



[點擊下載]

再麻煩M大直接幫我改這個就好了
91頁的格子內能巨集

需求:
1.上面所說的兩個巨集
2.圖片不用到滿格(下面有貼範例)




麻煩你了 謝謝。
anson_830701 wrote:
目前遇到瓶頸
就是標題無法輸入


收到~~

這應該不是大問題,我們可以來做個處理。

不過處理之前,怕樓主等太急了.....我先把您今天丟的「路燈」檔案(有好多頁,一開始有放範例照),再下載一次(無巨集),然後把之前的巨集1、3放進去。(因為您說分2個巨集,是OK的。)

[檔案點擊下載]

您可以先試試?當作備用方案B?

我現在來處理您遇到的那個插入標題問題。(如果順利解決,那樓主就有方案A......有2個方案馬上可用的話,比較保險。)
Der,misser1
anson_830701 wrote:
再麻煩M大直接幫我改這個就好了
91頁的格子內能巨集


抱歉,剛才看到這樓~~所以上面那個就不用了,用下面這個新的:
[路燈相片-空白-2巨集沒滿格.zip,點擊下載]

不知道樓主要的沒滿格是多大,以下是內容測試:


如果樓主對這個「沒滿格」的結果還不滿意,就請按 Alt+F11 進入到巨集編輯視窗中,去修改寬高參數:


把 - 40 改 - 更多 或 -更少囉......

希望樓主能趕上完成工作~~
Der,misser1
misser wrote:
[路燈相片-空白-2巨集沒滿格.zip,點擊下載]


這個版本,讓您玩看看(需先建立表格)



Sub test()

Dim Open_jpg As Object, Jpg_File As String, i As Integer, j As Integer, r As Integer, c As Integer, n As Integer
Dim Row_h As Integer, Col_w As Integer, Jpg_Sort(1 To 5, 1 To 2) As String, Inline_Shape As InlineShape, shp As Shape
Dim AspectRatios As Single, Page_number As String, Max_Page As Integer, p As Integer


Max_Page = 90
Call clear_old_jpg(Max_Page)

'Application.ScreenUpdating = False
Page_number = InputBox("輸入要插入jpg的頁數1~" & Max_Page, "Page", 1)
If Page_number = "" Then Exit Sub
If CInt(Page_number) < 1 Or CInt(Page_number) > Max_Page Then Exit Sub

MsgBox "照片只能選3張 or 4張,插入時等比例縮放置中", vbOKOnly

For p = 1 To CInt(Page_number)

Set Open_jpg = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
retry:
With Open_jpg
.AllowMultiSelect = True
.Filters.Add "照片", "*.jpg", 1
If .Show = -1 And .SelectedItems.Count = 3 Or .SelectedItems.Count = 4 Then

For i = 1 To .SelectedItems.Count
Jpg_Sort(i, 1) = .SelectedItems(i)
Jpg_Sort(i, 2) = Shooting_Date(Jpg_Sort(i, 1), .InitialFileName, 12)
Next i

'拍照日期排序
'刪掉以下9行,可取消排序
For i = 1 To .SelectedItems.Count - 1
For j = i + 1 To .SelectedItems.Count
If Jpg_Sort(i, 2) > Jpg_Sort(j, 2) Then
Jpg_Sort(5, 1) = Jpg_Sort(i, 1): Jpg_Sort(5, 2) = Jpg_Sort(i, 2)
Jpg_Sort(i, 1) = Jpg_Sort(j, 1): Jpg_Sort(i, 2) = Jpg_Sort(j, 2)
Jpg_Sort(j, 1) = Jpg_Sort(5, 1): Jpg_Sort(j, 2) = Jpg_Sort(5, 2)
End If
Next j
Next i

'AddPicture
If .SelectedItems.Count = 4 And ActiveDocument.Tables(p).Rows(2).Cells.Count = 2 Then
ActiveDocument.Tables(p).Cell(2, 2).Split 1, 2
'插入2張jpg時,不要中間格線
ActiveDocument.Tables(p).Cell(2, 2).Borders(wdBorderRight).LineStyle = wdLineStyleNone
Else
If .SelectedItems.Count = 3 And ActiveDocument.Tables(p).Rows(2).Cells.Count = 3 Then ActiveDocument.Tables(p).Cell(2, 2).Merge mergeto:=ActiveDocument.Tables(p).Cell(2, 3)
End If

n = 0
For r = 1 To 3
For i = 2 To ActiveDocument.Tables(p).Rows(r).Cells.Count
n = n + 1
Row_h = ActiveDocument.Tables(p).Cell(r, i).Height
Col_w = ActiveDocument.Tables(p).Cell(r, i).Width

Set Inline_Shape = ActiveDocument.Tables(p).Cell(r, i).Range.InlineShapes.AddPicture(FileName:=Jpg_Sort(n, 1), LinkToFile:=False, SaveWithDocument:=True)
With Inline_Shape

AspectRatios = .Width / .Height
If .Height > Row_h Or .Width > Col_w Then
.Height = Row_h - 20
.Width = .Height * AspectRatios
End If

'center test
.Select
Set shp = .ConvertToShape
With shp
.LockAnchor = True
.LockAspectRatio = msoTrue
.Top = (Row_h - .Height) / 2
.Left = wdShapeCenter
End With

End With
Next i
Next r
Else
If .SelectedItems.Count = 0 Then
Set Open_jpg = Nothing
'Application.ScreenUpdating = True
Exit Sub
Else
MsgBox "只能選3張 or 4張", vbOKOnly
GoTo retry
End If
End If
End With

Next p

'Application.ScreenUpdating = True
Set Open_jpg = Nothing
Set Inline_Shape = Nothing
Set shp = Nothing


End Sub


Function Shooting_Date(JpgFile_name As String, JpgFile_path, n As Integer) 'n=12

Dim Shell_Obj, Jpg_Folder, Jpg_Item

Set Shell_Obj = CreateObject("Shell.Application")
Set Jpg_Folder = Shell_Obj.Namespace(JpgFile_path)
Set Jpg_Item = Jpg_Folder.ParseName(Replace(JpgFile_name, JpgFile_path, ""))

If Not Jpg_Item Is Nothing Then
Shooting_Date = Jpg_Folder.GetDetailsOf(Jpg_Item, n)
'Debug.Print Shooting_Date
'刪除不可見unicode字元
Shooting_Date = Replace(Shooting_Date, ChrW(8206), "")
Shooting_Date = Replace(Shooting_Date, ChrW(8207), "")
End If

If Shooting_Date = "" Then Shooting_Date = FileDateTime(JpgFile_name)
'如果照片沒拍攝日期,就改用修改日期代替
Debug.Print Shooting_Date

Set Shell_Obj = Nothing
Set Jpg_Folder = Nothing
Set Jpg_Item = Nothing

End Function


Sub clear_old_jpg(Page_number As Integer)
'使用逐格刪除,避免舊版word來不及處理、refresh
Dim r As Integer, i As Integer, p As Integer
Application.ScreenUpdating = False
On Error Resume Next
For p = 1 To Page_number
For r = 1 To 3
For i = 2 To ActiveDocument.Tables(p).Rows(r).Cells.Count
If ActiveDocument.Tables(p).Cell(r, i).Range.ShapeRange.Count > 0 Then
ActiveDocument.Tables(p).Cell(r, i).Range.ShapeRange.Delete
End If
Next i
Next r
Next p
Application.ScreenUpdating = True
Application.ScreenRefresh
End Sub





snare wrote:
這個版本,讓您玩看看(恕刪)


S大,您這進階版本,會先做刪除舊圖片的動作吧~~

我試了一下,明顯的好處是,在大量作業時,可以縮短不少時間(也是完成整頁插入)

不過,有個小小「問題」:如果存在的舊照片,是原本就用Word內建功能表的「插入」功能插入(不是由執行程式插入的)的話,好像是無法刪除?(或許是版本的問題?)

我試著在:Call clear_old_jpg(Max_Page) 這句的前面,加上幾行,來刪除上述的已存在圖片(用""取代存在圖片):

With Selection.Find
.Text = "^g"
.Replacement.Text = ""
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll

Call clear_old_jpg(Max_Page)
..............

當然,這很大部分是[多此一舉]....因為如果單純都用程式來執行一開始的插入,那刪除就正常不會有問題。(所以應該也不需要再去用原本內建的插入功能)

以上回報~~
Der,misser1
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 8)

今日熱門文章 網友點擊推薦!