Excel VBA(09)类模块和数据库操作
类模块详解
一、类模块入门
- 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)类模块和数据库操作相关推荐
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...
第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
- php mysql 数据库操作类_php mysql数据库操作类
分享一个本人一直在使用的一个mysql数据库操作类,比较初级,自己给别人做web网站的时候一直用的这个类,这个也是之前刚开始学习php的时候在网上找到的一个mysql数据库操作类,后来自己改了一些,比 ...
- Excel总VBA相关类模块
VBA操作Excel类模块的综合运用: Public 条件 Private rngs Private n Dim cc Property Set 单元格(rng As Range) If rng &g ...
- php封装数据库操作类,php简单数据库操作类的封装
本文实例为大家分享了php封装一个简单的数据库操作类,供大家参考,具体内容如下 一.代码 class conndb{ private $local; private $username; privat ...
- mysql 数据库操作类_【数据库操作类】10个php操作数据库类下载
数据库(Database)操作是在开发过程中重要的组成部分,熟练掌握数据库的操作是开发人员必备的武器.PHP中文网为大家提供了各种封装好的php数据库操作类库,供大家下载和学习. 相关mysql视频教 ...
- .net mysql操作类_ASP.NET数据库操作类实例
本文实例讲述了ASP.NET数据库操作类.分享给大家供大家参考,具体如下: using System; using System.Data; using System.Configuration; u ...
- Excel Vba无法连接 远程 Mysql数据库问题的解决方法
1.使用的环境 excel 2016 32位 远程服务器数据库,有公网ip 使用的是xampp 套件,包含apache+php+MariaDB 10.1.34(这个和mysql兼容,可以看作mysql ...
- php类模块引擎PDO操作MySQL数据库简单阐述
PDO是什么呢? 通俗说就是别人写的一个"数据库操作工具类",它非常强大,可以应对市面上几乎所有主流数据库, 具体应用时候有这样一个关系: 即,要操作某种数据,就得去"打 ...
- Excel——VBA之移动文本框圆形操作
1.打开一个新工作表 2.在工作表中央画一个文本框,并且随便输入什么文字 3. 选择文本框之外的任意单元格 4. 按下Alt+F11激活VB编辑器窗口,并且选择工程浏览器窗口的Personal ( ...
最新文章
- linux 内核参数 杨,Linux 内核参数
- java 中文怎么截取,java String 中文 字符串 截取
- mysql5.7配置_MySQL5.7详细配置教程
- WCF IE 能够正常访问,chrome 和firefox不能正常访问
- java 装饰器模式
- java mongodb 返回所有field_Python爬虫框架:scrapy爬取知乎关注用户存入mongodb
- org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory---springcloud工作笔记162
- 一分钟了解阿里云产品:企业级分布式应用服务EDAS五大热点技术问题分析
- computed、watch和methods特性比较
- 特殊字符的html编码转化
- mysql迁移升级_MYSQL迁移或者升级的故障解决大全
- 浅谈C++中qsort与sort的使用方法与区别
- java list加入listview_将卡添加到ListView
- 图书馆管理系统可行性分析报告----软件工程
- Axure RP 6.5中文汉化包及汉化方法
- 开始使用Mac OS X
- I2C电路故障排除---边沿时间与杜邦线
- -bash: netstat: 未找到命令
- 2-1 Socket家族的基石
- 小米pro15拆机_小米笔记本Pro 15增强版值得买吗 小米笔记本Pro 15增强版拆解+评测...
热门文章
- C++异常处理 详解
- InfiniteScroll 无限滚动遇到的坑
- 关河因果:钓鱼城引擎技术概述
- 机器人瓦力材质库下载_机器人总动员 4K蓝光原盘下载+高清MKV版/ 大空奇兵·威E(港) / 瓦力(台) 2008 60.4G...
- [日语二级词汇]动词(5)
- linux系统使用R语言,R语言-基础操作
- 解决:在python+selenium账号脚本登陆时,使用qq账号密码登陆百度账号出现的问题
- 【读书笔记】运气到底有多重要
- 蓝桥杯web模拟题知识点以及解析
- 毕业设计- Android图书借阅管理系统