如何学习VBA_3.3.9:利用“搭积木”思想,快速有效地完成你的代码
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。
如果您只是一般的职场VBA需求,可以打包选择7.1.3.9教程+汉英手册,第7套教程是入门,第1套教程是入门后的提高,第3套教程字典是必备的VBA之精华,第9套教程是实用的典型案例讲解。这四套教程内容掌握后足以处理一般工作中的问题,实际写代码的时候再辅助代码汉英手册,足矣!如果您想进一步提高,就需要选择高级阶段的教程了。
VBA是面向对象编程的语言,博大精深。很多朋友咨询VBA的学习方法,我会陆续给大家讲解一些我的经验,大家可以慢慢体会。今日的内容是如何学习VBA_3.3.9:利用“搭积木”思想,快速有效地完成你的VBA代码
【分享成果,随喜正能量】262 什么是成年人最顶级的自律呢?就是不拆穿,但是会远离,不动声色的淘汰身边的烂人烂事。黄连救人无功,人参杀人无过,世上的大部人,宁愿在甜言蜜语中死去,也不愿在忠言逆耳中重生。这就是人性,所以要克制自己去纠正别人的欲望,不要随意介入你的因果,你介入谁的因,你就要承担谁的果。
3.3.9 利用“搭积木”思想,快速有效地完成你的VBA代码
完成你的VBA代码只要三步:找到“积木”;修正“积木”;放好“积木”
在上一篇讲如何写代码程序的时候,我讲了换一种思路来解决问题,今日我将继续此思路的延伸——如何写VBA的程序。
我一直在推广搭积木的思想,对于一块积木,在不同的程序中只是参数的不同,起的作用是相同的,那么怎么样利用好这些积木呢?就是要修正必要的语句。这个程序中是这种写法,在另外的程序中就是其他的表述形式,当你理解了我给出的积木的作用,你就可以灵活地利用了。
今日仍讲解一个查找程序,这个查找程序在我之前的文章中有过讲解,是利用《VBA代码解决方案》的内容完成的一个多种查找方式的汇总,在推出了《VBA数据库解决方案》后,今日我们将利用数据库的知识来完成这段程序,让大家体会一下两者的不同。教程可以作为你的积木库,里面有大量的积木等你选择。当然,程序无所谓好与坏,都是一样的应用,我也反复的声明,我推出的系列教程是面向职场人员,以实用为目的,以解决工作中的实际问题为主要方向,一些细枝末节的推敲在这里很少提到。
我们的查找数据,和被查找数据如下图:
“FIND”页是数据源,我们要在源数据中按照条件1查找“MY”工作表中各行的数值,然后将对应的数据放到后面的各列中,如何实现呢?
1 分析:要想用数据库解决上述问题,我们首先想到用数据库去连接上述两个工作表,然后提取出“FIND”工作表中与“NY”工作表中A列相同的BCD列的值,建立什么连接呢? 很显然,用左外连接和右外连接都能解决此问题,这里我们选择的是左外连接。
2 找积木:打开左外连接的积木块:要选择工作表相关的内容,因为我们要连接的是EXCEL工作表。到VBA数据库解决方案第58讲拷贝出代码,注意《VBA数据库解决方案》一书我是提供EXCEL程序文件的,要从程序文件中拷贝,由于有很多汉字字符,要打开汉字的录入后拷贝:
3 修改积木:
代码:
Sub mychazhaoONE()
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("MY").Select
[B:D].ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
TT1 = Sheets("find").Range("a1")
SS1 = Sheets("find").Range("b1")
SS2 = Sheets("find").Range("C1")
SS3 = Sheets("find").Range("D1")
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
strSQL = "Select b." & SS1 & ",b." & SS2 & ",b." & SS3 & " From [MY$] as a LEFT JOIN [FIND$] as b ON (a." & TT1 & "=" & "b." & TT1 & ") "
rsADO.Open strSQL, cnADO, 1, 3
For i = 1 To rsADO.Fields.Count
Cells(1, i + 1) = rsADO.Fields(i - 1).Name
Next
Range("b2").CopyFromRecordset rsADO
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
在上面的代码中,我修正了几处:
1 工作表名称的修正
2 条件的修正
3 提取字段的修正
其余的没有做任何改变。下面我们看代码的运行:
完全符合我们的预期。
我们看到,这种修正积木再搭建的办法可以大大节省你宝贵的时间,当然,要能顺利地修正这些积木,对这些积木要理解,比如在我今天的例子中,你要深刻理解的知识点包括:
1 什么是左外连接?
2 左外连接的返回值是怎么样的?
3 如何建立起左外连接的SQL语句?
4 SQL 语句的有效写法。
这些当你在学习第58讲的时候要解决。
4 问题的引申
上述的过程实现了对于单条件的查找,那么双条件呢如何实现呢?这里我只给出代码的截图:
- MyFind.xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: