ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: zhoujibin1

[原创]Excel VBA 快速上手之宝典

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-7-21 11:48 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程

太谢谢了,

TA的精华主题

TA的得分主题

发表于 2006-7-21 15:30 | 显示全部楼层
谢谢楼主

TA的精华主题

TA的得分主题

发表于 2006-7-21 15:34 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-21 16:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

3) Access文件

   使用VBA来访问数据库,其实就是通过一定方法借助数据库引擎来访问,关键是使用什么方法来使用引擎。目前访问ACCESS数据库常用的有DAO和ADO方法,DAO就是Database Access Object(数据库访问对象)的英文缩写,DAO是老式的, 它目前还在使用的原因是向下兼容和ADO在一些地方还没有取代DAO的功能。ADO是ActiveX Data Object(数据控件对象)的英文缩写,是目前较新和功能较强的方法。
  通过DAO或ADO可以访问多种类型的数据库,包括Access、SQL Server、Oracle等,也可访问应用程序的文件,如Excel文件、文本文件及Email和NEWS的文件。实际上利用控件来链接数据库,其概念大致相同,首先都需创建链接,其后用Open方法产生各种类型的数据集对象,再对数据集对象操作来使用数据库内容。

3.1 DAO使用的步骤及方法
(1) 引用DAO类型库
从VBE的”工具/引用”菜单中选择可引用“Microsoft DAO 3.6 Object Library”项.

(2) 定义DAO对象
1) Dim db As Database, Database (数据库)变量对应于Access数据库.
2) Dim rs As RecordSet, RecordSet (记录集)变量对应于Access数据库的一个表或子表.

(3) 打开数据库
Set db = OpenDatabase (Thisworkbooks.path & "\数据库名称.mdb" )
如果数据库有密码则下面格式打开
Set dbTemp = OpenDatabase("数据库路径及文件名", False, False, ";PWD=12345") 

(4) 打开表
Set RS = DB.OpenRecordset("表名", dbOpenDynaset)

Opendatabase 方法是打开数据库并返回此数据库的database对象,其语法如下:

Set database的对象变量=opendatabase ([路径及数据库名称],[除外性],[只读])
除外性:由true和false值所构成,当值为true时代表仅允许唯一的使用者使用数据库。
只读:由true和false值所构成,为true代表数据库仅提供读取的服务

Openrecordset方法用来创建一个新的recordset对象,语法为:
Set recordset 对象变量=数据库变量.openrecordset(来源,种类)
recordset种类有5种,分别为:表(table)、动态集(dynaset)、快照集(snapshot)、动态(dynamic)、正向(forward-only),其中常用的时动态集(dynaset)实际上是引用一个或多个表中数据记录的集合,是功能最强的数据记录集合类型,也是默认值。

(5) 操作数据库记录
对记录的操作就是使用记录集的对象方法和属性来实现,特附录常用属性和方法如下。

记录集对象的属性和方法:
rs.Recordcount属性 用来记录目前数据记录的数量,如判断数据库是否为空
rs.EOF 属性 是否是记录的尾
rs.BOF 属性 是否是记录的头
rs.Nomatch 属性 返回上次查找成功与否

rs.Move n 方法 移动到第n 条记录
rs.Movenext 方法 移动到下一条记录
rs.MovePrevious 方法 移动到上一条记录
rs.Movefirst 方法 移动到第一条记录
rs.Lastfirst 方法 移动到最后一条记录
rs.Delete 方法 删除当前记录
rs.Edit 方法 修改当前记录 (步骤为三步: 1. 用edit方法设置为修改状态;2. 将数据分别赋到记录的各字段;3.用Updata方法,把记录更新到数据库中)
rs.AddNew 方法 添加记录
(添加记录分三步:1. 用AddNew方法添加一个新的空白记录;2. 将数据分别赋到记录的各字段;3.用Updata方法,把记录更新到数据库中去)
rs.Updata 方法 更新内容到数据库中
rs.Findfirst "字段名= ' " & “查找内容” & " ' "  方法 查找记录中字段与内容相配的首条记录
rs.Findnext 方法 查找下一个匹配记录
rs.FindLast 方法 查找最后一个匹配记录
rs.FindPrevious方法 查找前一个匹配记录
rs.Close 方法 关闭 记录集关闭链接

字段集的属性方法:
rs. Fields.Count 属性 字段数目
rs. Fields(n) 第n+1个字段, Fields(0) 表示第一个字段
rs. Fields.Delete(Name As String) 方法 删除字段
rs. Fields.Append (Object As Object) 方法 添加字段
rs. Fields.Refresh 方法 更新

