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 23:14 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
对我们新手来说确是好教材,楼主辛苦了,谢谢!

TA的精华主题

TA的得分主题

发表于 2006-7-22 00:27 | 显示全部楼层

support!keep it up.

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2006-7-22 10:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-7-22 10:26 | 显示全部楼层
QUOTE:
以下是引用gsq1122在2006-7-21 23:14:25的发言:
对我们新手来说确是好教材,楼主辛苦了,谢谢!

收集中,谢谢楼主!

TA的精华主题

TA的得分主题

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

我想了解一下这里的朋友分别都从事什么工作因而用到VBA编程呢???

并且,有没有通用化的VBA实用程序库?????

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 11:37 | 显示全部楼层

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

(2). 定义和生成ADO对象
1) Dim Cnn As New ADODB.Connection     ‘数据库连接Connection对象变量
2) Dim Rst As New ADODB.Recordset      ‘数据库记录集对象变量
3) Dim Fld As ADODB.Field              ‘记录字段对象变量

(3). 打开数据库
Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\CONTACT1.MDB;"
用定义生成的数据库连接对象的open方法,打开一个数据库。

(4).打开表或建立表的子表
Rst.Open "SELECT 字段名[,字段名] FROM 表名",Cnn, adOpenKeyset, adLockOptimistic
用记录集对象的open方法,打开或生成一个数据库的表或子表记录。
如:Rs1.Open "Person", Cnn, adOpenKeyset, adLockOptimistic   '取得联系人表所有记录集内容

(5). 操作数据库记录
对记录的操作就是使用记录集的对象方法和属性来实现,属性和方法其实与DAO的相似,这里就不多说。看下面示例,尽快学会使用ADO.
示例: 打开一个数据库,建立浏览, 修改, 删除, 添加和筛选等功能。
(使用ADO修改和删除记录时,最关键一条就是主关键字段要不能重复,所以我们需要建立主关键字段为自动编号类型格式,Access自动编号,这样就不会重复,否则出错!)

Option Explicit
Public totalRecs As Long, curRecNo As Long    '用于记住 总记录数 和 当前记录号
Public Cnn As ADODB.Connection                '定义全局数据库对象变量
Public Rs1 As ADODB.Recordset

'窗体启动程序
Private Sub UserForm_Initialize()
    Set Cnn = New ADODB.Connection                                '创建一个连接和打开 Cnn 连接
    Set Rs1 = New ADODB.Recordset                                 '创建一个记录集
    Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\CONTACT1.MDB;"
    Rs1.Open "Person", Cnn, adOpenKeyset, adLockOptimistic          '取得联系人表所有记录集内容
    Rs1.MoveLast
    totalRecs = Rs1.RecordCount
    curRecNo = 1
    Rs1.MoveFirst
    Call dis_form                                                  '显示数据记录到窗体
End Sub

'****[第一条]按钮程序 ****
Private Sub CommandButton1_Click()
    Rs1.MoveFirst
    curRecNo = 1
    Call dis_form
End Sub

'****[上一条]按钮程序 ****
Private Sub CommandButton2_Click()
    Rs1.MovePrevious
    curRecNo = curRecNo - 1
    Call dis_form
End Sub

'****[下一条]按钮程序 ****
Private Sub CommandButton3_Click()
    Rs1.MoveNext
    curRecNo = curRecNo + 1
    Call dis_form
End Sub

'****[最后一条]按钮程序 ****
Private Sub CommandButton4_Click()
    Rs1.MoveLast
    curRecNo = totalRecs
    Call dis_form
End Sub

'****[删除]按钮程序 ****
Private Sub CommandButton5_Click()
    Rs1.Delete
    totalRecs = totalRecs - 1
    Rs1.MoveNext
    If Rs1.EOF = True Then
        Rs1.MovePrevious
        curRecNo = curRecNo - 1
    End If
    Rs1.Update            '更新数据记录集,这点与DAO方法不同,DAO删除后不需更新
    Call dis_form
End Sub

'**** [关闭]按钮 ****
Private Sub CommandButton6_Click()
    Rs1.Close
    Cnn.Close
    Set Rs1 = Nothing: Set Cnn = Nothing    '删除对象
    Unload Me                               '关闭窗体
End Sub

'****[更新]按钮程序 ****
Private Sub CommandButton8_Click()
    On Error Resume Next
    Rs1.Fields(1) = TextBox1.Text
    Rs1.Fields(2) = TextBox2.Text
    Rs1.Fields(3) = TextBox3.Text
    Rs1.Fields(4) = TextBox4.Text
    Rs1.Fields(5) = TextBox5.Text
    Rs1.Fields(6) = TextBox6.Text
    Rs1.Fields(7) = TextBox7.Text
    Rs1.Fields(8) = TextBox8.Text
    Rs1.Update
