类模块详解

一、类模块入门

  • vba 中的类模块的概念和其他面向对象的语言里面的类的概念是类似的,就是抽取共性进行封装以便能够重复使用
  • 类模块的插入
  • 类模块的相关语句如下

1、let:设置对象属性

2、get:获取对象属性

  • 梯形类定义
Option Explicit
Dim sd, xd, gao
Property Let 上底(a)sd = a
End PropertyProperty Let 下底(b)xd = b
End PropertyProperty Let 高(c)gao = c
End PropertyProperty Get 高()高 = gao
End PropertyProperty Get 面积()面积 = (sd + xd) * gao / 2
End Property
  • 梯形类使用
Sub test1()Dim t1 As New 梯形With t1.上底 = 2.下底 = 3.高 = 10MsgBox .高MsgBox .面积End With
End Sub

3、set:设置子对象

  • 类模块 setTest
Property Set redCell(rg As Range)rg.Interior.ColorIndex = 3
End Property
  • 使用类:先创建类的实例,再使用实例的子对象、方法和属性
Dim st As New setTest
Sub test()Set st.redCell = Range("a1:a10")
End Sub

4、sub 和 function:类的方法

  • 类的代码
'这是类模块 SheetFunc 的代码Sub SheetsAdd(str As String)Dim sht As WorksheetFor Each sht In SheetsIf sht.Name = str Thenk = 1Exit SubEnd IfNextSet sht = Sheets.Addsht.Name = str
End SubFunction SheetsDel(str As String)Dim sht As WorksheetApplication.DisplayAlerts = FalseFor Each sht In SheetsIf sht.Name = str Thensht.deleteEnd IfNextApplication.DisplayAlerts = True
End Function
  • 测试代码
Sub addsht()Dim sf As New SheetsFuncsf.SheetsAdd "四月"
End SubSub delsht()Dim sf As New SheetsFuncsf.SheetsDel "三月"
End Sub

二、类模块事件

  • 就是在类模块中声明 public 的对象属性
  • 然后类模块可以将这个对象的相关事件进行接管,这样我们就可以在类模块中统一定义事件响应代码了

1、命令按钮点击示例

  • 如图命令按钮,点击显示自己的 caption 属性,通过类模块完成此功能
  • 类模块代码
Option Explicit
Public WithEvents butt As msforms.CommandButtonPrivate Sub butt_Click()MsgBox butt.Caption
End Sub
  • 窗体代码
Dim butts(1 To 6) As New EventTestPrivate Sub UserForm_Initialize()For i = 1 To 6Set butts(i).butt = Me.Controls("CommandButton" & i)Next i
End Sub
  • tips:获取工作表插入的image控件
Sub test11()Set obj = ActiveSheet.OLEObjects("image1").ObjectMsgBox obj.BackColor
End Sub

三、类模块封装

  • 过程封装
'类模块SubBox代码
Sub red(rg As Range)rg.Interior.ColorIndex = 3
End Sub'测试代码
Sub test23()Dim sb As New SubBoxsb.red Range("a1:b4")
End Sub
  • 函数封装
'类模块 Funcs 代码
Function aver(rg As Range)aver = Application.WorksheetFunction.Average(rg)
End FunctionSub test24()Dim sb As New FuncsDebug.Print sb.aver(Range("b1:b3"))
End Sub
  • 窗体API封装 (略)

四、类模块的导入导出

  • 导出为 cls 后缀文件
  • 导入的时候好像先要新建一个类模块才会有导入类模块的入口

数据库操作

一、基本操作

1、VBA操作数据库

  • vba 对数据库的操作基于 ADO 对象和 sql 语句
  • ado 对象负责建立数据库连接,负责数据库的增删改查的操作
  • sql 语句就是直接的操作数据库的指令,ado对象需要通过sql进行数据库操作
  • 使用 ADO 对象前先要引入,具体的操作如下

2、简单操作示例

  • vba 中一行代码太长可以使用 _换行
Sub test()Dim conn As New ConnectionDim rst As New RecordsetDim excelStr, sqlStr As String' 这里是换行写的excelStr = "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=" & Excel.ThisWorkbook.Path _& "\database.xlsm" & ";Extended Properties='Excel 12.0;HDR=YES'"sqlStr = "select * from [sheet3$]"conn.Open excelStrrst.Open sqlStr, connDo While Not rst.EOFDebug.Print rst.Fields("name") & "-" & rst.Fields("age") & "-" & rst.Fields("sex")rst.MoveNextLooprst.Closeconn.CloseSet rst = NothingSet conn = Nothing
End Sub

3、两个重要的对象

Connection 对象
  • 建立数据库连接和操作数据库都靠它,用完后需要释放资源
  • connection 对象用 execute 方法来执行 sql 语句,根据是否返回结果集有两种处理方式
'返回结果集
Set rs =conn.Execute("SQL 查询语言")'不返回结果集,但是可以取到语句影响的行数,后面两参数可选,RecordAffected可返回影响行数
conn.Execute "SQL 操作性语句" [,RecordAffected][, Option]
recordset对象
  • 也可以用来操作数据库,但是效率没有 Connection 对象高
  • 可以取得查询数据库得到的数据集合,并对数据集进行一定的操作
  • 可以通过 addNew 添加数据
rst.Open sqlStr, conn, 0, 3
rst.AddNew Array("name", "age", "sex"), Array("mike11", 23, "woman")
  • 可以通过 getRows 获取所有的数据到数组,放到表格的话还需要转置;第一个参数是取的行数,第二个参数是开始行数,前2个参数和最后的参数不匹配的话会报错的,最好不要同时使用