字段的属性方法:
rs. Fields(n).Name
rs. Fields(n).Size
rs. Fields(n).Type
rs. Fields(n).Fieldsize
rs. Fields(n).value

示例: 打开一个数据库,建立浏览, 查询, 修改, 删除, 添加等功能。
 
Option Explicit
Public totalRecs As Long, curRecNo As Long '用于记住 总记录数 和 当前记录号
Public DB1 As Database, RS1 As Recordset

Private Sub UserForm_Initialize()    '窗口显示
    Set DB1 = OpenDatabase(ThisWorkbook.Path & "\pallet.mdb")
    Set RS1 = DB1.OpenRecordset("pallet", dbOpenDynaset)
    If RS1.EOF And RS1.BOF Then
        MsgBox "Database is Null."
        cmdExit_Click
    Else
        RS1.MoveLast                 '指针移动到最后记录,以便统计记录总数
        RS1.MoveFirst
        totalRecs = RS1.RecordCount
        curRecNo = 1
        SetData                      '设置窗口参数,按钮是否可用
    End If
End Sub

Private Sub cmdFirst_Click()         '第一条记录
    RS1.MoveFirst
    curRecNo = 1
    SetData
End Sub

Private Sub cmdLast_Click()          '最后一条记录
    RS1.MoveLast
    curRecNo = totalRecs
    SetData
End Sub

Private Sub cmdPrevious_Click()      '前一条记录
    RS1.MovePrevious
    curRecNo = curRecNo - 1
    SetData
End Sub

Private Sub cmdNext_Click()          '下一条记录
    RS1.MoveNext
    curRecNo = curRecNo + 1
    SetData
End Sub

Private Sub cmdAdd_Click()           '增加一条记录
    Dim i As Integer
    RS1.AddNew
    For i = 1 To 5
        RS1.Fields(i) = Me.Controls("txt" & i)
    Next i
    RS1.Update
    totalRecs = totalRecs + 1
    curRecNo = totalRecs
    RS1.MoveLast
    SetData
End Sub

Private Sub cmdDelete_Click()        '删除当前记录
    RS1.Delete
    RS1.MoveNext
    If RS1.EOF = True Then
        RS1.MovePrevious             '指针到底就朝前移
        curRecNo = totalRecs - 1
    End If
    totalRecs = totalRecs - 1
    SetData
End Sub

Private Sub cmdModify_Click()        '修改当前记录
    Dim i As Integer
    RS1.Edit
    For i = 1 To 5
        RS1.Fields(i) = Me.Controls("txt" & i)
    Next i
    RS1.Update
End Sub

Private Sub cmdFind_Click()          '查找记录,与第一个文本框内容相等
    RS1.FindFirst "palletno='" & txt1.Text & "'"
    If RS1.NoMatch Then
        MsgBox "Sorry, find Nothing!"
    Else
        curRecNo = RS1.AbsolutePosition + 1
        SetData
    End If
End Sub

Private Sub cmdClear_Click()         '清除显示内容
    Dim i As Integer
    For i = 1 To 5
        Me.Controls("txt" & i) = ""
    Next i
End Sub

Private Sub cmdExit_Click()          '退出窗口
    RS1.Close
    DB1.Close
    Unload Me
End Sub

Sub SetData()                        '窗口数据设置
    Dim i As Integer
    txtCurRecNo.Text = curRecNo
    cmdFirst.Enabled = curRecNo > 1
    cmdPrevious.Enabled = curRecNo > 1
    cmdLast.Enabled = curRecNo < totalRecs
    cmdNext.Enabled = curRecNo < totalRecs
    For i = 1 To 5
        Me.Controls("txt" & i).Text = RS1.Fields(i)
    Next
End Sub

[此贴子已经被作者于2006-7-21 16:05:45编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-21 16:08 | 显示全部楼层

dJyY77Yf.rar (20.94 KB, 下载次数: 2081)


在网友的基础上修改完善做的一个例子。

大家可以学会基本的ADO方法使用Access数据库.

TA的精华主题

TA的得分主题

发表于 2006-7-21 16:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

一来就看到好东西,特别是55.56楼.赞!

楼主辛苦啦!

[em17]

TA的精华主题

TA的得分主题

发表于 2006-7-21 18:44 | 显示全部楼层
楼主辛苦啦,半年后又会增加一批好汉!

TA的精华主题

TA的得分主题

发表于 2006-7-21 20:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

写的很好呢,顶。。。

TA的精华主题

TA的得分主题

发表于 2006-7-21 22:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

期待后续,万分

TA的精华主题

TA的得分主题

发表于 2006-7-21 22:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 05:46 , Processed in 0.036504 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表