Access与Excel结合使用常用代码
excel vba汇总access表

excel vba汇总access表全文共四篇示例,供读者参考第一篇示例:Excel VBA与Access是微软Office系列中的两款办公软件,分别用于表格计算和数据库管理。
在实际工作中,经常会遇到需要将Access表中的数据导入到Excel表格中进行汇总分析的情况。
Excel VBA可以帮助我们轻松实现这一目标,下面将介绍一下如何使用Excel VBA汇总Access表的数据。
第一步:连接Access数据库要使用VBA来操作Access数据库,首先需要在Excel中建立连接。
在Excel中打开“开发者”选项卡,点击“Visual Basic”按钮,打开VBA编辑器。
在VBA编辑器中点击“工具”菜单下的“引用”,勾选“Microsoft ActiveX Data Objects x.x Library”和“Microsoft DAO x.x Object Library”,然后点击“确定”。
在VBA编辑器中,点击“插入”菜单下的“模块”,在新建的代码模块中输入以下代码来连接Access数据库:Sub ConnectAccessDatabase()Dim db As ObjectSet db = CreateObject("DAO.DBEngine.36")db.OpenDatabase "C:\Path\To\Your\Database.accdb"End Sub"C:\Path\To\Your\Database.accdb"是你的Access数据库文件的路径。
运行这段代码后,Excel就会成功连接到Access数据库。
第二步:导入数据到Excel表格通过连接Access数据库,我们可以使用SQL语句来查询数据库中的数据,并将结果导入到Excel表格中。
以下是一个例子,演示如何导入Access表中的数据到Excel表格:Sub ImportDataFromAccess()Dim rs As ObjectDim i As IntegerDim j As IntegerSet rs = CreateObject("DAO.Recordset")rs.Open "SELECT * FROM TableName", dbi = 1j = 1Do While Not rs.EOFFor j = 1 To rs.Fields.CountCells(i, j).Value = rs.Fields(j - 1)Next ji = i + 1rs.MoveNextLooprs.CloseEnd Sub在上面的代码中,"SELECT * FROM TableName"表示要查询的表格数据,TableName是Access数据库中的表格名称。
使用VBA实现Excel与Access数据的交互

使用VBA实现Excel与Access数据的交互提要:本文介绍了如何使用VBA(Visual Basic for Applications)编程语言来实现Excel和Access之间的数据交互。
VBA是一种内置于Microsoft Office套件中的编程语言,它可以用于自动化各种任务,包括数据的导入和导出。
通过使用VBA,可以轻松地将Excel和Access的数据进行传输和共享,实现数据的有效管理和分析。
引言:在现代业务环境中,数据的处理和分析变得越来越重要。
Excel和Access都是常用的数据处理工具,它们的结合使用可以增强数据的管理和分析功能。
然而,手动将数据从Excel复制粘贴到Access中是一项费时费力的任务。
通过使用VBA编程语言,我们可以轻松地实现Excel和Access之间的数据交互,将数据的导入和导出自动化,提高工作效率。
一、连接Excel和Access数据库:要实现Excel和Access之间的数据交互,首先需要建立它们之间的连接。
以下是建立连接的步骤:1. 在Excel中,按下“Alt + F11”打开VBA编辑器。
2. 在VBA编辑器中,选择“工具”>“引用”,勾选“Microsoft ActiveX Data Objects X.X Library”。
3. 在Excel的VBA编辑器中,插入一个新的模块。
4. 在模块中编写以下代码来建立与Access数据库的连接:```vbaDim conn As ObjectSet conn = CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\database.accdb"```在以上代码中,通过“CreateObject”函数创建了一个名为“conn”的连接对象,并通过“Open”方法打开了一个Access数据库文件(database.accdb)。
EXCEL与ACCESS链接方法1

