AI又來救援!批次將多個PowerPoint檔的第1頁儲存為PNG圖檔

更新 發佈閱讀 14 分鐘

每一個學期課程結束時,我都必須完成一項既固定又繁重的工作:將數百位學生繳交的 PowerPoint 作品逐一開啟,並把每個檔案的第一頁另存為 PNG 圖檔。過去這項流程完全仰賴人工操作,不僅需要反覆點擊、切換檔案,還容易因疲勞而出錯,整體而言相當耗時又耗費心力。

如今透過 AI 工具的協助,這項原本高度重複且低效率的工作得以大幅優化。AI 能夠自動批次處理檔案、快速擷取指定頁面並轉換成圖檔,使整個流程更加流暢且穩定。相較於以往,實際花費的時間與人工作業步驟都顯著減少,讓我能將更多心力投入在教學回饋與課程優化等更具價值的工作上。

raw-image

我是利用 ChatGPT 產生一個 VBA 程式,提示詞:
請提供我 PowerPoint 使用的 VBA 程式碼,功能:把多個 PowerPoint 簡報檔裡的第一頁儲存為一個 PNG 圖檔,要求:
1.可以指定 PowerPoint 檔來源資料夾。
2.可以指定 PNG 圖檔儲存資料夾。
3.PNG 圖檔以原 PowerPoint 檔案相同檔名命名。

raw-image

複製這段程式碼(ChatGPT 產生的 VBA 程式碼放在文章最末)。

接著,準備好這上百個 PowerPoint 檔:

raw-image

接著,開啟一個全新的 PowerPoint 檔,使用快速鍵: Alt + F11,以進入 VBA 編輯器。

raw-image

點選功能表:插入/模組,貼上先前複製的程式碼。

raw-image

回到 PowerPoint 中,使用快速鍵:Alt + F8,選取巨集指令(本例:ExportFirstSlideToPNG_Batch_PickFolders),再點選:執行。

raw-image

選取 PowerPoint 所在的資料夾,再選取圖檔要儲存的資料夾。

raw-image

2 分鐘的時間就做完幾個小時要做的事,真的是省時又力。太感謝 AI 啦!真是教師的好幫手。

raw-image

VBA 完整程式

Option Explicit

' ====== 入口:選資料夾後匯入,每張圖一張投影片 ======
Public Sub ImportPictures_OnePerSlide()
Dim folderPath As String
folderPath = PickFolder()
If folderPath = "" Then Exit Sub

Dim files As Collection
Set files = GetImageFilesSorted(folderPath)

If files.Count = 0 Then
MsgBox "此資料夾找不到圖片檔(jpg/png/gif/bmp/tif/webp)。", vbExclamation
Exit Sub
End If

Dim pres As Presentation
Set pres = ActivePresentation

Dim i As Long
For i = 1 To files.Count
Dim sld As Slide
Set sld = pres.Slides.Add(pres.Slides.Count + 1, ppLayoutBlank)

Dim shp As Shape
Set shp = sld.Shapes.AddPicture( _
FileName:=CStr(files(i)), _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=0, Top:=0, Width:=-1, Height:=-1)

' 你可以二選一:
FitPictureContain shp, sld ' 完整顯示(不裁切),等比例縮放置中(推薦)
'FitPictureCover shp, sld ' 滿版填滿(會裁切),等比例縮放後裁切置中
Next i

MsgBox "完成!已匯入 " & files.Count & " 張圖片。", vbInformation
End Sub

' ====== 等比例縮放:完整顯示(Contain),不裁切,置中 ======
Private Sub FitPictureContain(ByVal pic As Shape, ByVal sld As Slide)
Dim sw As Single, sh As Single
sw = sld.Parent.PageSetup.SlideWidth
sh = sld.Parent.PageSetup.SlideHeight

pic.LockAspectRatio = msoTrue

' 先以寬為基準
pic.Width = sw
' 若高度超出,改以高為基準
If pic.Height > sh Then
pic.Height = sh
End If

pic.Left = (sw - pic.Width) / 2
pic.Top = (sh - pic.Height) / 2
End Sub

' ====== 等比例縮放:滿版填滿(Cover),會裁切,置中 ======
Private Sub FitPictureCover(ByVal pic As Shape, ByVal sld As Slide)
Dim sw As Single, sh As Single
sw = sld.Parent.PageSetup.SlideWidth
sh = sld.Parent.PageSetup.SlideHeight

pic.LockAspectRatio = msoTrue

' 先以寬填滿
pic.Width = sw
' 若高度不足,改以高填滿
If pic.Height < sh Then
pic.Height = sh
End If

pic.Left = (sw - pic.Width) / 2
pic.Top = (sh - pic.Height) / 2

