夜雨聆风学习资料网

ARTICLE · 984083

从0学Excel VBA编程 · 番外篇16:VBA 调用 AI 大模型对话——让 也能和 AI 聊起来

从0学Excel VBA编程 · 番外篇16:VBA 调用 AI 大模型对话——让 也能和 AI 聊起来

从0学Excel VBA编程 · 番外篇16:VBA 调用 AI 大模型对话——让 Excel 也能和 AI 聊起来

学习目标

  1. 知道「AI 对话接口」长什么样,一句话就能把问题发给 AI
  2. 会用 VBA 发一句话给 AI,把回答拿回 Excel 单元格
  3. 能做一个「问答看板」:在格子里输入问题,点按钮就出答案

知识点精讲

前面几篇我们学会了「上网抓数据」(番外篇10/11/12)。其实让 Excel 和 AI 聊天,套路一模一样:Excel 是拨号方,AI 接口是接电话的客服,JSON 就是装话的信封。

我们用「OpenAI 兼容格式」的接口来演示(DeepSeek 为例)。为什么选它?因为通义千问、智谱 GLM、DeepSeek 等国产大模型,说话的格式全都一样,你学会一个,换一家只要改网址和模型名,代码一行不用动。

整套动作分三步:

  1. 发请求:用 XMLHTTP 发一个 POST 请求,把密钥和「问题」塞进 JSON 信封
  2. 收回信:AI 返回一段 JSON 文本(含回答),用 ADO 流把中文解码(思路同番外篇10)
  3. 拆信封:用「VBA-JSON」库(番外篇13 装过)把回答取出来,写进单元格

📌 开工前准备(两步,缺一不可)

  • 申请密钥:去 DeepSeek 开放平台(或你家大模型的官网)注册,领一个 API Key,免费额度够练手。下面代码里 换成你的APIKey 改成它。
  • 装好 VBA-JSON:按番外篇13 把 JsonConverter.bas 导入 VBA 工程,并在「工具 → 引用」里勾选 Microsoft Scripting Runtime。没装会报「编译错误:找不到 JsonConverter」。

【示意图】

VBA 调用 AI 大模型对话 · 一条龙① Excel 里写好问题,塞进 JSON 信封② XMLHTTP 发 POST(带你的密钥 Bearer)③ AI 接口回一段 JSON(含回答)④ ADO 流解码中文 + VBA-JSON 拆出回答⑤ 回答写进单元格,任务完成铁律:密钥别公开 / 中文要解码 / 留意免费额度

下面三个公共函数,复制进同一个标准模块顶部,后面的案例直接调用它们。

' 把文本里的特殊字符转义,避免拼 JSON 时出错Function 转义JSON(t As String) As String    t = Replace(t, "\", "\\")      ' 先转义反斜杠    t = Replace(t, """", "\""")    ' 再转义双引号    t = Replace(t, vbCrLf, "\n")   ' 换行变 \n    t = Replace(t, vbCr, "\n")    t = Replace(t, vbLf, "\n")    转义JSON = tEnd Function' 把 XMLHTTP 返回的字节流按 UTF-8 解码成中文文本Function 读HTTP文本(http As Object) As String    Dim stream As Object    Set stream = CreateObject("ADODB.Stream")    stream.Type = 1                ' 1 = 二进制    stream.Open    stream.Write http.responseBody ' 写入原始字节    stream.Position = 0    stream.Type = 2                ' 2 = 文本    stream.Charset = "UTF-8"    stream.Position = 0    读HTTP文本 = stream.ReadText    stream.CloseEnd Function' 核心:问 AI 一句话,返回它的回答文本Function 调用AI(问题 As String) As String    Dim http As Object, url As String, apiKey As String, body As String    Dim resp As String, dic As Object    apiKey = "换成你的APIKey"                         ' ← 改成你自己的密钥    url = "https://api.deepseek.com/v1/chat/completions"    ' 拼 JSON 请求体:model 指定模型,messages 放对话内容    body = "{""model"":""deepseek-chat""," & _           """messages"":[{""role"":""user"",""content"":""" & 转义JSON(问题) & """}]}"    ' 发 POST 请求    Set http = CreateObject("MSXML2.XMLHTTP")    http.Open "POST", url, False    http.setRequestHeader "Content-Type", "application/json"    http.setRequestHeader "Authorization", "Bearer " & apiKey    http.send body    ' 读回并解码中文    resp = 读HTTP文本(http)    ' 拆 JSON:choices 是个数组,从 1 开始取第一条;再取 message 里的 content    Set dic = JsonConverter.ParseJson(resp)    调用AI = dic("choices")(1)("message")("content")End Function

