当前位置: 首页 > news >正文

如何学习VBA:换一种思路思考问题,利用数据库实现数据处理自动化

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。

如果您只是一般的职场VBA需求,可以打包选择7.1.3.9教程+汉英手册,第7套教程是入门,第1套教程是入门后的提高,第3套教程字典是必备的VBA之精华,第9套教程是实用的典型案例讲解。这四套教程内容掌握后足以处理一般工作中的问题,实际写代码的时候再辅助代码汉英手册,足矣!如果您想进一步提高,就需要选择高级阶段的教程了

VBA是面向对象编程的语言,博大精深。很多朋友咨询VBA的学习方法,我会陆续给大家讲解一些我的经验,大家可以慢慢体会。今日的内容是如何学习VBA_3.3.8:换一种思路思考问题,利用数据库实现数据处理自动化

【分享成果,随喜正能量】261 安住当下,用心生活,每一个日子都是幸福的起点。不负时光,不负自己,不枉此生!最好的修行,用心甘情愿的态度,过随遇而安的生活,怀有一颗慈悲、感恩的心灵,修行的路上,处处都吉祥。!

3.3.8 换一种思路思考问题,利用数据库实现数据处理自动化

很多朋友都在按照我的教程逐步提高自己的能力,这些教程实用性极强,没有任何的拖泥带水,为什么呢?这是和教程的定位相关的,我的教程定位于广大职场人员。如我自己,在职场的实际工作中,利用了20多年VBA,初学时,那种艰辛不是一个“难”字所能描述的,有时候去和人请教一个问题,人家根本就不理我,整整一周都在追着人家问……是啊,有谁肯把自己的经验轻易地告诉外人呢?现在,我不想让初学者如我当年那样。只要你来到我这个学习平台,肯于学习,有志于VBA,总会让你有所收获,我会把好的经验无保留地分享给有需要的朋友。

这系列教程中我会模拟各种实际工作的场景,去解决问题,并提供给大家源代码,如果你有时间,可以细细地理解;如果你没有时间,你只要拿来,拿来这些积木组合一下,修改一下构成你的实际场景。

在这系列教程中,《VBA代码解决方案》是面向初级和中级人员的教程,书中对于VBA涉及到的各个知识点均作了讲解,是利用代码来解决实际问题的基本教程,从中大家可以收获颇丰,利用了VBA,你之前用手工处理的数据可以借助于代码瞬间完成。例如:对于某位药店的销售人员,自己负责的药品需要根据上月销售的数据,计算出下个月的需求,以便订货,如果手工处理,药品的型号如果少还可以,假如涉及到几百种,工作量是非常大,即使你能够计算出来,往往还要担心数据的准确性,怎么办?VBA绝对是你工作的好帮手。下面的解决方案中,我会给出代码的解决方案。

《VBA数据库方案》是面向中级及以上人员书籍,是数据处理的专业教材。书中,你会看到各种数据的处理方案,会感受到ADO连接给我们工作带来的方便,这里面的思路是在代码方案上的提高,要求读者有效地理解记录集的概念,并用SQL语句来操作它,同时要理解内连接,左外连接,右连接等各种连接方式的特点和实际的应用范围。

还是以上面的例子做我测试的数据,来证明VBA之强大,如下面的数据:

在7月份的实际销售数据中,有各种型号的销量、金额、余数,要在7月份数据的基础上求出9月的采购预计,就是7月的销售总量减去库存的总量,由于7月的数据是不同的人员报上来的不同数据,要进行排重处理。

下面我讲解一下解决方案:

方案一,我们先利用VBA代码方案的知识来解决,只用代码进行数据的比较计算:

Sub MYNZ()

i = 3

Worksheets("Sheet1").Select

Range("F3:J" & Range("A3").End(4).Row).ClearContents

Do While Cells(i, 1) <> ""

K = 3

Do While Cells(K, "f") <> ""

If Cells(K, "f") = Cells(i, 1) Then

Cells(K, "g") = Cells(K, "g") + Cells(i, 2)

Cells(K, "h") = Cells(K, "h") + Cells(i, 4)

Cells(K, "i") = Cells(K, "i") + Cells(i, 3)

Cells(K, "j") = Cells(K, "g") - Cells(K, "h")

GoTo 100

End If

K = K + 1

Loop

Cells(K, "f") = Cells(i, 1)

Cells(K, "g") = Cells(i, 2)

Cells(K, "h") = Cells(i, 4)

Cells(K, "i") = Cells(i, 3)

Cells(K, "j") = Cells(K, "g") - Cells(K, "h")

100:

i = i + 1

Loop

End Sub

代码解释:

上述代码在运行过程中先是在7月销售中进行一个循环,然后在9月预测中进行一个查找,如果可以查到,那么就累加要统计的数据,如果没有查找到,那么就添加数据。

运行后很快就可以得出结论:

非常之快,根本不是手工处理可以比拟的,而且只要逻辑关系正确,不必担心数据的准确性,上面的数据我只是简单的列举了30个,如果是上万条数据呢?VBA当然可以处理,但手工处理是不可能的了。

本文的题目是《换一种思路思考问题,利用小型的数据库实现数据处理自动化》,上面的方案只是解决方案的一种,是我们认识VBA后,起码可以利用的方案。下面我继续提供解决的提高方案。

方案二,利用VBA数据库解决方案的知识来解决,建立连接,当你对代码的理解逐步深入后,就是自己水平提高阶段了,要刷新自己的知识,上面的问题就可以利用数据库了。数据库是数据处理的专业工具,在数据处理上非常灵活,但要求我们的水平要有所提高,

我们看下面的代码:

Sub mynzdate()

Dim cnADO, rsADO As Object

Dim strPath, strSQL As String

Worksheets("Sheet1").Select

