原書以 ConvertToTable 巨集示範:錄製巨集雖然能快速自動化,但會把特定工作表的固定範圍記進 VBA,直接套到其他工作表可能失敗;ChatGPT 可協助泛化與除錯。
A1:B6 對其他工作表造成的限制。UsedRange 泛化資料範圍。原始巨集把 Question 1 的 5 筆產品資料加標題,共 A1:B6,轉成 Table2 並把 Total Revenue 格式化為貨幣。當它套到更長的 Sales Trends 工作表時,只會轉換前 6 列。
| 原始巨集要素 | 原書內容 |
|---|---|
| 固定範圍 | A1:B6 |
| 固定表格名 | Table2 |
| 貨幣欄 | Table2[Total Revenue] |
| 快捷鍵 | Ctrl + Shift + T |
| 儲存格式 | .xlsm |
先錄製巨集,再把 VBA 貼給 ChatGPT,要求:使用 ActiveSheet、把固定 A1:B6 改成全部非空白儲存格、不要固定 Table 名稱。ChatGPT 先產生 UsedRange 版本,但原書記錄了兩輪錯誤:先有語法錯誤,接著執行時出現 Compile error: Named argument not found。最後將建立表格一行改成位置參數:
ws.ListObjects.Add xlSrcRange, rng, , xlYes
才成功。
| 版本 | 結果 |
|---|---|
| 錄製版 | 只處理固定 A1:B6,套到長工作表會漏掉第 7 列以後 |
| 第 1 次泛化 | VBA Editor 顯示語法錯誤 |
| 第 2 次泛化 | 編譯錯誤:Named argument not found |
| 最終修正版 | UsedRange • 位置參數建立 ListObject,成功套用到 Sales Trends |
這個案例最重要的不是「ChatGPT 會寫 VBA」,而是原書清楚展示它會連續產生錯誤。可靠流程必須是:生成 → VBA Editor 檢查 → 實際執行 → 把錯誤訊息回傳 → 再測試。沒有執行過的程式碼不能視為完成品。