另,建议使用事务机制处理数据.将connection.BeginTrans和mitTrans配合rs.addnew使用,VB+ACCESS试验数据表明,一百万条新数据插入,仅需要一分多钟,使用connection.execute 更新十万条数据时需要三五分钟.不使用事务应该会更久(根据先前经验,未测试).需要注意的是,使用rs.addnew时,rs的LockType不能使用adLockBatchOptimistic或adLockReadOnly,否则会报错1.2.3.4.Private Sub Command1_Click()5.Dim cnn1 As ADODB.Connection6.Dim rstTitles As ADODB.Recordset7.Dim strCnn As String8.Dim strTitle As String9.Dim strMessage As String10.11.' 打开连接。
12. strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Documents and Settings/桌面/新建 Microsoft Office Access 应用程序.mdb;Persist Security Info=False"13.Set cnn1 = New ADODB.Connection14. cnn1.Open strCnn15.16.Dim i As Long17.Dim t1 As String, t2 As String18. t1 = Time$()19. cnn1.BeginTrans20.21.Set rstTitles = New ADODB.Recordset22. rstTitles.LockType = adLockPessimistic '不能使用adLockBatchOptimistic或adLockReadOnly23. rstTitles.CursorType = adOpenDynamic24. rstTitles.Open "tab", cnn125.26.For i = 1 To 1027. rstTitles.AddNew28. rstTitles("a") = i29. rstTitles("b") = i30. rstTitles.Update31.Next i32.33. mitTrans34.35. rstTitles.Close36. cnn1.Close37.38. t2 = Time$()39.40. MsgBox t1 & " " & t241.End Sub42.EXCEL数据导入ACCESS方法43.44.任务: 把VBA所在表内容全部导入ACCESS数据库SA.mdb中,45. Excel表中有表头, 有26列, 几百行记录46.方法一: 逐行读入记录,47.Dim SQL As StringDim arrDim m, n As LongDim aa48.mydata = ThisWorkbook.Path& "\sa.mdb"With cnn '建立与数据库连接.Provider = "microsoft.jet.oledb.4.0".Open mydataEnd Withaa = Timer49.x = Sheet1.Range("a65536").End(xlUp).Row50.arr = Sheet1.Range(Cells(2, 1), Cells(x, 26)).Valuef = UBound(arr)g = UBound(arr, 2)51.For m = 1 To UBound(arr)SQL = "select * from sa"rs.Open SQL, cnn, adOpenKeyset, adLockOptimisticWith rs.AddNewFor n = 1 To UBound(arr, 2).Fields(n - 1).Value = arr(m, n)Next n.UpdateEnd Withrs.CloseNext m52.MsgBox "ok" & Timer - aa& "秒"53.cnn.CloseSet rs = NothingSet cnn = Nothing54.End Sub55.56.57.方法二: 直接一次性批量导入,简单直接,不过要注意动作之前Excel里不能存在空行或无效行,默认的它会把所有已经使用过的行(包括已经清空数值的空行)当作有效记录插入到ACCESS 的,58.Sub ImportToAccess()'Dim cnn As New ADODB.ConnectionSet cnn = New ADODB.Connectioncnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _"Data Source=" &ThisWorkbook.Path& "\db1.MDB;" & _"Jet OLEDB:Engine Type=4"SqlString = "INSERT INTO [sa] SELECT * FROM [Excel 8.0;DATABASE="&ThisWorkbook.FullName& ";HDR=YES].[sheet1$];"'MsgBox " &ThisWorkbook.FullName& "n.ExecuteSqlString60.MsgBox "数据导入成功!", vbInformationcnn.CloseSet cnn = NothingEnd Sub61.62.63.Access 连接字符串代码64.65.66.最近用ado搞一个access的数据库操作软件,在网上搜了一下。
(Excel + Access)分组汇总代码