Range("F3:J" & Range("A3").End(4).Row).ClearContents

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.FullName

cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath

strTable = "[sheet1$a2:d30]"

strSQL = "SELECT 品名,SUM(销量),SUM(余数) as 剩余,SUM(金额) as 上月的金额,SUM(销量)-SUM(余数) FROM " & strTable & " GROUP BY 品名"

rsADO.Open strSQL, cnADO, 1, 3

Range("F3").CopyFromRecordset rsADO

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

上述代码利用ADO连接到7月的销售,然后利用聚合函数完成了数据的处理,最后Range("F3").CopyFromRecordset rsADO 来输出数据。

输出的结果和上面的图一样:

上述两个方案,前者是利用代码直接比较完成的,代码易懂,是拥有VBA知识后很容易实现的,后者是通过数据库的聚合函数来实现的,在理论上后者对于数据的处理更加直接,特别是数据量庞大的时候,利用后者更是首选。

当我们的知识有所提高,就可以换一种思路解决问题,在实际的工作中,很多数据处理方面的问题可以用数据库来直接完成,这对于我们实现小型数据的办公自动化非常重要,也非常的专业。

小型数据库在我们的工作中可以起到非常重要的作用,当然,VBA要有自己的定位,不能和跑MRP的大型数据处理运算比较,要发挥自己的优点,那就是灵活,可以根据自己的需求而随意改变,如上面的要求提供的数据中,要增加一个平均单价,马上修正代码即可完成。

当然,如果你刚刚接触到VBA还是要先入门学习第七套教程后,在学习第一套《VBA代码解决方案》的提高内容,这些是基本,第一套教程中147讲内容可以验证绝大多数的VBA知识点,有大量的实例让你参考。当你对这些有了初步的认识后就可以学习《VBA数据库解决方案》了。在84讲内容中,你会欣赏到各种数据处理的专业方案,是我们工作中处理数据的专业工具。

那么,是不是有了上述的方案就可以了呢?当然不是,下面还有更加巧妙的方案,在我的VBA解决方案系列丛书的第三套教材中推出。

  • 换一种思路.xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:




文章转载自:

http://tqTBN5J9.xwLhc.cn
http://UOdETd4L.xwLhc.cn
http://jXTHXvEb.xwLhc.cn
http://O9yJo6dQ.xwLhc.cn
http://pJjfo04i.xwLhc.cn
http://T1ttEEQm.xwLhc.cn
http://KGGw1hlX.xwLhc.cn
http://2ch5ch3k.xwLhc.cn
http://YmsRBdMw.xwLhc.cn
http://LqXxqrpm.xwLhc.cn
http://6FOi2jnY.xwLhc.cn
http://fUazQgOq.xwLhc.cn
http://dM19Z2Zl.xwLhc.cn
http://9makkCKa.xwLhc.cn
http://3anrNh1m.xwLhc.cn
http://X7f80Qpb.xwLhc.cn
http://LiCl5B3c.xwLhc.cn
http://2MZhmyIn.xwLhc.cn
http://r0GaQDdV.xwLhc.cn
http://8k8ENjSW.xwLhc.cn
http://bYDavCRz.xwLhc.cn
http://BeyxAREI.xwLhc.cn
http://AclL0tZ6.xwLhc.cn
http://V8s2RPuJ.xwLhc.cn
http://EgjIe1BR.xwLhc.cn
http://8qfPAHpu.xwLhc.cn
http://hUFjJnye.xwLhc.cn
http://1ECV4W97.xwLhc.cn
http://7kTmydoU.xwLhc.cn
http://PbDwVi9L.xwLhc.cn
http://www.dtcms.com/a/380579.html

相关文章:

  • 解决docker配置了镜像源但还会拉取官方镜像源
  • 【小白笔记】符号链接
  • Tomcat Connectors 1.2.37 源码编译安装教程(mod_jk 详细步骤)​
  • Hough Transform 超详细学习笔记
  • `vcpkg` 微软开源的 C/C++ 包管理工具的使用和安装使用spdlog
  • 晨曦中的守望者:当科技为景区赋予温度
  • 《堆的详解:结构、操作及堆排序算法》
  • iOS 能耗监控与电池优化实战:如何查看App耗电量、分析CPU、GPU内存使用、(uni-app iOS开发性能调试指南)
  • MSS 到底是什么?Wireshark 分析TCP过程
  • CTFHub SSRF通关笔记8:数字IP Bypass 原理详解与渗透实战
  • 从西贝“预制菜”事件看明厨亮灶视觉算法价值
  • 【0435】heap toast 内核实现之 计算 toast tuple header 开销
  • 发现渐开线蜗杆成型铣刀齿形可以这样计算
  • Krisp-世界排名第一的AI噪音消除应用
  • 【116】基于51单片机GSM智能快递柜【Proteus仿真+Keil程序+报告+原理图】
  • 测试开发实战:接口自动化框架设计与性能瓶颈排
  • Linux -- 信号【上】
  • 敏捷适合短期项目还是长期项目
  • Android Sip电话(PJSP)
  • C语言——操作符(逻辑、条件、关系)
  • OpenHarmony:App(页面跳转)
  • 什么是快照式光谱成像相机?
  • 如何通过ESB整合美妆零售全渠道订单流、物流与金流?
  • java整合阿里云短信服务实现验证码功能
  • Excel转图片excel2img库bug修复:AttributeError ‘parent‘ 问题解决方案
  • 【秋招笔试】2025.09.10华为ai算法岗笔试真题
  • 【深度学习-Day 47】告别单向依赖:深入解析双向RNN与堆叠RNN,解锁序列建模新高度
  • 为Excel和WPS表格多个不连续单元格设置同样的批注
  • 【Vite】打包优化
  • 3 遥感与机器学习