EXCEL VBA 打开Access数据库文件
1、首先为导入文件设置一个按钮:(更新数据)
2、为“更新数据”按钮添加执行代码:
Private Sub Command87_Click()If MsgBox("请准备好导入的文件!", vbOKCancel, "打印确认") = 1 ThenDim xdlj As String 'xdlj:相对路径Dim dklj As String 'dklj:打开路径dklj = od()If Not (dklj = "") Thenxdlj = "SELECT 字段名称1,字段名称2,字段名称3," _& " INTO ACCESS中表名称 FROM [Excel 8.0;Database=" & dklj & "].[Plan$] WHERE 对EXCEL的筛选条件(可以省略);" '这句是最关键的DoCmd.SetWarnings False '关闭提示警告窗口DoCmd.RunSQL xdlj '运行SQLMsgBox "您于" & Now() & "更新数据成功!", vbInformation '人性化提示End IfEnd IfEnd Sub注意 OD() 意思是open dialogue 我自己定义的函数,为了打开选择文件的会话框:
代码如下:
Public Function od() 'OpendialogDim f As FileDialogSet f = Application.FileDialog(msoFileDialogFilePicker)'f.ShowIf f.Show = True Thenf.Filters.Clearf.Filters.Add "Excel文件", "*.xls"od = f.SelectedItems(1)ElseMsgBox "您中途选择了取消!"End IfEnd Function4、最终效果:
excel中:
ACCESS中:
rst.Open Sql, cn.ConnectionString 我的数据库语言不是很好,但看了你的代码,也觉得很乱,你的代码至少有好几种方法可以修改,上面是最简单的一种,实际上你的数据库在acapp.OpenCurrentDatabase的时候已经打开了,接下来根本就不需要再次使用cn进行连接。
所以第二种改法是:
acApp.OpenCurrentDatabase (dbPath)'Dim cn As ADODB.Connection '不需要再次连接'Set cn = acApp.CurrentProject.Connection '不需要再次连接Dim rst As ADODB.RecordsetSet rst = New ADODB.RecordsetDim Sql As StringSql = "Select * From 0012X32"rst.Open Sql, acApp.ADOConnectString '我只需要在这里调用连接的数据就可以了,而这个连接数据存储在acApp.ADOConnectString里面。rst.MoveFirst
下面是RecordSet的OPEN的用法:
Open 方法 (ADO Recordset)打开游标。语法recordset.Open Source, ActiveConnection, CursorType, LockType, Options参数Source 可选。Variant,计算有效的 Command 对象、SQL 语句、表名、存储过程调用、URL 或包含持久存储 Recordset 的文件名或 Stream 对象。ActiveConnection 可选。Variant,计算有效的 Connection 对象变量名,或包含 ConnectionString 参数的 String。CursorType 可选。CursorTypeEnum 值,确定在打开 Recordset 时提供者应使用的游标类型。默认值为 adOpenForwardOnly。LockType 可选。LockTypeEnum 值,确定在打开 Recordset 时提供者应使用的锁定(并发)类型。默认值为 adLockReadOnly。Options 可选。Long 值,指示提供者计算 Source 参数的方式(如果该参数表示除 Command 对象之外的某些内容),或者指示 Recordset 应该从以前保存过的文件中恢复。可以是一个或多个 CommandTypeEnum 或 ExecuteOptionEnum 值,这些值可以用位 AND 操作符组合。注意 如果从包含持久 Recordset 的 Stream 中打开 Recordset,那么使用 adAsyncFetchNonBlocking 的 ExecuteOptionEnum 值将不起作用;提取操作将同步进行并发生阻塞。adExecuteNoRecords 或 adExecuteStream 的 ExecuteOpenEnum 值不应与 Open 一起使用。因为ADO语言,直接提供了连接数据库的方法,所以我们可以直接这样来连接数据库:(算作本题的第三种改法吧)
Dim cn As New ADODB.Connection '直接创建对数据库连接的实例对象cncn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath '连接数据库Dim rst As New ADODB.RecordsetDim Sql As StringSql = "Select * From 0012X32"rst.Open Sql, cnrst.MoveFirstrst.Move (1)MsgBox rst.Fields(1).Value
Sub 把Excel数据插入数据库中()
Dim conn As ADODB.Connection
Dim WN As String
Dim TableName As String
Dim sSql As String
Dim tStr As String
'数据库名,请自行修改,路径与当前工作簿在同一目录
WN = "进销存表.mdb"
'数据库的表名与当前工作表名一致
TableName = ActiveSheet.Name
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & ActiveWorkbook.Name
conn.Open
If conn.State = adStateOpen Then
sSql = "Insert Into [;DataBase=" & ActiveWorkbook.Path & "\" & WN & "]." & TableName & " Select * From [" & ActiveSheet.Name & "$]"
conn.Execute sSql
MsgBox "成功把数据插入到“" & TableName & "”中!", , "http://excelba.com"
conn.Close
End If
Set conn = Nothing
End Sub
二、EXCEL的使用技巧:
(1) 分数的输入
如果直接输入“1/5”,系统会将其变为“1月5日”,解决办法是:先输入“0”,然后输入空格,再输入分数“1/5”。
(2) 序列“001”的输入
如果直接输入“001”,系统会自动判断001为数据1,解决办法是:首先输入“'”(西文单引号),然后输入“001”。
(3) 日期的输入
如果要输入“4月5日”,直接输入“4/5”,再敲回车就行了。如果要输入当前日期,按一下“Ctrl+;”键。
(4) 填充条纹
如果想在工作簿中加入漂亮的横条纹,可以利用对齐方式中的填充功能。先在一单元格内填入“*”或“~”等符号,然后单击此单元格,向右拖动鼠标,选中横向若干单元格,单击“格式”菜单,选中“单元格”命令,在弹出的“单元格格式”菜单中,选择“对齐”选项卡,在水平对齐下拉列表中选择“填充”,单击“确定”按钮。
(5) 多张工作表中输入相同的内容
几个工作表中同一位置填入同一数据时,可以选中一张工作表,然后按住Ctrl键,再单击窗口左下角的Sheet1、Sheet2......来直接选择需要输入相同内容的多个工作表,接着在其中的任意一个工作表中输入这些相同的数据,此时这些数据会自动出现在选中的其它工作表之中。输入完毕之后,再次按下键盘上的Ctrl键,然后使用鼠标左键单击所选择的多个工作表,解除这些工作表的联系,否则在一张表单中输入的数据会接着出现在选中的其它工作表内。
(6) 不连续单元格填充同一数据
选中一个单元格,按住Ctrl键,用鼠标单击其他单元格,就将这些单元格全部都选中了。在编辑区中输入数据,然后按住Ctrl键,同时敲一下回车,在所有选中的单元格中都出现了这一数据。
(7) 在单元格中显示公式
如果工作表中的数据多数是由公式生成的,想要快速知道每个单元格中的公式形式,以便编辑修改,可以这样做:用鼠标左键单击“工具”菜单,选取“选项”命令,出现“选项”对话框,单击“视图”选项卡,接着设置“窗口选项”栏下的“公式”项有效,单击“确定”按钮(如图2)。这时每个单元格中的分工就显示出来了。如果想恢复公式计算结果的显示,就再设置“窗口选项”栏下的“公式”项失效即可。
(8) 利用Ctrl+*选取文本
如果一个工作表中有很多数据表格时,可以通过选定表格中某个单元格,然后按下Ctrl+*键可选定整个表格。Ctrl+*选定的区域为:根据选定单元格向四周辐射所涉及到的有数据单元格的最大区域。这样我们可以方便准确地选取数据表格,并能有效避免使用拖动鼠标方法选取较大单元格区域时屏幕的乱滚现象。
(9) 快速清除单元格的内容
如果要删除内容的单元格中的内容和它的格式和批注,就不能简单地应用选定该单元格,然后按Delete键的方法了。要彻底清除单元格,可用以下方法:选定想要清除的单元格或单元格范围;单击“编辑”菜单中“清除”项中的“全部”命令,这些单元格就恢复了本来面目。
Shell "cmd /c start " & """" & """" & " " & """" & "C:\Users\RM Database.accdb" & """"
shell "C:\Users\RM Database.accdb"
闭隶夫西: 一、导入方法:Sub 把Excel数据插入数据库中()Dim conn As ADODB.ConnectionDim WN As StringDim TableName As StringDim sSql As StringDim tStr As String'数据库名,请自行修改,路径与当前工作簿在同一目录WN = "进销...
太原市13750767041: 如何利用excel vba连接access建立简单数据库?
闭隶夫西: 下面用ACCESS举个例子; 新建一个空数据库(或打开已有数据库文件),在弹出的数据库对话框中点击“新建”----导入表---在“导入”对话框中的“导入类型”中选“MS EXCEL”按路径找出你要导入的的EXCEL文件,就样就可以了 如果你要将EXCEL文件导入已有数据库表中,应注意EXCEL文件的字段设置与ACCESSS的字段应一致. 参考资料:http://hi.baidu.com/wfbin6
太原市13750767041: 如何用excel vba访问加密的access?
闭隶夫西: Set mydBase = wsMainWs..OpenDatabase(数据库名(含路径), True, False, "ms access;pwd=密码")
太原市13750767041: 怎么在excel vba中引用access中的数据 - ?
闭隶夫西: access是一个办公用的数据库.在excel可以通过VBA访问这个数据库 思路如下:1、建立数据库连接2 读取数据3 显示在excel中4 关闭连接.具体网上有很多代码.百度一下即可.关键字 VBA访问access数据库
太原市13750767041: 如何用VBA判断一个ACCESS是否打开 - ?
闭隶夫西: 可以使用宏来实现,给你一个简单的例子.Sub adoTest() Dim adoRt As Object Dim strSQL As String '// 创建ADO记录集对象 Set adoRt = CreateObject("ADODB.RecordSet") '// 设置SQL 语句 strSQL = "SELECT * FROM uTemp WHERE ...
太原市13750767041: Excel怎么链接到Access中 - ?
闭隶夫西: 以excel2007为例:(1)打开Access,点击新建【空白数据库】.(2)命名好文件名,选择好储存位置后,点击【创建】 (3)创建了以后,点击【外部数据——导入Excel】 (4)选择【通过创建链接表来链接到数据源】,再点击【浏览】,找到要导入的Excel表.(5)找到Excel表后,点击【打开】,点击【确定】 (6)显示出工作表的内容,点击【下一步】----勾选【第一行包含列标题】-----点击【下一步】 完成以后,Access上多了一个数据表,双击打开后,这个表上的数据都不能更改,这就是链接方式的优点之一.注意,一定要在Access中关闭这个表,Excel才能打开修改.
太原市13750767041: 请教怎么在access中用VBA导入excel数据到access库 - ?
闭隶夫西: 编程思路如下 1 创建数据库连接 2 读取excel文件数据 3 写入access数据库 4 断开数据库连接
太原市13750767041: 如何用 VBA 打开 ACCESS 中数据导入的对话窗口 - ?
闭隶夫西: 加句代码:DoCmd.OutputTo acOutputTable, [objectname], [outputformat], [outputfile], [autostart]
太原市13750767041: Excel VBA连接ACCESS数据库 - ?
闭隶夫西: 在access中导入excel数据,然后做你需要的处理.
太原市13750767041: VBA操作EXCEL与ACCESS问题 - ?
闭隶夫西: 给你个参考:Sub abc() Set x = CreateObject("adodb.connection") x.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName On Error Resume Next '如果数据库存在则跳过 Set y = ...