(Excel+Access)分组汇总代码hits:537ExcelHome 初级 积分282 财富413¥ 技术0 注册时间 2006-9-17 总积分排名3000+∙发短消息∙加为好友[求助](Excel+Access)分组汇总代码各位老师,大家好!!本人初涉SQL ,近来根据工作需要,正在搞一个习作,碰到分组汇总难题,在此请教各位老师。
论坛中有爱歌老师的一例代码,《用leftjoin 对12个月同时汇总》,简化后见文件BOOK1,与本例有点相近。
如何将其代码中的材料编号、日期和数量分别替换为货号、元件名称和单件数量,并能应用到本例,请各位老师指点。
谢谢!简化后代码如下:Sub 汇总()DimSQL$,sql1$,sql2$,sql3$,i%,maxrow&,Cnn maxrow=Sheets("出货统计").[b65536].End(xlUp).RowSetCnn=CreateObject("ADODB.Connection")Cnn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties=Excel8.0;datasource="&ThisWorkbook.FullNameFori=1To12sql1=sql1&"数量"&i&","sql2=sql2&"("sql3=sql3&"leftjoin(select 材料编号,sum(数量)as 数量"&i&_ "from[出货统计$A2:I"&maxrow&"]wheremonth(日期)="&i&"groupby 材料编号)asc"&i&_"onb.材料编号=c"&i&".材料编号)"Nextsql1=Left(sql1,Len(sql1)-1) sql2=Left(sql2,Len(sql2)-1) sql3=Left(sql3,Len(sql3)-1)SQL="selectb.材料编号,"&sql1&"from("&sql2&"selectdistinct 材料编号"&_"from[出货统计$A2:I"&maxrow&"])asb"&sql3[B5].CopyFromRecordsetCnn.Execute(SQL)Cnn.Close:SetCnn=NothingEndSub将简化代码修改成如下:PrivateSubCommandButton2_Click()DimcnnAsNewADODB.Connection'声明变量DimrsAsNewADODB.RecordsetDimmyDataAsStringDimSQL$,sql1$,sql2$,sql3$,i%myData=ThisWorkbook.Path&"\参数.mdb"cnn.Open"Provider=Microsoft.Jet.Oledb.4.0;dataSource="&myDatacnn.OpenFori=1To20sql1=sql1&"单件数量"&i&","sql2=sql2&"("sql3=sql3&"leftjoin(select货号,sum(单件数量)as单件数量"&i&_ "from产品参数表where元件名称="&i&"groupby货号)asb"&i&_"ona.货号=b"&i&".货号)"Nextsql1=Left(sql1,Len(sql1)-1)sql2=Left(sql2,Len(sql2)-1)sql3=Left(sql3,Len(sql3)-1)'cnn.OpenSQL="selecta.货号,"&sql1&"from("&sql2&"selectdistinct货号"&_"from产品参数表)asa"&sql3[D6].CopyFromRecordsetcnn.Execute(SQL)cnn.Close:Setcnn=NothingEndSub代码修改运行后出错,显示“运行时错误'3705':对象打开时,不允许操作。
用VBA实现excel与access数据库交互