' 裁切到投影片大小
With pic.PictureFormat.Crop
.Left = IIf(pic.Width > sw, (pic.Width - sw) / 2, 0)
.Right = IIf(pic.Width > sw, (pic.Width - sw) / 2, 0)
.Top = IIf(pic.Height > sh, (pic.Height - sh) / 2, 0)
.Bottom = IIf(pic.Height > sh, (pic.Height - sh) / 2, 0)
End With

pic.Left = 0
pic.Top = 0
pic.Width = sw
pic.Height = sh
End Sub

' ====== 取得資料夾內圖片檔(依檔名排序) ======
Private Function GetImageFilesSorted(ByVal folderPath As String) As Collection
Dim col As New Collection

Dim fso As Object, folder As Object, file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)

' 收集圖片檔
For Each file In folder.Files
Dim ext As String
ext = LCase$(fso.GetExtensionName(file.Name))

If ext = "jpg" Or ext = "jpeg" Or ext = "png" Or ext = "gif" Or _
ext = "bmp" Or ext = "tif" Or ext = "tiff" Or ext = "webp" Then
col.Add file.Path
End If
Next file

' 轉陣列排序(字典序)
Dim arr() As String
Dim i As Long
If col.Count > 0 Then
ReDim arr(1 To col.Count)
For i = 1 To col.Count
arr(i) = CStr(col(i))
Next i
QuickSortStrings arr, LBound(arr), UBound(arr)

Dim sorted As New Collection
For i = LBound(arr) To UBound(arr)
sorted.Add arr(i)
Next i
Set GetImageFilesSorted = sorted
Else
Set GetImageFilesSorted = col
End If
End Function

' ====== 字串 QuickSort(檔名排序用) ======
Private Sub QuickSortStrings(ByRef arr() As String, ByVal first As Long, ByVal last As Long)
Dim i As Long, j As Long
Dim pivot As String, tmp As String

i = first
j = last
pivot = arr((first + last) \ 2)

Do While i <= j
Do While arr(i) < pivot: i = i + 1: Loop
Do While arr(j) > pivot: j = j - 1: Loop
If i <= j Then
tmp = arr(i)
arr(i) = arr(j)
arr(j) = tmp
i = i + 1
j = j - 1
End If
Loop

If first < j Then QuickSortStrings arr, first, j
If i < last Then QuickSortStrings arr, i, last
End Sub

' ====== 選資料夾(Windows / Office 常用對話框) ======
Private Function PickFolder() As String
On Error GoTo EH

Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "請選擇圖片資料夾"
.AllowMultiSelect = False
If .Show <> -1 Then
PickFolder = ""
Else
PickFolder = .SelectedItems(1)
End If
End With
Exit Function

