Excel使用灵活但是处理数据量小(数据一多就会卡)Access能数据量大(相对于Excel)但是使用不灵活。Excel与Access结合使用能相互弥补不足。如用Access用为后台数据库对表进行筛选、汇总等一系列处理后再以Excel为前台导出数据,会比直接用Excel表刷选、汇总一个上万行的数据表快的多。以下是几种access与Excel结合使用常用方法与代码。
1. Access导入表格代码
Sub 导入材料出库表()
DoCmd.SetWarnings Fal '取消警告
DoCmd.RunSQL "DELETE FROM 材料出库表" '删除材料出库表
DoCmd.TransferSpreadsheet acImport, 8, "材料出库表", _
“F:\材料出库明细.xls", _
True, "sheet1!a2:ag20000" '导入材料出库明细表中的sheet1表a2:ag20000区域的数据
DoCmd.SetWarnings True
End Sub '恢复警告
谈论
注:DoCmd.TransferSpreadsheet acImport, 8, "材料出库表", “F:\材料出库明细.xls", True, "sheet1!a2:ag20000" 此句代码中的"材料出库表"是表明导入到Access中的材料出库表中,参数true表明以导入数据的第一行作为列字段如将true改fal 数据导入access中后表的列字段为“F1、F2、F3.....”。
2. 创建Access窗体与按钮
1. 创建窗体
点创建-窗体设计即调出窗体设计窗体界面。
2. 创建按钮
点设计-按扭即可用鼠标在窗体中插入按钮。
按钮做好后会自动弹出“命令按钮向导”直接点取消。
右击按钮-事件生成器-代码生成器即进入此按钮的代码编辑区。
将光标放到Private Sub Command3_Click()上下五千年 下面粘贴以下代码续签合同
DoCmd.SetWarnings Fal
DoCmd.RunSQL "DELETE FROM 材料出库表"
DoCmd.TransferSpreadsheet acImport, 8, "材料出库表", _
“F:\材料出库明细.xls", _
True, "sheet1!a2:ag20000"
DoCmd.SetWarnings True
关闭代码界面回到窗体设计界面,点右下角窗体视图,
再点刚做好的按钮,“\\192.168.1.32\成本\ERP导出表\导入access\材料出库明细.xls”的数据就会导入到access中的材料出库表中,
将不同的代代码放入按钮中就能实现不同功能的按钮。
3. Access导出到Excel表
Access导出Excel表方法很多(最简单的方法直接在Access点导出)这里介绍以Excel作为前台Access作为后台取数据的方法。
新建一个Excel打开Alt+F11 打开电影金球奖VBE窗口
点右键-插入-模块
这时会弹出模块1的界面并且光标在此界面闪。将以下代码贴入此模块,按F5即可运行此
模块就可从Access导出数据(注运行时出现警告“用户类型未定义”这是没有对Microsoft ActiveX Data Object X Library 2.8 引用点工具-引用将Microsoft ActiveX Data Object X Library2.8打下勾即可)
Sub 导出材料汇总()
Dim mydata$, SQL$, hh%
Dim rs As ADODB.Recordt
Dim cnn As ADODB.Connection
Range("d2:l10000").Clear
keeping mydata = "\\192.168.1.32\成本\ERP导出表\基础数据.accdb"
Set cnn = New ADODB.Connection
With cnn
方阵
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open mydata
End With
SQL = "SELECT DISTINCT 材料出库表.工单号, 材料出库表.仓库, 材料出库表.领料部门, 材料出库表.物料类型," _
& " 材料出库表.物料名称, 材料出库表.单位, Sum(材料出库表.实发数量) AS 实发数量之总计, Sum(材料出库表.金额)" _
& " AS 金额之总计, 材料出库表.领料用途 FROM 材料出库表 GROUP BY 材料出库表.领料部门, 材料出库表.仓库, 材料出库表.工单号, " _
& " 材料出库表.物料类型, 材料出库表.物料名称,材料出库表.单位, 材料出库表.领料用途"
Set rs = cnn.Execute(SQL)
With Range(Cells(1, 1), Cells(1, rs.Fields.Count))
.HorizontalAlignment = xlCenter
End With
Range("d2").CopyFromRecordt rs
Range("A1:l10000").Font.Size = 10
Columns("g:k").Style = "Comma"
rs.Clo
cnn.Clo
Set rs = Nothing
Set cnn = Nothing
End Sub
注:Set cnn = New ADODB.Connection
With cnn
男人痣相图 .Provider = "Microsoft.ACE.OLEDB.12.0"
.Open mydata
End With
这段代码是建立与Access文件的连接。(access文件不用打开通过后台连接Access的数据)
SQL = "SELECT DISTINCT 材料出库表.工单号, 材料出库表.仓库, 材料出库表.领料部门, 材料出库表.物料类型," _
& " 材料出库表.物料名称, 材料出库表.单位, Sum(材料出库表.实发数量) AS 实发数量之
总计, Sum(材料出库表.金额)" _
& " AS 金额之总计, 材料出库表.领料用途 FROM 材料出库表 GROUP BY 材料出库表.领料部门, 材料出库表.仓库, 材料出库表.工单号, " _
& " 材料出库表.物料类型, 材料出库表.物料名称,材料出库表.单位, 材料出库表.领料用途"
这段代码是SQL查询命令,修改这段代码可将各种所需的表导出。
代码Range("d2").CopyFromRecordt rs是表导出的起始位置,Range("d2")就是以d2单元格开始如改Range(“a2”)则从a2单元格开始。
复杂的SQL查询语句可以在Access中创建查询表,做符合要求的查询表后再将查询语句复制贴到Excel的代码中的SQL=” ” 双引号中,但要注意的是SQL=之所以加双引号是因为SQL=后面是接字符串的,access的查询语句中包含引号要参观工厂用字符串连接形式处理代码才能在Excel的VBA运行。