3 个实战案例

案例 1(简单):问一句话,答案写进 A1

功能说明:调一下 调用AI,把 AI 的回答直接放进 A1,验证链路通不通。

Sub 问一句话()    Range("A1").Value = 调用AI("用一句话向0基础的办公人员介绍Excel")End Sub

操作步骤

  1. 把上面三个公共函数 + 本过程放进同一个标准模块
  2. 把 调用AI 里的 换成你的APIKey 改成你的真实密钥
  3. 光标放在 问一句话 里,按 F5 运行
  4. 稍等一两秒,A1 就会出现 AI 的回答

案例 2(中等):批量把 A 列问题问完,答案写 B 列

功能说明:A 列从第 2 行起是一堆问题,逐个发给 AI,回答写进同行的 B 列。On Error 兜底——哪条网络抽风也不卡住整个循环。

Sub 批量提问()    Dim r As Long    For r = 2 To Cells(Rows.Count, "A").End(xlUp).Row        On Error Resume Next        Cells(r, "B").Value = 调用AI(Cells(r, "A").Value)        On Error GoTo 0    Next r    MsgBox "全部问完啦!答案已写在 B 列", vbInformationEnd Sub

操作步骤

  1. 在 A2、A3、A4… 填入不同问题,例如「怎么快速去重?」「VLOOKUP 怎么用?」
  2. 运行 批量提问
  3. 等一会儿,B 列逐行出现对应回答
  4. 提示:免费额度有限,问题别太多太密,避免触发限流

案例 3(实用):问答看板,输入问题点按钮出答案

功能说明:做一个给同事也能用的小工具——B1 输入问题,点按钮,AI 回答写进 C1,并弹窗提示。再加一小段「进阶」代码,让 AI 扮演耐心的 Excel 老师。

Sub 问答看板()    Dim 问 As String    问 = Range("B1").Value    If 问 = "" Then MsgBox "请先在 B1 输入你的问题", vbExclamation: Exit Sub    Range("C1").Value = 调用AI(问)    MsgBox "AI 回答已写在 C1:" & vbCrLf & vbCrLf & Range("C1").Value, vbInformationEnd Sub

操作步骤

  1. 在 B1 输入问题,例如「怎样用透视表统计每月销售额?」
  2. 插入一个形状(或按钮),右键「指定宏」→ 选 问答看板
  3. 点这个形状,C1 立刻出现 AI 回答,并弹出提示框
  4. 想换风格?把 调用AI 里的 body 换成下面这段,AI 就会当「Excel 老师」:
' 进阶:加 system 设定,让 AI 扮演 Excel 老师(替换 调用AI 里的 body 那两行)body = "{""model"":""deepseek-chat""," & _       """messages"":[" & _       "{""role"":""system"",""content"":""你是耐心的Excel老师,用大白话、举例子讲""}," & _       "{""role"":""user"",""content"":""" & 转义JSON(问题) & """}]}"

本篇小结

  • 套路不变:和上网抓数据一样,发请求 → 收 JSON → 拆信封,只是这次对方是 AI
  • 三件套:XMLHTTP 发 POST、ADO 流 解码中文、VBA-JSON 取回答
  • 换平台零成本:通义千问 / 智谱 GLM 等只是改 url 和 model 名,代码通用
  • 先备齐:自己的 API Key + 装好的 VBA-JSON(番外篇13),缺一不可

下一篇预告

下一篇可做 番外篇17:让 AI 批量处理 Excel 数据(把表格内容发给 AI 做分类、摘要、纠错,结果写回)——把「调用 AI」和前面的字典、合并、SQL 串成真正的智能办公流水线。如果你更想收尾,也可以做《VBA 自动化工具箱》总目录。告诉我选哪个方向即可。

相关学习资料