VBA访问Access数据库

1. 通用自动化语言VBA

VBA(Visual Basic For Application是一种通用自动化语言,它可以使Excel中的常用操作自动化,还可以创建自定义的解决方案。

Excel中使用VBA的优点:

  • 使固定、重复的任务程序自动化,提高工作效率。
  • 可进行复杂的数据处理和分析。
  • 可自定义Excel函数、工具栏、菜单和界面。
  • 可连接多种数据库,并进行相应的操作。

宏是VBA的一种简单应用。宏可以通过编写VBA、录制宏两种方式获得。通常是先录制宏,再在获得的宏的基础上进行语句优化调整,最后得到想要的宏。

2. Excel中使用VBA操作Access数据库

在《谁说菜鸟不会数据分析(工具篇)》第四章 让报告自动化中,涉及到根据输入日期,从Access数据库中提取相关数据到Excel中相关操作。

打开VBA编辑器的两种方式:

  • Excel开发工具Visual Basic:打开VBE后,点击插入,选择模块,就可以在该项目下新建一个空白模块。
  • Excel开发工具插入控件右键控件指定宏:可以直接将宏绑定到控件上,然后进行编辑。

进行编写代码前的准备工作:

  • Visual Basic工具 →  引用:引用 Microsoft ActiveX Data Objects 2.x Library,否则运行代码会报“用户定义类型未定义”提示。

Excel中用VBA根据输入的日期从Access数据库中提取相应的数据并插入到Excel表中:

Sub 数据提取()

    '定义数据库链接对象AdoConn
Dim AdoConn As ADODB.Connection
'定义数据库存放路径
Dim MyData As String
'定义日期变量
Dim D1 As Date
'定义日期变量
Dim D2 As Date
'定义表示Ecxel行数的变量
Dim N As Integer '定义SQL字符串
Dim strSQL1 As String
'定义SQL字符串
Dim strSQL2 As String
'定义SQL字符串
Dim strSQL3 As String
'定义SQL字符串
Dim strSQL4 As String '初始化数据库连接对象
Set AdoConn = New ADODB.Connection
'指定数据库,该数据库放在当前Excel文件目录中,且名为“业务数据库.accdb”
MyData = ThisWorkbook.Path & "\业务数据库.accdb"
'日期输入对话框中的日期赋值给D1
D1 = InputBox("请输入需要提数的日期,例如:2011-9-4", "提数日期")
'将D2赋值为D1+1
D2 = D1 + 1 '将数据源表中第三列第一个空格单元格的行数赋值给N
N = ActiveSheet.Range("C1").End(xlDown).Row + 1
Debug.Print N '建立数据库链接,打开指定的数据库MyData
With AdoConn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyData
End With '在用户明细表中根据输入的日期查询当天有多少用户注册
strSQL1 = "SELECT count(用户ID) FROM 用户明细 WHERE 注册日期<#" & D2 & "# AND 注册日期>=#" & D1 & "#"
'在订购明细表中根据输入的日期查询当天有多少用户购买,注意去重
strSQL2 = "SELECT count(用户ID) FROM (SELECT DISTINCT 用户ID FROM 订购明细 WHERE 订购日期<#" & D2 & "# AND 订购日期>=#" & D1 & "#)"
'在订购明细表中根据输入的日期查询当天订单数和业务收入
strSQL3 = "SELECT count(订单编号), sum(订购金额) FROM 订购明细 WHERE 订购日期<#" & D2 & "# AND 订购日期>=#" & D1 & "#"
'在订购明细表中根据输入的日期查询截止到当前累计订购用户,注意去重
strSQL4 = "SELECT count(用户ID) FROM (SELECT DISTINCT 用户ID FROM 订购明细 WHERE 订购日期<=#" & D1 & "#)" '将新增用户数插入到数据源表的当前时间行的新增用户列
ActiveSheet.Cells(N, 3).CopyFromRecordset AdoConn.Execute(strSQL1)
'将订购用户数插入到数据源表的当前时间行的订购用户数列
ActiveSheet.Cells(N, 4).CopyFromRecordset AdoConn.Execute(strSQL2)
'将订单数和订购金额插入到数据源表当前时间行的订单数和业务收入列
ActiveSheet.Cells(N, 5).CopyFromRecordset AdoConn.Execute(strSQL3)
'经累计订购用户数插入到数据源表当前时间行的累计用户数列
ActiveSheet.Cells(N, 7).CopyFromRecordset AdoConn.Execute(strSQL4) '测试数据库是否连接成功
'If AdoConn.State = adStateOpen Then
' MsgBox "连接成功"
' AdoConn.Close
'End If MsgBox "数据提取完毕" '释放变量
Set AdoConn = Nothing End Sub

该宏是绑定在一个按钮控件上的,点击该按钮,会弹出输入日期提示框,根据提示输入日期,就可以从数据库中提取数据到Excel表中。

代码中访问的数据库是和Excel表放在同一目录下的,所以用ThisWorkbook.Path来构造的数据库路径。也可以使用数据库的绝对路径。

3. 参考资料

Excel中使用VBA访问Access数据库的更多相关文章

  1. c#程序中使用"like“查询access数据库查询为空的问题

    今天,在开发的过程中发现了一个特别奇怪的问题:access中like查询时候,在Access数据库中执行,发现可以查询出结果,这是在数据库上执行,select * from KPProj where ...

  2. c#程序中使用"like“查询access数据库语句的问题

    在写使用access数据库的c#程序过程中,遇到各种莫名奇妙的问题.例如使用"like"进行模糊查询,在access查询视图中要使用"*"做模糊匹配(sql中是 ...

  3. ADO访问Access数据库错误解决心得随笔

    最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下. 环境 win7 x86系统: VS2012编译器: Office2010: Access2000~ ...

  4. [转载]Unity3D 访问Access数据库

    在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来.写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过 ...

  5. Unity访问Access数据库

    首先,准备工作: 创建一个Access 数据库,命名AccessTest.accdb,添加一些数据用于测试 准备System.Data.dll与System.EnterpriseServices.dl ...

  6. 如何使用.net访问Access数据库 (转)

    前言:今天整理程序,看到之前写的一个Demo,也不知道是从哪里参考的了,写到这里,留作备用吧. 使用.net访问Access数据库:1.BL层:新增一个DataAccess类. Code].Defau ...

  7. C#.NET ORM 如何访问 Access 数据库 [FreeSql]

    最近很多 .net QQ 群无故被封停,特别是 wpf 群几乎全军覆没.依乐祝的 .net6交流群,晓晨的 .net跨平台交流群,导致很多码友流离失所无家可归,借此机会使用一次召唤术,有需要的请加群: ...

  8. 在Eclipse中使用JDBC访问MySQL数据库的配置方法

    在Eclipse中使用JDBC访问MySQL数据库的配置方法 分类: DATABASE 数据结构与算法2009-10-10 16:37 5313人阅读 评论(10) 收藏 举报 jdbcmysql数据 ...

  9. postman上传excel,java后台读取excel生成到指定位置进行备份,并且把excel中的数据添加到数据库

    最近要做个前端网页上传excel,数据直接添加到数据库的功能..在此写个读取excel的demo. 首先新建springboot的web项目 导包,读取excel可以用poi也可以用jxl,这里本文用 ...

