EXCEL vba 数据库连接
听语音
原创
|
浏览:7393
|
更新:2016-06-23 16:12
|
标签:EXCEL VBA
1
2
3
4
5
分步阅读
vba可以连接数据库并获取数据库的信息进行显示。
工具/原料
EXCEL2007
方法/步骤
1
首先在开发工具选项卡中插入一个表单控件(按钮)。
2
拖拽出按钮后会d出指定宏的窗口,这里我们新建宏。
3
新建按钮单击后,进入模块代码编辑界面,这里开始编辑代码。
4
如图,代码已经编辑好了,这里为大家解析一下代码的功能:
Dim cn As Object '定义数据链接对象 ,保存连接数据库信息
Dim rs As Object '定义记录集对象,保存数据表
Set cn = CreateObject("ADODBConnection") '创建数据链接对象
Set rs = CreateObject("ADODBRecordSet") '创建记录集对象,用于接收数据查询获得的结果集
Dim strCn As String, strSQL As String '字符串变量
strCn = "Provider=sqloledb;Server=(local);Database=yourdatabasename;Uid=sa;Pwd=yourpassword;" '定义数据库链接字符串
strSQL = "select bookname,price,author from book" '设置SQL语句
cnOpen strCn '打开连接
rsOpen strSQL, cn‘读取数据库中的数据
Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表
Set sht = ThisWorkbookWorksheets("sheet1")
’循环读取数据并将数据显示到excel中
Do While Not rsEOF '当数据指针未移到记录集末尾时,循环下列 *** 作
shtCells(i, 1) = rs("bookname") '把当前记录的字段1的值保存到sheet1工作表的第i行第1列
shtCells(i, 2) = rs("price") '把当前字段2的值保存到sheet1工作表的第i行第2列
shtCells(i, 3) = rs("author") '把当前字段2的值保存到sheet1工作表的第i行第2列
rsMoveNext '把指针移向下一条记录
i = i + 1 'i加1,准备把下一记录相关字段的值保存到工作表的下一行
Loop '循环
rsClose '关闭记录集,至此,程序将把某数据表的字段1和字段2保存在excel工作表sheet1的第1、2列,行数等于数据表的记录数
5
执行结果与数据库中结果对比
你所说的动态数据库是什么类型的文件有几个方法可以实现,首先最接近你描述的方法是数据透视表其次是插入对象 *** 作再者是公式函数SUMIF,VLOOKUP,等号等之类的 *** 作,不太明白你具体的情况暂时没确定哪种适合
我讨论了Excel 2007和Excel 2010 Beta中存在的错误。以下是该条目的摘要:
当报表工作簿中的Excel范围名称引用数据库工作簿中的表单范围名称时,如果先打开报表工作簿,然后再打开数据库工作簿,则Excel会删除报表工作簿在数据库工作簿中引用的所有表单范围名称。
如果您不使用工作表范围的名称,那么此建议意义不大。因此,让我们先讨论打印范围来讨论范围名称的范围
分配打印区域时,实际上是在为工作表分配范围名称“ Print_Area”。然后,在打印工作表时,如果已定义,则Excel仅打印Print_Area范围。
这种方法在早期的Excel中非常有效,当时工作簿只能有一个工作表。但是后来,Microsoft在1993年用Excel 5引入了多页工作簿。据说,微软正在向一组
开发人员演示Excel 5的早期版本。其中一个问:“我们现在可以在一个工作簿中放几张纸。但是我们只能有一个Print_Area范围名称。那么我们如何为工作簿中的每张图纸分配一个打印区域?”
程序员挤在舞台上,故事走了,最后告诉开发人员:“我们会尽快就此与您联系。”
程序员想出的是一种限定范围名称的方法。即,Excel范围名称可以具有工作簿范围或工作表范围。若要查看它们的工作原理,假设您定义“ Foo”以引用新工作簿的第1页的某些范围。
默认情况下,这将是一个工作簿范围的名称。现在,在工作表2中,假设您将工作表的区域定义为“ Sheet2!Foo”。这样做会将范围定义为工作表范围的名称。
(新Excel中的“新名称”对话框提供了一个下拉列表框,与以前的Excel版本相比,它使您可以更轻松地指定范围。)
现在让我们看看这些名称是如何工作的……
激活图纸2按F5键,在“转到”对话框中输入“ Foo”作为“参考”,然后按OK。Excel将为工作表2选择工作表范围的名称。
激活图纸3再次使用GoTo对话框转到“ Foo”。这次,Excel将选择由工作簿作用域名称定义的范围,该名称参考表1。
激活图纸3使用“转到”对话框转到“ Sheet2!Foo”。这次,Excel将选择由工作表范围名称定义的范围名称,该名称指的是工作表2。
一个工作簿中可以有一个工作簿作用域名称,但是与工作表一样多。
这使我们进入了数据库工作簿……
到目前为止,我建议在数据库工作簿中使用多个工作表。例如,您可以在名为Actual的工作表中拥有一个数据库,而在名为Target的工作表中拥有另一个数据库。
可以为这两个数据库分配工作表范围的名称Data。使用这种方法,您可以使用以下引用来引用两个范围:
= [Databasexls]实际!数据
= [Databasexls]目标!数据
在Excel 2007之前,这种方法非常有效。但是,正如我在博客条目中对Excel漏洞(与Excel 2007(可能还有Excel 2010))中所述的那样,必须在打开报表工作簿之前打开Databasexls(或Databasexlsx)。如果首先打开报表工作簿,则Excel将在数据库工作簿中找到报表工作簿所依赖的所有工作表范围的名称,然后自动删除它们。
那么,解决此错误的最佳方法是什么?
在我的博客文章中,我提供了三种选择:使用Excel 2003,先打开数据库工作簿,或者在数据库工作簿中不要使用工作表范围的名称。最后的建议似乎是最好的长期解决方案。
也就是说,当您设置数据库和报表工作簿时,请按照设置范围名称以将报表连接到Excel数据库,第1部分中的说明来设置数据库工作簿。然后,当您需要其他数据库时-用于目标或在不同的时间时间段,
或者逻辑上不同的数据,或者其他任何内容,请在单独的工作簿中创建这些数据库。
然后,当您打开报表工作簿时,可以使用“编辑链接”对话框打开所有数据库工作簿。为此……
在New Excel中,选择“数据”,“连接”,“编辑链接”
在Classic Excel中,选择“编辑”,“链接”
最后,在“编辑链接”对话框中,选择列表中的所有工作簿,然后选择“开源”。当您这样做时,Excel将打开所有这些数据库工作簿。
这是我目前听到和研究的最好建议。如果我有更好的建议或者读者这边有更好的建立,我会一直与大家讨论并研究和大家一起分享的。
以上就是关于vbaExcel连接数据库的好处全部的内容,包括:vbaExcel连接数据库的好处、Excel动态链接外部数据库、设置将报表连接到Excel数据库-excel连接数据库-Excel学习网等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)