⽤VBA实现excel与access数据库交互1、将access中数据导⼊excelPublic Sub ImportData()Dim mydata As String, mytable As String, SQL As StringDim cnn As ADODB.ConnectionDim rs As ADODB.RecordsetActiveSheet.Cells.Clearmydata = ThisWorkbook.Path & "\成绩管理.mdb" '指定数据库mytable = "考试成绩" '指定'建⽴与数据库的连接Set cnn = New ADODB.ConnectionWith cnn.Provider = "microsoft.jet.oledb.4.0".Open mydataEnd WithSQL = "select 班级,avg(数学) as 数学平均,avg(语⽂) as 语⽂平均," _& "avg(物理) as 物理平均,avg(化学) as 化学平均,avg(英语) as 英语平均, " _& "avg(体育) as 体育平均,avg(总分) as 总分平均 " _& "from " & mytable & " group by 班级"Set rs = New ADODB.Recordsetrs.Open SQL, cnn, adOpenKeyset, adLockOptimistic'复制字段名For i = 1 To rs.Fields.CountCells(1, i) = rs.Fields(i - 1).NameNext i'复制全部数据Range("A2").CopyFromRecordset rsrs.Closecnn.CloseSet rs = NothingSet cnn = NothingEnd Sub2、将excel数据导⼊accessSub 把Excel数据插⼊数据库中()'*******************************************'时间:2010-06-28'作者:bengdeng'功能:把当前⼯作表的数据增加到在同⼀⽬录下表数据库中'注意:要在⼯具/引⽤中引⽤microsoft activex date objects x.x' 其中x.x为版本号,可能会因为你安装的office的版本不同⽽不同,本例引⽤了2.5版'发布:'*******************************************Dim conn As ADODB.ConnectionDim WN As StringDim TableName As StringDim sSql As StringDim tStr As String'数据库名,请⾃⾏修改,路径与当前在同⼀⽬录WN = "表.mdb"'数据库的表名与当前⼯作表名⼀致TableName = Set conn = New ADODB.Connectionconn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _"Extended Properties=Excel 8.0;" & _"Data Source=" & ThisWorkbook.Path & "\" & conn.OpenIf conn.State = adStateOpen ThensSql = "Insert Into [;DataBase=" & ActiveWorkbook.Path & "\" & WN & "]." & TableName & " Select * From [" & & "$]" conn.Execute sSqlMsgBox "成功把数据插⼊到“" & TableName & "”中!", , ""conn.CloseEnd IfSet conn = NothingEnd Sub。
将Excel中数据导入到Access数据库中的方法