End Sub
'****[查找]按钮程序 ****
Private Sub CommandButton10_Click()
    Dim Rs2 As New ADODB.Recordset
    Dim i As Integer
    Rs2.Open "select * from person where 联系人编号 like " _
     & TextBox1.Text, Cnn, adOpenKeyset, adLockOptimistic        ‘SQL语言使用,查询生成新的记录集
    If Rs2.EOF And Rs2.BOF Then
        MsgBox "Not find!"
    Else
       Sheets(1).Cells.ClearContents
       For i = 0 To Rs2.Fields.Count - 1
        Sheets(1).Cells(1, i + 1) = Rs2.Fields(i).Name
       Next
       Sheets(1).Cells(2, 1).CopyFromRecordset Rs2
       MsgBox "The find result is displayed in Excel."
    End If
    Rs2.Close
    Set Rs2 = Nothing
End Sub

'****[添加]按钮程序 ****
Private Sub CommandButton9_Click()
    Rs1.AddNew
    '添加一条记录,注意Fields(0)字段为主键且Access自动编号,这可以保证添加内容可以重复,否则出错
    totalRecs = totalRecs + 1
    Rs1.Fields(1) = TextBox1.Text
    Rs1.Fields(2) = TextBox2.Text
    Rs1.Fields(3) = TextBox3.Text
    Rs1.Fields(4) = TextBox4.Text
    Rs1.Fields(5) = TextBox5.Text
    Rs1.Fields(6) = TextBox6.Text
    Rs1.Fields(7) = TextBox7.Text
    Rs1.Fields(8) = TextBox8.Text
    Rs1.Update
    curRecNo = totalRecs
    Call dis_form
End Sub

'****在窗体上显示当前记录*****
Private Sub dis_form()
    TextBox1.Text = Rs1.Fields(1)
    TextBox2.Text = Rs1.Fields(2)
    TextBox3.Text = Rs1.Fields(3)
    TextBox4.Text = Rs1.Fields(4)
    TextBox5.Text = Rs1.Fields(5)
    TextBox6.Text = Rs1.Fields(6)
    TextBox7.Text = Rs1.Fields(7)
    TextBox8.Text = Rs1.Fields(8)
    CommandButton1.Enabled = curRecNo > 1
    CommandButton2.Enabled = curRecNo > 1
    CommandButton3.Enabled = curRecNo < totalRecs
    CommandButton4.Enabled = curRecNo < totalRecs
    TextBox9 = curRecNo
End Sub

(6).数据库使用SQL查询语言
数据库一般都提供了关连式数据库的查询语言SQL (Structured Query Language), 它是一种非常口语化、既易学又易懂的语法。此语言几乎是每个数据库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(DDL)以及资料的处理(DML)。
 对于SQL语言的使用,请参考别的专业教程,本文就简约介绍一下,示例中也仅用到一点SQL语言。
(6.1)资料定义DDL(Data Definition Language)
    资料定义语言是指对资料的格式和形态下定义的语言,他是每个数据库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什么字段元主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
如建表格:Create Table table_name (column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY], column2 DATATYPE [NOT NULL],...)

(6.2)资料操作DML(Data Manipulation Language)
    资料定义好之后接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、 查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分别介绍他们的语法:
增加资料:INSERT INTO table_name (column1,column2,...) VALUES ( value1,value2, ...)
查询资料:SELECT * FROM table_name WHERE conditions
更改资料:UPDATE table_name SET column1=''xxx'' WHERE conditoins
删除资料:DELETE FROM table_name WHERE conditions

[此贴子已经被作者于2006-7-22 12:42:40编辑过]

TA的精华主题

TA的得分主题

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

示例: 打开一个数据库,建立浏览, 修改, 删除, 添加和筛选等功能。使用ADO修改和删除记录时,最关键一条就是主关键字段不能重复,所以我们需要建立主关键字段为自动编号类型(Access自动编号),这样就不会重复,否则出错!

  A0uZUtMG.rar (85.16 KB, 下载次数: 1088)


[此贴子已经被作者于2006-7-22 12:41:30编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-22 12:10 | 显示全部楼层
文章不错,但是觉得简单了点,缺乏应有的示例或应用说明!

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 12:50 | 显示全部楼层
QUOTE:
以下是引用五彩缤纷在2006-7-22 12:10:13的发言:
文章不错,但是觉得简单了点,缺乏应有的示例或应用说明!

内容故意精简,所以需要自己动手练习,实在地去用了才知道。写上示例,大家看看就完了,没起到作用。

在此,我目的是让大家迅速上手,能懂Excel VBA最基本的使用及功能。在实战一段时间后,对更深刻的知识,就要个人去花更多时间和精力学习了。就这些内容的吃透,我想也是我花了很多精力的,比如ADO的使用,就没看到一个好的例子,没几本书有我的例子全面详细,还有好多例子是运行出错的,做的不好。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-5 07:44 , Processed in 0.025925 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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