arr = rst.GetRows(, , Array("name", "age"))

参考资料

  • http://www.360doc.com/content/18/0929/17/2548375_790737083.shtml
  • https://www.sohu.com/a/238562802_417040
二者的创建
  • 如果已经引入了相应的支持可以直接 new 该对象来使用
dim conn as new Connection
dim rst as new RecordSet
  • 不然直接使用 createObject 方法来直接创建
set conn = createObject("adodb.connection")
set rst= createObject("adodb.recordset")

二、参考代码段

  • 多种数据库的连接字符串
'连接 sqlserver
sqlserverStr = "Provider=sqloledb;Server=NIKEY-980114BB0;Database=pubs;Uid=sa;Pwd=sa;"'连接 excel 数据源
excelStr = "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=" & Excel.ThisWorkbook.Path _& "\database.xlsm" & ";Extended Properties='Excel 12.0;HDR=YES'"'连接 mysql
mysqlStr = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=192.168.1" _
& "139;DB=test;UID=root;PWD=abc;OPTION=3;"'连接 oracle
oracleStr = "Provider=OraOLEDB.Oracle.1; user id=" & db_user _
& "; password=" & db_pass & "; data source = " & db_sid & "; Persist Security Info=True"

IE与网络操作(略)

API函数使用(略)

代码和函数封装(略)

Excel VBA(09)类模块和数据库操作相关推荐

  1. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...

    第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  2. php mysql 数据库操作类_php mysql数据库操作类

    分享一个本人一直在使用的一个mysql数据库操作类,比较初级,自己给别人做web网站的时候一直用的这个类,这个也是之前刚开始学习php的时候在网上找到的一个mysql数据库操作类,后来自己改了一些,比 ...

  3. Excel总VBA相关类模块

    VBA操作Excel类模块的综合运用: Public 条件 Private rngs Private n Dim cc Property Set 单元格(rng As Range) If rng &g ...

  4. php封装数据库操作类,php简单数据库操作类的封装

    本文实例为大家分享了php封装一个简单的数据库操作类,供大家参考,具体内容如下 一.代码 class conndb{ private $local; private $username; privat ...

  5. mysql 数据库操作类_【数据库操作类】10个php操作数据库类下载

    数据库(Database)操作是在开发过程中重要的组成部分,熟练掌握数据库的操作是开发人员必备的武器.PHP中文网为大家提供了各种封装好的php数据库操作类库,供大家下载和学习. 相关mysql视频教 ...

  6. .net mysql操作类_ASP.NET数据库操作类实例

    本文实例讲述了ASP.NET数据库操作类.分享给大家供大家参考,具体如下: using System; using System.Data; using System.Configuration; u ...

  7. Excel Vba无法连接 远程 Mysql数据库问题的解决方法

    1.使用的环境 excel 2016 32位 远程服务器数据库,有公网ip 使用的是xampp 套件,包含apache+php+MariaDB 10.1.34(这个和mysql兼容,可以看作mysql ...

  8. php类模块引擎PDO操作MySQL数据库简单阐述

    PDO是什么呢? 通俗说就是别人写的一个"数据库操作工具类",它非常强大,可以应对市面上几乎所有主流数据库, 具体应用时候有这样一个关系: 即,要操作某种数据,就得去"打 ...

  9. Excel——VBA之移动文本框圆形操作

    1.打开一个新工作表 2.在工作表中央画一个文本框,并且随便输入什么文字 3.  选择文本框之外的任意单元格 4.  按下Alt+F11激活VB编辑器窗口,并且选择工程浏览器窗口的Personal ( ...

最新文章

  1. linux 内核参数 杨,Linux 内核参数
  2. java 中文怎么截取,java String 中文 字符串 截取
  3. mysql5.7配置_MySQL5.7详细配置教程
  4. WCF IE 能够正常访问,chrome 和firefox不能正常访问
  5. java 装饰器模式
  6. java mongodb 返回所有field_Python爬虫框架:scrapy爬取知乎关注用户存入mongodb
  7. org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory---springcloud工作笔记162
  8. 一分钟了解阿里云产品:企业级分布式应用服务EDAS五大热点技术问题分析
  9. computed、watch和methods特性比较
  10. 特殊字符的html编码转化
  11. mysql迁移升级_MYSQL迁移或者升级的故障解决大全
  12. 浅谈C++中qsort与sort的使用方法与区别
  13. java list加入listview_将卡添加到ListView
  14. 图书馆管理系统可行性分析报告----软件工程
  15. Axure RP 6.5中文汉化包及汉化方法
  16. 开始使用Mac OS X
  17. I2C电路故障排除---边沿时间与杜邦线
  18. -bash: netstat: 未找到命令
  19. 2-1 Socket家族的基石
  20. 小米pro15拆机_小米笔记本Pro 15增强版值得买吗 小米笔记本Pro 15增强版拆解+评测...

热门文章

  1. C++异常处理 详解
  2. InfiniteScroll 无限滚动遇到的坑
  3. 关河因果:钓鱼城引擎技术概述
  4. 机器人瓦力材质库下载_机器人总动员 4K蓝光原盘下载+高清MKV版/ 大空奇兵·威E(港) / 瓦力(台) 2008 60.4G...
  5. [日语二级词汇]动词(5)
  6. linux系统使用R语言,R语言-基础操作
  7. 解决:在python+selenium账号脚本登陆时,使用qq账号密码登陆百度账号出现的问题
  8. 【读书笔记】运气到底有多重要
  9. 蓝桥杯web模拟题知识点以及解析
  10. 毕业设计- Android图书借阅管理系统