将Excel中数据导⼊到Access数据库中的⽅法复制代码代码如下:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head id="Head1" runat="server"><title>⽆标题页</title><style type="text/css">.style1{height: 16px;}.style3{height: 23px;}</style></head><body><form id="form1" runat="server"><div></div><table align="center" border="1" bordercolor="honeydew" cellpadding="0"cellspacing="0"><tr><td style="FONT-SIZE: 9pt; COLOR: #ff0000; BACKGROUND-COLOR: #ff9933; TEXT-ALIGN: center"class="style1"></td><td colspan="2"style="FONT-SIZE: 9pt; COLOR: #ffffff; HEIGHT: 16px; BACKGROUND-COLOR: #ff9933; TEXT-ALIGN: center">将Excel数据写⼊Access数据库中</td></tr><tr><td style="BACKGROUND-COLOR: #ffffcc; TEXT-ALIGN: center"></td><td style="BACKGROUND-COLOR: #ffffcc; TEXT-ALIGN: center"><iframe id="I1" name="I1" scrolling="yes" src="学⽣成绩.xls"style="WIDTH: 407px; HEIGHT: 280px"></iframe></td><td style="WIDTH: 190px; BACKGROUND-COLOR: #ffffcc; TEXT-ALIGN: center"><asp:GridView ID="GridView1" runat="server" CellPadding="4" Font-Size="9pt"ForeColor="#333333" GridLines="None" Width="228px"><FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /><RowStyle BackColor="#FFFBD6" ForeColor="#333333" /><SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /><PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /><HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /><AlternatingRowStyle BackColor="White" /></asp:GridView></td></tr><tr><td style="BACKGROUND-COLOR: #ff9900; TEXT-ALIGN: center" class="style3"></td><td style="HEIGHT: 23px; BACKGROUND-COLOR: #ff9900; TEXT-ALIGN: center"valign="top"><asp:Button ID="Button3" runat="server" Font-Size="9pt" onclick="Button1_Click"Text="Excel数据写⼊Access数据库中" /><asp:Label ID="Label1" runat="server" Text="Label" Visible="False"style="font-size: x-small"></asp:Label></td><td style="WIDTH: 190px; HEIGHT: 23px; BACKGROUND-COLOR: #ff9900; TEXT-ALIGN: center"> <asp:Button ID="Button2" runat="server" Font-Size="9pt" onclick="Button2_Click"Text="数据库中显⽰Excel数据" /></td></tr><tr><td> </td></tr></table></form></body></html>复制代码代码如下:using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Data.OleDb;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}public OleDbConnection CreateCon(){string strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Server.MapPath("UserScore.mdb") + ";User Id=admin;Password=;";OleDbConnection odbc = new OleDbConnection(strconn);return odbc;}protected void Button1_Click(object sender, EventArgs e){//定义Excel列表string StyleSheet = "Sheet1";//调⽤⾃定义LoadData⽅法,将Excel⽂件中数据读到ASPNET页⾯中LoadData(StyleSheet);//定义查询的SQL语句string sql = "select ID,⽤户姓名,试卷,成绩,考试时间 from Score";//创建Oledb数据库连接OleDbConnection con = CreateCon();con.Open();//打开数据库连接OleDbCommand com = new OleDbCommand(sql, con);//开始事务OleDbTransaction tran = con.BeginTransaction();com.Transaction = tran;//创建适配器OleDbDataAdapter da = new OleDbDataAdapter(com);OleDbCommandBuilder cb = new OleDbCommandBuilder(da);//创建DataSet数据集DataSet ds = new DataSet();//填充数据集da.Fill(ds);int curIndex = 0;if (ds.Tables[0].Rows.Count > 0){curIndex = Convert.ToInt32(ds.Tables[0].Rows[0][0]);}//创建⼀个内存表DataTable tb = this.getExcelDate();string selsql = "";for (int i = 0; i < tb.Rows.Count; i++){string UserName = tb.Rows[i][0].ToString();selsql = "select count(*) from Score where ⽤户姓名='" + UserName + "'";}//判断Excel⽂件中是否已经导⼊到Access数据库中if (ExScalar(selsql) > 0){Label1.Visible = true;Label1.Text = "<script language=javascript>alert('该Excle中的数据已经导⼊数据库中!');location='Default.aspx'; </script>";}else{//循环读取Excel⽂件中数据,并添加到Access事先创建好的数据库表中for (int i = 0; i < tb.Rows.Count; i++){DataRow dr = ds.Tables[0].NewRow();dr[0] = ++curIndex;dr[1] = tb.Rows[i][0];dr[2] = tb.Rows[i][1];dr[3] = tb.Rows[i][2];dr[4] = tb.Rows[i][3];ds.Tables[0].Rows.Add(dr);}try{da.Update(ds);//执⾏插⼊操作mit();//事务提交Label1.Visible = true;Label1.Text = "<script language=javascript>alert('数据导⼊成功!');location='Default.aspx';</script>";}catch{tran.Rollback();//事务回滚Label1.Visible = true;Label1.Text = "<script language=javascript>alert('数据导⼊失败!');location='Default.aspx';</script>";}finally{con.Close();//关闭数据库连接}}}protected void Button2_Click(object sender, EventArgs e){string sqlstr = "select * from Score";OleDbConnection conn = CreateCon();conn.Open();OleDbCommand mycom = new OleDbCommand(sqlstr, conn);OleDbDataReader dr = mycom.ExecuteReader();dr.Read();if (dr.HasRows){GetDataSet(sqlstr);}else{Label1.Visible = true;Label1.Text = "<script language=javascript>alert('数据库中没有数据信息,请先导⼊再查询!');location='Default.aspx'; </script>";}dr.Close();conn.Close();}public DataSet GetDataSet(string sqlstr){OleDbConnection conn = CreateCon();OleDbDataAdapter myda = new OleDbDataAdapter(sqlstr, conn);DataSet ds = new DataSet();myda.Fill(ds);GridView1.DataSource = ds;GridView1.DataBind();return ds;}public DataTable getExcelDate(){string strExcelFileName = Server.MapPath("学⽣成绩.xls");string strcon = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";string sql = "select * from [Sheet1$]";OleDbDataAdapter da = new OleDbDataAdapter(sql, strcon);DataSet ds = new DataSet();da.Fill(ds);return ds.Tables[0];}public void LoadData(string StyleSheet){//定义数据库连接字符串 mstring strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + Server.MapPath("学⽣成绩.xls") + ";Extended Properties=Excel 8.0";//创建数据库连接OleDbConnection myConn = new OleDbConnection(strCon);//打开数据链接,得到⼀个数据集myConn.Open();//创建DataSet对象DataSet myDataSet = new DataSet();//定义查询的SQL语句string StrSql = "select * from [" + StyleSheet + "$]";//创建数据库适配器OleDbDataAdapter myCommand = new OleDbDataAdapter(StrSql, myConn);//填充数据集中的数据myCommand.Fill(myDataSet, "[" + StyleSheet + "$]");//释放占有的资源myCommand.Dispose();//关闭数据库连接myConn.Close();}public int ExScalar(string sql){OleDbConnection conn = CreateCon();conn.Open();OleDbCommand com = new OleDbCommand(sql, conn);return Convert.ToInt32(com.ExecuteScalar());conn.Close();}}。
access操作复制excel单元格vba
access操作复制excel单元格vba摘要:1.引言2.什么是VBA3.VBA 中Access 和Excel 的交互4.使用VBA 操作复制Excel 单元格5.总结正文:1.引言在办公自动化中,VBA(Visual Basic for Applications)是一种非常强大的编程语言。
它允许用户通过编写代码来自动执行一些重复性的任务,提高工作效率。
在本文中,我们将重点介绍如何使用VBA 操作复制Excel 单元格,以及如何在Access 和Excel 之间进行交互。
2.什么是VBAVBA 是一种基于Visual Basic 的编程语言,专为Microsoft Office 应用程序设计。
它允许用户通过编写代码来自动执行一些重复性的任务,从而提高工作效率。
VBA 可以应用于多种Office 应用程序,如Word、Excel、Access 等。
3.VBA 中Access 和Excel 的交互在实际工作中,Access 和Excel 经常需要相互交互。
例如,从Excel 表格中获取数据并将其导入到Access 数据库中,或者在Access 中执行某些操作并将结果输出到Excel 表格中。
要实现这些功能,我们需要使用VBA 来操作这两个应用程序。
4.使用VBA 操作复制Excel 单元格在Excel 中,我们可以使用VBA 代码来实现单元格的复制操作。
以下是一个简单的示例:```vbaSub CopyExcelCell()Dim ws As WorksheetDim rng As RangeDim Destination As Range" 设置工作表、单元格和目标单元格Set ws = ThisWorkbook.Worksheets("Sheet1")Set rng = ws.Range("A1")Set Destination = ws.Range("B1")" 复制单元格内容rng.Copy DestinationEnd Sub```这段代码首先定义了工作表、源单元格和目标单元格。
Excel数据导入到Access Sql
Excel数据导入到Access,Sql Server中示例代码2008-08-18 09:50将Excel中的数据导入到Access中,前提是在Access中的表已经建好。
dim conndim conn2set conn=CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Data Source=c:\book1.mdb"set conn2=CreateObject("ADODB.Connection")conn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Extended properties=Excel 5.0;Data Source=c:\book1.xls"sql = "SELECT * FROM [Sheet1$]"set rs = conn2.execute(sql)while not rs.eofsql = "insert into xxx([a],[b],[c],[d]) values('"& fixsql(rs(0)) &"','"& fixsql(rs(1)) &"','"& fixsql(rs(2)) &"','"& fixsql(rs(3)) &"')" conn.execute(sql)rs.movenextwendconn.closeset conn = nothingconn2.closeset conn2 = nothingfunction fixsql(str)dim newstrnewstr = strif isnull(newstr) thennewstr = ""elsenewstr = replace(newstr,"'","''")end iffixsql = newstrend function导入到Sql Server数据库中时,如果Excel文件和数据库不在同一台服务器上时,请参考上面的代码。
EXCELVBA连接ACCESS
EXCELVBA连接ACCESS 1、新建⼀个 .xlsm 的EXCEL⽂件,在保存时可选择保存类型
2、打开⽂件后,打开VBA开发环境,快捷键是 ALT+F11
3、引⽤ADO控件,在【⼯具】菜单下的【引⽤】选项卡中,选择Microsoft ActiveX Data Objects 6.1
4、插⼊⼀个模块,在模块中创建⼀个sub过程
5、定义连接对象
注意有两写法:
第⼀种:
Dim con As ADODB.Connection
Set con = New ADODB.Connection
第⼆种为简写:
Dim con As New ADODB.Connection
推荐第⼆种写法,简捷
6、连接数据库,也有两种⽅式
第⼀种:
第⼆种:
连接新后缀为accdb的ACCESS⽂件,驱动程序版本选择 microsoft.ace.oledb.12.0 这⾥的ThisWorkbook.Path & "\data.accdb"意思是
在当前EXCEL⽂件⽬录下有⼀个data.accdb的数据库⽂件
ThisWorkbook.Path 当前EXCEL⽂件所在⽬录
& "\data.accdb" 连接上⼀个数据库⽂件名
with写法中,数据库⽂件路径⽤con的ConnectionString属性
直接写法中,⽤data source
7、此时运⾏这个sub过程,即可打开ACCESS数据库了
此时仅仅是打开数据库,什么事也没做呢。
EXCEL导入ACCESS代码
Xcon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Xfn & ";" & _
"Extended Properties=Excel 8.0"
Dim i As Integer
Dim s As Integer
Dim xxrst As New ADODB.Recordset
Dim aarst As New ADODB.Recordset
xxrst.Open "SELECT * FROM [" & com1.Text & "]", Xcon, adOpenDynamic, adLockOptimistic
Private Sub ACcon()
Acon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Afn
Acon.CursorLocation = adUseClient
End Sub
Private Sub XLcon()
com1.Clear
Dim xrs As New ADODB.Recordset
cd1.Filter = "Excel 文件(*.xls)|*.xls|所有文件(*.*)|*.*"
cd1.CancelError = True
cd1.DialogTitle = "打开Excel文件"
End If
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel使用灵活但是处理数据量小(数据一多就会卡)Access能数据量大(相对于Excel)但是使用不灵活。
Excel与Access结合使用能相互弥补不足。
如用Access用为后台数据库对表进行筛选、汇总等一系列处理后再以Excel为前台导出数据,会比直接用Excel表刷选、汇总一个上万行的数据表快的多。
以下是几种access与Excel结合使用常用方法与代码。
1.Access导入表格代码
Sub 导入材料出库表()
DoCmd.SetWarnings False '取消警告
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改false 数据导入access中后表的列字段为“F1、F2、F3.....”。
2.创建Access窗体与按钮
1.创建窗体
点创建-窗体设计即调出窗体设计窗体界面。
2.创建按钮
点设计-按扭即可用鼠标在窗体中插入按钮。
按钮做好后会自动弹出“命令按钮向导”直接点取消。
右击按钮-事件生成器-代码生成器即进入此按钮的代码编辑区。
将光标放到Private Sub Command3_Click() 下面粘贴以下代码
DoCmd.SetWarnings False
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.Recordset
Dim cnn As ADODB.Connection
Range("d2:l10000").Clear
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").CopyFromRecordset rs
Range("A1:l10000").Font.Size = 10
Columns("g:k").Style = "Comma"
rs.Close
cnn.Close
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").CopyFromRecordset rs是表导出的起始位置,Range("d2")就是以d2单元格开始如改Range(“a2”)则从a2单元格开始。
复杂的SQL查询语句可以在Access中创建查询表,做符合要求的查询表后再将查询语句复制贴到Excel的代码中的SQL=””双引号中,但要注意的是SQL=之所以加双引号是因为SQL=后面是接字符串的,access的查询语句中包含引号要用字符串连接形式处理代码才能在Excel 的VBA运行。