EH:
PickFolder = ""
End Function
留言
avatar-img
學不完.教不停.用不盡
34會員
83內容數
分享個人電腦教學,回答網友提問,解決資料處理與設計問題。
2026/02/05
本篇要整理學習時最常見、也最實用的筆記法,以「適合什麼情境」與「核心特色」為重點,並且結合將資料整理成各種筆記法的資訊圖表做為實例。在此,要以新出版的2026美國人飲食指南 PDF 檔為例,建構各種筆記法的資訊圖表。
Thumbnail
2026/02/05
本篇要整理學習時最常見、也最實用的筆記法,以「適合什麼情境」與「核心特色」為重點,並且結合將資料整理成各種筆記法的資訊圖表做為實例。在此,要以新出版的2026美國人飲食指南 PDF 檔為例,建構各種筆記法的資訊圖表。
Thumbnail
2026/02/05
隨著生成式 AI 不再只處理文字,結構化知識如何被精確、可視化地表達變得格外重要。由 OpenAI 推出的 Prism,正是為了「嚴謹內容呈現」而生的工具,特別適合數學、理工、科學與教學場景。
Thumbnail
2026/02/05
隨著生成式 AI 不再只處理文字,結構化知識如何被精確、可視化地表達變得格外重要。由 OpenAI 推出的 Prism,正是為了「嚴謹內容呈現」而生的工具,特別適合數學、理工、科學與教學場景。
Thumbnail
2026/02/05
在與 AI 協作的過程中,「提示詞」是無可迴避的核心關鍵。可以說,你下的指令品質,直接決定了 AI 輸出的深度與準確度。在 AI 驅動的全新時代,與 Gemini 進行有效「對話」,不再只是丟出問題,而是建立一套清楚、有邏輯且可被理解的指令方式。 為了幫助使用者更精準地駕馭 AI,Gemini 發
Thumbnail
2026/02/05
在與 AI 協作的過程中,「提示詞」是無可迴避的核心關鍵。可以說,你下的指令品質,直接決定了 AI 輸出的深度與準確度。在 AI 驅動的全新時代,與 Gemini 進行有效「對話」,不再只是丟出問題,而是建立一套清楚、有邏輯且可被理解的指令方式。 為了幫助使用者更精準地駕馭 AI,Gemini 發
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
提供一個Excel VBA程式,結合qpdf工具,實現對多個PDF檔案設定不同開啟密碼的功能。程式支援批量處理、使用者密碼和擁有者密碼設定、新增加密後檔案字尾等功能,並確保原始檔案不被修改。文章詳細說明瞭操作步驟、軟體下載和注意事項,也提供了相關資源連結。
Thumbnail
提供一個Excel VBA程式,結合qpdf工具,實現對多個PDF檔案設定不同開啟密碼的功能。程式支援批量處理、使用者密碼和擁有者密碼設定、新增加密後檔案字尾等功能,並確保原始檔案不被修改。文章詳細說明瞭操作步驟、軟體下載和注意事項,也提供了相關資源連結。
Thumbnail
這篇文章探討一個在 FB Excel 社團提出的關於【名代號】問題,具體來說是【SU+HM = WE+ES】這個謎題的解法。此文章最後也提供 Excel VBA 中 Mid 和 Mid$ 的差異說明。
Thumbnail
這篇文章探討一個在 FB Excel 社團提出的關於【名代號】問題,具體來說是【SU+HM = WE+ES】這個謎題的解法。此文章最後也提供 Excel VBA 中 Mid 和 Mid$ 的差異說明。
Thumbnail
圓角矩形在簡報設計中,常被用於多項資訊的結構排版,或是在總結頁顯示各項要點。雖然我們可以輕易透過拉動黃點來調整圓角的大小,但軟體中沒有辦法設定圓角的數值,各個大小矩形之間要統一圓角也是惱人的程序。ChatGPT可以生成VBA程式碼來自動化圓角的修正,不用編程經驗或是知識,只需要將詳細的要求列出。
Thumbnail
圓角矩形在簡報設計中,常被用於多項資訊的結構排版,或是在總結頁顯示各項要點。雖然我們可以輕易透過拉動黃點來調整圓角的大小,但軟體中沒有辦法設定圓角的數值,各個大小矩形之間要統一圓角也是惱人的程序。ChatGPT可以生成VBA程式碼來自動化圓角的修正,不用編程經驗或是知識,只需要將詳細的要求列出。
Thumbnail
本文探討如何使用 Excel VBA 和 正規表達式 來重新命名特定檔案名稱,針對檔名開頭特定字符及日期的情況進行處理。並討論過去的解決方案及 ChatGPT 4o 的應用,對比不同方法的效率與適用性。同時致敬於曾經幫助我的VBA前輩,探索技術演進的過程與重要性。
Thumbnail
本文探討如何使用 Excel VBA 和 正規表達式 來重新命名特定檔案名稱,針對檔名開頭特定字符及日期的情況進行處理。並討論過去的解決方案及 ChatGPT 4o 的應用,對比不同方法的效率與適用性。同時致敬於曾經幫助我的VBA前輩,探索技術演進的過程與重要性。
Thumbnail
這篇文章探討如何使用 VBA 來設計一個隨機生成不重覆的排班表,解決依據每日、每站、每人進行的排班需求。文章分享了設定人員、站點及工作日的基本步驟,並使用 AI - ChatGPT 4o 做為互動,最終產生了滿意的結果,並提供了一個 VBA設計完成 的影片 以及 免費的檔案下載。
Thumbnail
這篇文章探討如何使用 VBA 來設計一個隨機生成不重覆的排班表,解決依據每日、每站、每人進行的排班需求。文章分享了設定人員、站點及工作日的基本步驟,並使用 AI - ChatGPT 4o 做為互動,最終產生了滿意的結果,並提供了一個 VBA設計完成 的影片 以及 免費的檔案下載。
Thumbnail
本文介紹瞭如何使用 Power Query 和 Excel VBA 來將【矩陣資料】轉換為【結構化資料】的技巧。透過 Meiko 老師的教學視頻,讀者可以快速瞭解 Power Query 的用法。作者分享運用 Excel VBA 的 ListObject 進行表格的資料處理方法。
Thumbnail
本文介紹瞭如何使用 Power Query 和 Excel VBA 來將【矩陣資料】轉換為【結構化資料】的技巧。透過 Meiko 老師的教學視頻,讀者可以快速瞭解 Power Query 的用法。作者分享運用 Excel VBA 的 ListObject 進行表格的資料處理方法。
Thumbnail
這篇文章介紹如何使用VBA程式碼將【包含備註】的Excel檔案轉換為PDF檔。在研究這個問題時,作者花了3個小時多的時間,但後來發現了一個更簡單的方法,這讓作者感到震驚和懷疑人生。最後,作者強調使用他人的智慧來提高自己的能力。文章提供了相關參考文獻和圖片。
Thumbnail
這篇文章介紹如何使用VBA程式碼將【包含備註】的Excel檔案轉換為PDF檔。在研究這個問題時,作者花了3個小時多的時間,但後來發現了一個更簡單的方法,這讓作者感到震驚和懷疑人生。最後,作者強調使用他人的智慧來提高自己的能力。文章提供了相關參考文獻和圖片。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News