首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果我说DeepSeek给的Excel自动化代码是错的,你敢相信吗?

解锁非凡之章

DeepSeek的出现让复杂的问题变得简单了,但同时也可能会导致简单的问题复杂化。在某些场景下,学会向deepseek不断地提出问题更重要

对于deepseek给出答案,我们要学会提问。一方面能找到deepseek可能出现的错误,另一方面是让使用者透彻了解deepseek给出的到底是什么。

我们以上一篇文章deepseek给的合并3张数据表的VBA代码为例,从提问中去掌握VBA,去更近一步了解deepseek的思考方式。

deepseek给出的合并同一个工作簿3张工作表的VBA代码

Sub MergeSheets() Application.ScreenUpdating = False ' 关闭屏幕刷新,提升速度 Application.Calculation = xlCalculationManual ' 关闭自动计算 Dim wsDest As Worksheet Dim wsSrc As Worksheet Dim lastRowSrc As Long Dim lastRowDest As Long Dim headerRow As Range ' 创建或清空目标工作表 On Error Resume Next Set wsDest = ThisWorkbook.Sheets("合并结果") If Err.Number <> 0 Then Set wsDest = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) wsDest.Name = "合并结果" Else wsDest.Cells.ClearContents ' 清空原有数据 End If On Error GoTo 0 ' 复制标题行(假设所有工作表结构一致) Set headerRow = ThisWorkbook.Sheets("Sheet1").Rows(1) headerRow.Copy Destination:=wsDest.Range("A1") ' 循环处理每个工作表 For Each wsSrc In ThisWorkbook.Sheets If wsSrc.Name <> wsDest.Name And _ (wsSrc.Name = "Sheet1" Or wsSrc.Name = "Sheet2" Or wsSrc.Name = "Sheet3") Then lastRowSrc = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row ' 获取数据最后一行 lastRowDest = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row + 1 ' 目标表下一行 ' 复制数据(从第2行开始,跳过标题) wsSrc.Range("A2:J" & lastRowSrc).Copy _ Destination:=wsDest.Range("A" & lastRowDest) End If Next wsSrc Application.ScreenUpdating = True ' 恢复屏幕刷新 Application.Calculation = xlCalculationAutomatic ' 恢复自动计算 MsgBox "合并完成!共合并 " & wsDest.UsedRange.Rows.Count - 1 & " 行数据。", vbInformationEnd Sub

01 最前面两句代码有什么功能?

Application.ScreenUpdating = False ' 关闭屏幕刷新,提升速度Application.Calculation = xlCalculationManual ' 关闭自动计算

在VBA中,Application.ScreenUpdating = False 和 Application.Calculation = xlCalculationManual 是常见的优化代码性能的关键语句。

ScreenUpdating属性控制屏幕的刷新。当设置为False时,关闭屏幕刷新。xlCalculationManual 打开手动运算,即关闭自动运算。

相当于在计算选项中勾选手动。

这两句代码是VBA优化的“黄金搭档”,通过减少界面刷新和暂停公式计算,显著提升宏的运行效率。

02 如果要将生成的“合并结果”表放在第一张表该如何修改?

Set wsDest = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))

上面是创建保存合并结果的语句,其中 After 指定创建工作表的位置。

Sheets.Count获取工作簿中工作表数,这里是3。所以增加的合并结果表,被安排在了第三张表后面,也就是最后一张表。

要创建在第一张表,则改成以下代码:

Set wsDest = ThisWorkbook.Sheets.Add(Before:=Sheets(1))

03 如果增加一张同样的工作表,能正常合并吗?

不可以

因为在循环处理工作簿的时候,循环条件为工作表的名字不等于合并数据,并且等于Sheet1、Sheet2、Sheet3之一。也就是仅能把名字为Sheet1、Sheet2、Sheet3的工作表合并。

If wsSrc.Name <> wsDest.Name And _(wsSrc.Name = "Sheet1" Or wsSrc.Name = "Sheet2" Or wsSrc.Name = "Sheet3") Then

事实上,这里并不需要判断工作表名是否精准的等于Sheet1、Sheet2、Sheet3。因此直接把这句删了,便能正常合并新增加的工作表。

循环条件改为:

If wsSrc.Name <> wsDest.Name Then

改成以上代码后,合并数据的代码更具有普适性。可见deepseek并不一定总是能给出最适当的答案。

04 如果每一张表的数据都增加一列(K列),该如何修改代码?

这个问题deepseek在注意事项中已经提到了,修改代表数据范围的字母 J。

通过以上提问我们能更加了解deepseek输出结果,同时也强化了自己VAB代码知识。AI输出的文字本质上是词汇概率的重组,它将你的需求翻译成计算机语言。如果你能与它对话,那么你才真正意义上掌握了AI工具了。

工具的存在是为了辅助,而不是替代。希望你看了这篇文章能忘掉一些AI焦虑。deepseek的强大毋容置疑,但更需要强调的是人类与工具的合作关系,以及学习基础技能的重要性。虽然AI能处理复杂任务,但理解基础能让人类更好地指导和优化AI的工作。

若因AI弃学技艺,便如失舵的船,纵有风浪推涌,终难抵心之所向。如果把deepseek比作织锦的针线,借力织就繁花锦缎,这锦缎的温度与针脚的灵犀,永远属于执针人。

有道理吧,毕竟这些都是DeepSeek告诉我的。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OS0rmh5plhnaSSewEHGnel-Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券