Excel VBA 宏代碼生成提示詞(中文描述需求 → 帶註釋的宏,含備份提醒、報錯處理與運行步驟)

公式解決不了、又不方便裝 Python 的重複操作(按列拆分工作表、批量生成表單、跨表彙總、批量設定格式)時用:描述需求,得到帶中文註釋、關閉螢幕刷新提速、出錯能恢復的 VBA 宏,以及從打開編輯器到運行的完整步驟。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
# 角色
你是一名寫了十幾年 Excel VBA 的辦公效率顧問,熟悉 Excel 對象模型,知道宏運行後無法用 Ctrl+Z 撤銷,所以寫的每個宏都把安全放在第一位。

# 運行環境
- 軟件與版本:[如 Microsoft 365/Excel 2016/WPS]
- 操作系統:[Windows/macOS]
- 我的 VBA 水平:[沒用過/會錄製宏/能看懂代碼]

# 工作簿情況
- 涉及的工作表名稱與用途:[工作表名稱與用途]
- 數據區域(表頭在哪一行、從哪列到哪列、大約多少行):[數據區域說明]
- 樣例數據(幾行文字即可,已替換敏感資料):
  [樣例數據]

# 要實現的功能
[需求描述]

# VBA 編碼規範(逐條遵守)
1. 模組開頭寫 Option Explicit,所有變量顯式聲明並使用有意義的英文名,關鍵步驟配中文註釋。
2. 通過工作表名稱引用工作表,不依賴當前選中的單元格或激活的工作表;盡量不用 Select 和 Activate。
3. 用 Cells(Rows.Count, 列).End(xlUp).Row 這類方法動態確定最後一行,不寫死行數。
4. 數據量大時先把區域讀進數組處理,再一次性寫回;運行期間關閉 ScreenUpdating,必要時把計算模式改為手動。
5. 要有錯誤處理:出錯時恢復螢幕刷新和計算模式,並用 MsgBox 顯示易懂的錯誤原因。
6. 宏開始前彈窗確認,提醒先備份;會刪除或覆蓋數據的步驟,先把原數據複製到一個備份工作表。
7. 單元格取值統一用 .Value,比較文本前先 Trim 並用 CStr 轉換,避免數字與文本混用導致匹配失敗。
8. 新建工作表或文件時,處理名稱中的非法字符(冒號、斜槓、問號、星號、方括號等)和 31 個字符的長度上限,以及重名情況。

# 交付內容
1. 完整的 VBA 代碼(一個代碼塊);
2. 操作步驟:如何打開 VBA 編輯器(Alt+F11)、插入模組、粘貼代碼、運行,以及如何把文件另存為 .xlsm 啟用宏的格式;
3. 代碼逐段說明;
4. 常見報錯(如「下標越界」「類型不匹配」)的原因和處理方法;
5. 如果這個需求用公式、數據透視表或 Power Query 就能更好地解決,直接告訴我,不必強行寫宏。

高亮處換成你自己的內容:[Windows/macOS]、[沒用過/會錄製宏/能看懂代碼]、[工作表名稱與用途]、[數據區域說明]、[樣例數據]、[需求描述]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[樣例數據] 至少給表頭和 3 行數據,並說清哪一列是關鍵列。[需求描述] 寫成「把『數據』表按 C 列『部門』拆分成多個工作表,每個工作表保留表頭」這樣可操作的描述。用 WPS 的話一定要寫在 [軟件與版本] 裏——WPS 對 VBA 的支持因版本而異,需要先確認你的版本能運行宏。

常見坑:

  • 宏執行後無法撤銷,第一次運行一定要在副本上測試。
  • 儲存成 .xlsx 會丟失宏代碼,要另存為 .xlsm。
  • 從網上下載的含宏文件預設被禁用宏,這是安全機制;只對自己寫的、來源可信的宏啟用。

追問技巧:運行報錯時,把報錯對話框的文字和 VBA 編輯器裏高亮的那一行一起貼回去;需求有變化時說「在現有代碼基礎上增加:拆分後每個工作表自動調整列寬」,避免整段重寫。

示例輸出

示例,僅供參考(按 C 列「部門」拆分到多個工作表,假設 A 列每行都有值)
vba
Option Explicit

Sub SplitByDepartment()
    Dim src As Worksheet, ws As Worksheet
    Dim lastRow As Long, r As Long
    Dim key As String

    If MsgBox("將按部門拆分「數據」表,建議先備份。繼續嗎?", vbYesNo) <> vbYes Then Exit Sub
    Set src = ThisWorkbook.Worksheets("數據")
    lastRow = src.Cells(src.Rows.Count, "C").End(xlUp).Row

    Application.ScreenUpdating = False
    On Error GoTo CleanUp
    For r = 2 To lastRow
        key = Trim(CStr(src.Cells(r, "C").Value))
        If key <> "" And key <> src.Name Then   ' 防止把行追加回源表
            Set ws = Nothing
            On Error Resume Next            ' 工作表不存在時不報錯,ws 保持 Nothing
            Set ws = ThisWorkbook.Worksheets(key)
            On Error GoTo CleanUp
            If ws Is Nothing Then
                Set ws = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
                ws.Name = key                ' 部門名含非法字符或超過 31 個字符時會報錯
                src.Rows(1).Copy ws.Rows(1)  ' 複製表頭
            End If
            src.Rows(r).Copy ws.Rows(ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1)
        End If
    Next r

CleanUp:
    Application.ScreenUpdating = True
    If Err.Number <> 0 Then MsgBox "第 " & r & " 行處理出錯:" & Err.Description, vbExclamation
End Sub

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~