随机推荐

  1. mysql索引相关理解

    1.索引是高效获取数据的数据结构, 2.唯一索引,索引值不重复unique create unique index 索引名 on 表名(字段) alter table 表名 add unique in ...

  2. linux网络编程、系统编程

    http://blog.csdn.net/lianghe_work/article/category/2871247

  3. struts2学习(3)struts2核心知识II

    一.struts.xml配置: 1.分模块配置方法: 比如某个系统多个模块,我们把资产管理模块和车辆管理模块,分开,在总的struts.xml配置文件中include他们: 工程结构: struts. ...

  4. Git出现提交错误--Push to origin/master was rejected(转)

    Step1:出现的问题? 在使用Git Push代码的时候,会出现Push to origin/master was rejected 的错误提示.在第一次提交到代码仓库的时候非常容易出现,因为初始化 ...

  5. Java-Runoob-高级课程:Java 8 新特性

    ylbtech-Java-Runoob-高级课程:Java 8 新特性 1.返回顶部 1. Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本. Or ...

  6. Web项目中定时任务无法绑定SessionFactory的问题解决

    正常我们在web开发中,由于需要在页面上或者脱离事务时使用到懒加载对应的对象,一般都采用Open Session In View模式.   Open Session In View   OpenSes ...

  7. Converter(转换器)与Formatter(格式化) ,Validator(验证器)

    Converter(转换器)与Formatter(格式化)都可以用于将一种对象类型转换为另一种对象类型.Converter是通用元件,可以在应用程序的任意层中使用,而Fotermatter这是专门为W ...

  8. 什么是 MVC ?

    本篇博客打算简单介绍一下MVC是什么,为接下来MVC的学习做一下铺垫. MVC是一种架构设计模式,是一种设计理念.是为了达到分层设计的目的,从而使代码解耦,便于维护和代码的复用.MVC是3个单词的缩写 ...

  9. java后台获取URL带参demo

    URL:http://aos.wall.youmi.net/v2/check_fb_sig?order=YM130402cygr_UTb42&app=30996ced018a2a5e& ...

  10. 【转】几款移动跨平台App开发框架比较

    原文地址:https://www.cnblogs.com/songxingzheng/p/6482697.html 整理目前流行的跨平台WebApp开发技术的特点,仅供参考. 每个框架几乎都包含以下特 ...