近期想给部门办公软件Excel升级一块产品复验期限预警功能报表,日常我们使用思路是:从Excel中写好数据通过按钮(查看报表)点击调取宏(VBA)把数据存储到ACCESS数据库中,需要使用的时候再从数据库中调到Excel中显示查阅。
话不多说直接上代码:这是复验期查询按钮的宏代码(有错):
Sub 复验期查询()
Dim cnn As Object '数据库连接Dim strcnn As String 'ACCESS连接语句Dim mydata As String '数据库的完整路径和名称Dim mytable As String '数据表名称Dim sql As String 'sql查询语句Dim rs As Object '临时数据表纪录Dim i As Integer '循环数据变量(获取数据表字段)Dim msg As StringDim rowcount As IntegerDim mystr As String'1、连接数据库Set cnn = CreateObject("ADODB.Connection")mydata = ThisWorkbook.Path & "\WM.accdb"Select Case Application.Version * 1 '设置连接字符串,根据版本创建连接Case Is <= 11strcnn = "Provider=Microsoft.Jet.Oledb.4.0;Jet OLEDB:Database Password='fy83966333';Data Source=" & mydataCase Is >= 12strcnn = "Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password='fy83966333';Data Source=" & mydataEnd Selectcnn.Open strcnn '打开数据库链接'A、设置sql查询语句mytable = "待复验产品明细"Set rs = CreateObject("ADODB.Recordset")mystr = "where 待复验产品明细.天数 >180 and 待复验产品明细.库存数量 > 0.00001 "sql = "select 待复验产品明细.入库ID,待复验产品明细.出库日期,待复验产品明细.商品分类,待复验产品明细.商品名称,待复验产品明细.规格型号,待复验产品明细.批号,待复验产品明细.单位,待复验产品明细.出库数量,待复验产品明细.库存数量,待复验产品明细.天数,待复验产品明细.领货部门,待复验产品明细.供应商,待复验产品明细.厂商" & " from " & mytable & mystr & " order by 待复验产品明细.出库日期 desc, 待复验产品明细.入库ID desc"Set rs = cnn.Execute(sql) '执行查询,并将结果输出到记录集对象'3、复制数据库数据With Sheet6.Cells.ClearContentsFor i = 0 To rs.Fields.Count - 1 '填写标题.Cells(2, i + 2) = rs.Fields(i).NameNext i.Range("B3").CopyFromRecordset rs.Cells.EntireColumn.AutoFit '自动调整列宽.Cells.EntireColumn.AutoFit '自动调整列宽End With重新开始:'删除重复项rowcount = Range("c" & Rows.Count).End(xlUp).Row - 2For i = 3 To rowcountIf Range("b" & i) = Range("b" & i + 1) ThenIf Range("b" & i).Offset(0, 1) >= Range("a" & i + 1).Offset(0, 1) ThenRange("b" & i + 1).EntireRow.DeleteElseRange("b" & i).EntireRow.DeleteEnd IfGoTo 重新开始End IfNextrs.Closecnn.CloseSet rs = NothingSet cnn = NothingActiveWorkbook.RefreshAll
MsgBox "刷新成功", vbOKOnly
End Sub
运行代码发现就会提示出错:
到这里有没有哪位大神发现哪有不对的,本人也属于三脚猫的功夫,计算机二级只是学了VB这门语言,期初sql里面的引号都不知道哪个对应着哪个,还是在CSDN上查阅了下他们的关系:
受对象的耳濡目染想起了人工智能纠错,这次试用了三款具备AI功能的工具,分别是ASK AI、ChatGPT、CSDN自带的C知道。
先是询问ASK AI 的回答:
按照人工智能给出的“正确 ”提示我给代码换了,结果提示的是from子句的错误:
我就纳闷了,机器也会错?!就继续询问ASK AI:
我笑了,确实是我的错,漏了一个字,可是修改了漏字还是from子句的错误,再次询问ASK AI,结果软件不耐烦了竟然不给我翻译成汉语版
得嘞,看来想漂亮的完成一件事还得靠充钱。再问问其他软件吧,接下来体验下chatGPT修改, 果不其然一语中的:在~mytable和mystr之间添加一个空格。
这是chatGPT给出的修改(下面我还用了CSDN的ChitGPT修改,二者不一样):
mytable = "待复验产品明细"
Set rs = CreateObject("ADODB.Recordset")mystr = "where 待复验产品明细.天数 > 180 and 待复验产品明细.库存数量 > 0.00001 "sql = "select 待复验产品明细.入库ID,待复验产品明细.出库日期,待复验产品明细.商品分类,待复验产品明细.商品名称,待复验产品明细.规格型号,待复验产品明细.批号,待复验产品明细.单位,待复验产品明细.出库数量,待复验产品明细.库存数量,待复验产品明细.天数,待复验产品明细.领货部门,待复验产品明细.供应商,待复验产品明细.厂商" & " from " & mytable & " " & mystr & " order by 待复验产品明细.出库日期 desc, 待复验产品明细.入库ID desc"
把软件修改好的代码放入VBA真的就成功了:
我去,当时可激动了,这点代码纠缠着我近一天时间才把错误给查找纠正出来!因为期间我也怀疑过要在mytable和mystr之间有个空格,我只是在再mystr前面试着加了个空格没有用引号给引起来,导致运行VBA把我空格给忽略掉,给出报错提示。
好了,代码算是搞定了,突然有个想法:听朋友说,咱们CSDN的ChitGPT也有人工智能大模型纠错功能,于是体验了下查错纠错,
mystr = "where 待复验产品明细.天数 >180 and 待复验产品明细.库存数量 > 0.00001 "sql = "select 待复验产品明细.入库ID,待复验产品明细.出库日期,待复验产品明细.商品分类,待复验产品明细.商品名称,待复验产品明细.规格型号,待复验产品明细.批号,待复验产品明细.单位,待复验产品明细.出库数量,待复验产品明细.库存数量,待复验产品明细.天数,待复验产品明细.领货部门,待复验产品明细.供应商,待复验产品明细.厂商 from " & mytable & " " & mystr & " order by 待复验产品明细.出库日期 desc, 待复验产品明细.入库ID desc"
软件给的不是全面但是也能找到少空格这个错误点,还有一些排版细节,和chatGPT修改后区别就是引号位置的不同。不全面加以修改还是能完美运行出结果:
体验人工智能软件带来的便利,深刻的意识到学习的重要性,有的东西想学不一定能学到,但人工智能时代只要有想法,貌似都能够给实现!