Access与Excel结合使用常用代码

合集下载

excel vba汇总access表

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实现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

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)分组汇总代码

(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数据库交互

⽤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数据库中的方法

将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>&nbsp;</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

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

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

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代码

EXCEL导入ACCESS代码
Set Xcon = New ADODB.Connection
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

EXCEL打开和读取ACCESS的几个方法

EXCEL打开和读取ACCESS的几个方法

EXCEL打开和读取ACCESS的⼏个⽅法EXCEL 打开和读取 ACCESS 的⼏个⽅法EXCEL 打开和读取 ACCESS 的⼏个⽅法1 -- Public Sub 例 7_1()Dim myData As StringDim myDb As DAO.Database '指定要打开的数据库名称 myData = ThisWorkbook.Path & "\NewData.mdb"If Dir(myData) = "" ThenMsgBox " 指定的数据库不存在! ", vbCritical, " ⽆法打开数据库 "Exit SubEnd If '打开数据库Set myDb = OpenDatabase(myData, True, False,";pwd=H1X2L3")'显⽰打开信息MsgBox " 已经成功打开指定的数据库! ",vbInformation,"打开数据库 "'判断数据库⽂件是否存在,如果不存在,就弹出警告信myDb.Close '关闭数据库Cells(i, 2) = TypeToTable(mytbl.Attributes)取数据表类型Next mytblSet myDb = Nothing'释放变量 End Sub2 -- P ublic Sub 例 7_2()Dim myDb As DAO.DatabaseDim mytbl As DAO.TableDef客户管理 .mdb"'指定数据库⽂件Dim i As Integer'准备⼯作表Cells.ClearRange("A1:B1") = Array(" 表名称 ", " 表类型 ") '建⽴与数据库的连接Set myDb = OpenDatabase(mydata)'开始获取表信息For Each mytbl In myDb.TableDefsCells(i, 1) = /doc/326045964.html'获取表名称'获Cells.Columns.AutoFit '关闭数据库myDb.Close '释放变量Set mytbl = NothingSet myDb = NothingEnd SubPublic Function TypeToTable(myValue As Long) As String Select Case myValueCase 2: TypeToTable = "ACCESS TABLE"Case -2147483648#: TypeToTable = "SYSTEM TABLE"Case 0: TypeToTable = "TABLE"End SelectEnd Function 3---Public Sub 例7_3()Dim myDb As DAO.DatabaseDim mytbl As DAO.TableDef客户管理.mdb" '指定数据库⽂件Dim i As Integer '准备⼯作表Cells.ClearRange("A1") = " 数据表名称" '开始获取数据表名称Set myDb = OpenDatabase(mydata)For Each mytbl In myDb.TableDefsIf Left(/doc/326045964.html, 4) <> "MSys"Then '或者使⽤语句'If mytbl.Attributes = 0 ThenCells(i, 1) = /doc/326045964.html'获取数据表名称End IfNext mytblCells.Columns.AutoFit '关闭数据库myDb.Close '释放变量Set mytbl = Nothing Set myDb = Nothing End Sub。

用代码将access中的数据生成Excel表格导出

用代码将access中的数据生成Excel表格导出

用代码将access中的数据生成Excel表格导出。

下面为代码:以下为引用的内容:<!--#include file="../conn.asp"--><%if session("china_admin")="" then response.redirect "login.asp"dbpath="../"dblinkdim filename,fs,myfile,x,m,n,o,linkSet fs = server.CreateObject("scripting.filesystemobject")Set rs = Server.CreateObject("ADODB.Recordset")session("sql") = "select * from china_car"rs.Open session("sql"),conn,1,1n=1'================================================================== '==============================================================建立e xcel文件系统filename = Server.MapPath("car/CarTable"&n&".xls") '这个是为了方便,新建一个CAR 的文件夹,这个可以自己设啦if fs.FileExists(filename) then'如果文件存在,覆盖它。

fs.DeleteFile(filename)end ifset myfile = fs.CreateTextFile(filename,true)'=================================================================== =====dim strLine,responsestrstrLine=""dim work,j,istr="序号|卡号|密码|积分数|金额"'这个根据你的access数据表字段设置。

EXCEL导入ACCESS数据库代码

EXCEL导入ACCESS数据库代码

EXCEL导入ACCESS^据库代码Dim Conn As ADODB.ConnectionSet Conn = New ADODB.ConnectionConn.Open "连接到你的数据库XJGL.MDB勺字符串"Conn.Execute "select * into tmptable from [excel 8.0;database=" + 你的 excel 表名 + "].[sheet 名$]"Conn.Execute "insert into xsda( 学籍号,准考证号 ,姓名,性别,出生年月,班级)select学籍号,准考证号,姓名,性别, 出生年月 , 班级 from tmptable"Conn.Execute "drop tabel tmptable"Set Conn = Nothing///////////////////////Sub LoadUsers()On Error Resume NextScreen.MousePointer = 11Dim xlspath As StringDim xlsConn As New ADODB.ConnectionDim xlsrs As New ADODB.RecordsetDim sql As StringDim totalRecords As Longxlspath = Text1sql = "select * from [Sheet1$]"With xlsConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &xlspath & ";ExtendedProperties=""Excel 8.0;HDR=Yes;IMEX=1"";".CommandTimeout = 5.OpenEnd Withxlsrs.Open sql, xlsConn, adOpenStatic, adLockReadOnlytotalRecords = xlsrs.RecordCountProgressBar1.Max = totalRecordsProgressBar1.Min = 0ProgressBar1.Value = 0Conn.Execute "delete from Users"Dim i As LongFor i = 0 To totalRecords - 1Conn.Execute "insert into Users (ID,Name,Shenfennums,Address) values(" & xlsrs(" 工号") & ",'" & xlsrs("员工名称 ") & "','" & xlsrs(" 身份证号码 ") & "','" &地址") & xlsrs(""')"ProgressBar1.Value = ProgressBar1.Value + 1xlsrs.MoveNextNextxlsrs.CloseSet xlsrs = NothingxlsConn.CloseScreen.MousePointer = 0 Unload Me End Sub //////////////////////////// Dim extend_str As String Dim execl_cnn As New ADODB.Connection Dim execl_rst As New ADODB.Recordset Dim execl_count_rst As New ADODB.Recordset ' 纪录数量Dim execl_field_rst As New ADODB.Recordset Dim execl_strconn As String Dim execl_strcmd As String Dim execl_count_str As String Dim insertStr As String ' 操作 oracle 数据库的记录集 Dim rst As ADODB.RecordsetCommonDialog1.ShowOpen extend_str = Right(CommonDialog1.FileName, 3) If (extend_str = "xls") Then execl_cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & CommonDialog1.FileName & _";Extended Properties=Excel 8.0;"ElseIf (extend_str = "dbf") Thenexecl_cnn.ConnectionString = "Provider=MSDASQL.1;Driver=Microsoft Visual FoxproDriver;SourceType=DBF;DBQ=" & getDir(CommonDialog1.FileName)execl_cnn.OpenEnd IfIf (extend_str = "xls") Thenexecl_strcmd = "SELECT * from 'Sheet1$' "execl_cou nt_str = "SELECT cou nt(*) from 'Sheet1$' "execl_field_rst.Open execl_count_str, execl_cnn If(execl_field_rst.Fields(0).Value = 0) Thenexecl_strcmd = "SELECT * from [" &getFileNoExt(getfile(CommonDialog1.FileName)) & "$] " execl_count_str = "SELECT count(*) from [" & getFileNoExt(getfile(CommonDialog1.FileName)) & "$] "End Ifexecl_field_rst.CloseElseIf (extend_str = "dbf") Thenexecl_strcmd = "SELECT * from " & CommonDialog1.FileName execl_count_str = "SELECT count(*) from " & CommonDialog1.FileNameEnd Ifexecl_rst.Open execl_strcmd, execl_cnnexecl_count_rst.Open execl_count_str, execl_cnnIf (CommonDialog1.FileName <> "") Then' 进度条设置ProgressBar1.Min = 0ProgressBar1.max = execl_count_rst.Fields(0).Value如果有记录If (execl_rst.RecordCount) ThenIf (Option1.Value) Then ' 如果是仪器总库If (execl_rst.Fields.Count = 8) ThenSet rst = yg_gain_table_recordset("yg_device")execl_rst.MoveFirstDo While (Not execl_rst.EOF)rst.AddNewrst.Fields(0).Value = yg_getNextId("yg_device_id")rst.Fields(1).Value = execl_rst.Fields(0).Value & "" rst.Fields(2).Value = execl_rst.Fields(1).Value & "" rst.Fields(3).Value =execl_rst.Fields(2).Value & "" rst.Fields(4).Value =execl_rst.Fields(3).Value & "" rst.Fields(5).Value =execl_rst.Fields(4).Value & "" rst.Fields(6).Value =execl_rst.Fields(5).Value & "" rst.Fields(7).Value =execl_rst.Fields(6).Value & "" rst.Fields(8).Value =execl_rst.Fields(7).Value & "" rst.Updateexecl_rst.MoveNextProgressBar1.Value = ProgressBar1.Value + 1 DoEventsLoopyg_free_recordset rstElseMsgBox " 结构不一致 "Exit SubEnd IfEnd IfIf (Option2.Value) Then ' 如果是外借仪器If (execl_rst.Fields.Count = 12) ThenSet rst = yg_gain_table_recordset("yg_out_device") execl_rst.MoveFirst Do While (Not execl_rst.EOF)rst.AddNewrst.Fields(0).Value = yg_getNextId("yg_out_device_id")rst.Fields(1).Value = execl_rst.Fields(0).Value & "" rst.Fields(2).Value = execl_rst.Fields(1).Value & "" rst.Fields(3).Value =execl_rst.Fields(2).Value & "" rst.Fields(4).Value =execl_rst.Fields(3).Value & "" rst.Fields(5).Value =execl_rst.Fields(4).Value & "" rst.Fields(6).Value =execl_rst.Fields(5).Value & "" rst.Fields(7).Value =execl_rst.Fields(6).Value & "" rst.Fields(8).Value =execl_rst.Fields(7).Value & "" rst.Fields(9).Value =execl_rst.Fields(8).Value & "" rst.Fields(10).Value =execl_rst.Fields(9).Value & "" rst.Fields(11).Value =execl_rst.Fields(10).Value & "" rst.Fields(12).Value =execl_rst.Fields(11).Value & "" rst.Updateexecl_rst.MoveNextProgressBar1.Value = ProgressBar1.Value + 1 DoEvents Loopyg_free_recordset rstElseMsgBox " 结构不一致 "Exit SubEnd IfEnd If。

access操作复制excel单元格vba

access操作复制excel单元格vba

access操作复制excel单元格vba摘要:1.介绍Access操作复制Excel单元格的背景和意义2.详述使用VBA编程实现Access操作复制Excel单元格的方法3.分析复制过程中可能遇到的问题及解决方案4.总结Access操作复制Excel单元格的实用性和注意事项正文:在日常的数据处理和工作中,Access操作复制Excel单元格是一项十分实用的技能。

尤其是在需要将Excel表格中的数据迁移到Access数据库时,掌握这一方法能够帮助我们更加高效地完成任务。

本文将介绍如何使用VBA编程实现Access操作复制Excel单元格,并分析复制过程中可能遇到的问题及解决方案。

首先,我们需要打开Access数据库,并创建一个VBA模块。

在模块中编写以下代码:```vbaOption ExplicitSub 复制Excel单元格()Dim xlApp As Excel.ApplicationDim xlWorkbook As Excel.WorkbookDim xlWorksheet As Excel.WorksheetDim accessDatabase As DatabaseDim accessTable As TableDim excelRange As RangeDim accessRange As Range" 启动Excel应用程序Set xlApp = New Excel.ApplicationxlApp.Visible = False" 打开Excel工作簿Set xlWorkbook = xlApp.Workbooks.Open(InputBox("请输入Excel文件的路径"))" 选择工作表Set xlWorksheet = xlWorkbook.Worksheets(1)" 获取Access数据库和表Set accessDatabase =Application.Datasources("your_access_database_path")Set accessTable =accessDatabase.TableDefs("your_access_table_name")" 设置Excel单元格范围Set excelRange = xlWorksheet.Range("A1:Z100")" 设置Access单元格范围Set accessRange = accessTable.DataBodyRange" 复制Excel单元格到AccessexcelRange.CopyaccessRange.PasteSpecial xlPasteValues" 关闭Excel工作簿xlWorkbook.Close False" 退出Excel应用程序xlApp.Quit" 提示完成MsgBox "复制完成!",vbInformationEnd Sub```上述代码中,请将"your_access_database_path"和"your_access_table_name"替换为实际的数据库路径和表名。

ACCESS和EXECL结合的简单说明

ACCESS和EXECL结合的简单说明

考试⼤编辑整理:ACCESS和EXECL结合的简单说明 引⽤EXCEL Dim xlApp As Excel.Application Dim xlBook As Workbook, xlSheet As Worksheet Set xlApp = CreateObject("Excel.Application") Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Open(EXECL⽂件名) '打开要输出的EXECL⽂件 Set xlSheet = xlBook.Worksheets(1) '打开⼯作表,这⾥是第⼀个,可以设其他 xlApp.Visible = True '显⽰ xlSheet.CELLS(3, 3) = "'" & 要输出的内容 'CELLS(⾏,列) 单元格 xlSheet.PrintPreview '如果是要打印,只要把 PrintPreview 改为 PrintOut xlBook.Close SaveChanges:=False xlApp.Quit '退出 **************** For iCols = 0 to rs.Fields.Count - 1 ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name Next ws.Range(ws.Cells(1, 1), _ ws.Cells(1, rs.Fields.Count)).Font.Bold = True ws.Range("A2").CopyFromRecordset rs ***************************** Private Sub CommandButton1_Click() Dim CNN As New ADODB.Connection Dim RST As New ADODB.Recordset Dim Stpath, strSQL As String Stpath = ThisWorkbook.Path & Application.PathSeparator & "学⽣档案.mdb" CNN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & Stpath '& ";Jet OLEDB:Database Password=" & "123" If ComboBox3.Value = "" Then strSQL = "Select * from 档案 WHERE 籍贯 LIKE '" & ComboBox2.Value & "'" ElseIf ComboBox2.Value = "" Then strSQL = "Select * from 档案 WHERE 性别 LIKE '" & ComboBox3.Value & "'" Else strSQL = "Select * from 档案 WHERE 性别 LIKE '" & ComboBox3.Value & "'" & "AND 籍贯 LIKE '" & ComboBox2.Value & "'" End If RST.Open strSQL, CNN Sheet1.Range("A2:G10000").ClearContents '删除原内容 Sheet1.Cells(2, 1).CopyFromRecordset RST RST.Close Set RST = Nothing '⽰放RST 的内存 Set CNN = Nothing '⽰放CNN的内存 End Sub。

Excel与Access功能结合的小技巧

Excel与Access功能结合的小技巧

Excel具备极强的数据分析能力,Access在数据库方面的功能却是Excel所不及的。

所以,若能将Excel及Access结合(界面及数据的结合)在一起,必定能为用户带来许多的便利。

一、在Access中输入Excel工作表(1) 利用“文件”菜单项中的“取外部数据”—“输入”功能,即可启动“输入工作表精灵”,在精灵的引导之下,就可容易地由外部取得数据表中的数据。

当然,这里所谓的数据,它不只是Excel的工作表,还包含了dBASE(*.DBF)、Microsoft Foxpro(*.dbc),Paradox(*.db),Lotus 1-2-3(*.wk*)及文本文件(*.txt)等。

(2) 你可选择文件中的任何一张工作表或已命名的范围,画面上均有可浏览的范例数据供参考。

(3) 输入工作表精灵后,精灵会询问在工作表中,第一是否含有栏名?一般都会有,这个部分,可以等到精灵完全将工作表转为数据表时,再经由数据工作表浏览画面去处理。

(4) 接下来,你可以决定是否要将某个栏位输入,是否要改变每个栏位的栏位名称,是否索引等。

(5) 最后,只要建立主索引,再输入数据表名称,聪明的精灵就会完成所有的工作了。

二、输出Excel工作表至Access中若不是在Access中,而是在Excel中要将工作表输出,可使用Excel中的Add-in(增强集)功能,先将“Access连结”这个增强功能勾选进来,之后,就可在Excel中直接将工作表输出至Access中。

三、输出Access数据表至Excel中这个部分就更自动化了,在Access中,只要选取好欲输出的数据表,利用菜单项中“工具”→“与Office连结”→“使用MS Excel进行分析”,或选择数据库工具栏上的“Office links”按钮中的“使用Ms Excel来分析它”,就会自动地将数据表转到Excel工作表中,并启动Excel开启这个工作表。

四、在Excel中建立Access画面及报表开启Excel“数据”菜单项中的“Access画面”,即可启动画面精灵;若选取“Access报表”,则启动报表精灵。

EXCEL导入ACCESS数据库代码

EXCEL导入ACCESS数据库代码

EXCEL导入ACCESS^据库代码Dim Conn As ADODB.ConnectionSet Conn = New ADODB.ConnectionConn.Open "连接到你的数据库XJGL.MDB勺字符串"Conn.Execute "select * into tmptable from [excel 8.0;database=" + 你的 excel 表名 + "].[sheet 名$]"Conn.Execute "insert into xsda( 学籍号,准考证号 ,姓名,性别,出生年月,班级)select学籍号,准考证号,姓名,性别, 出生年月 , 班级 from tmptable"Conn.Execute "drop tabel tmptable"Set Conn = Nothing///////////////////////Sub LoadUsers()On Error Resume NextScreen.MousePointer = 11Dim xlspath As StringDim xlsConn As New ADODB.ConnectionDim xlsrs As New ADODB.RecordsetDim sql As StringDim totalRecords As Longxlspath = Text1sql = "select * from [Sheet1$]"With xlsConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &xlspath & ";ExtendedProperties=""Excel 8.0;HDR=Yes;IMEX=1"";".CommandTimeout = 5.OpenEnd Withxlsrs.Open sql, xlsConn, adOpenStatic, adLockReadOnlytotalRecords = xlsrs.RecordCountProgressBar1.Max = totalRecordsProgressBar1.Min = 0ProgressBar1.Value = 0Conn.Execute "delete from Users"Dim i As LongFor i = 0 To totalRecords - 1Conn.Execute "insert into Users (ID,Name,Shenfennums,Address) values(" & xlsrs(" 工号") & ",'" & xlsrs("员工名称 ") & "','" & xlsrs(" 身份证号码 ") & "','" &地址") & xlsrs(""')"ProgressBar1.Value = ProgressBar1.Value + 1xlsrs.MoveNextNextxlsrs.CloseSet xlsrs = NothingxlsConn.CloseScreen.MousePointer = 0 Unload Me End Sub //////////////////////////// Dim extend_str As String Dim execl_cnn As New ADODB.Connection Dim execl_rst As New ADODB.Recordset Dim execl_count_rst As New ADODB.Recordset ' 纪录数量Dim execl_field_rst As New ADODB.Recordset Dim execl_strconn As String Dim execl_strcmd As String Dim execl_count_str As String Dim insertStr As String ' 操作 oracle 数据库的记录集 Dim rst As ADODB.RecordsetCommonDialog1.ShowOpen extend_str = Right(CommonDialog1.FileName, 3) If (extend_str = "xls") Then execl_cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & CommonDialog1.FileName & _";Extended Properties=Excel 8.0;"ElseIf (extend_str = "dbf") Thenexecl_cnn.ConnectionString = "Provider=MSDASQL.1;Driver=Microsoft Visual FoxproDriver;SourceType=DBF;DBQ=" & getDir(CommonDialog1.FileName)execl_cnn.OpenEnd IfIf (extend_str = "xls") Thenexecl_strcmd = "SELECT * from 'Sheet1$' "execl_cou nt_str = "SELECT cou nt(*) from 'Sheet1$' "execl_field_rst.Open execl_count_str, execl_cnn If(execl_field_rst.Fields(0).Value = 0) Thenexecl_strcmd = "SELECT * from [" &getFileNoExt(getfile(CommonDialog1.FileName)) & "$] " execl_count_str = "SELECT count(*) from [" & getFileNoExt(getfile(CommonDialog1.FileName)) & "$] "End Ifexecl_field_rst.CloseElseIf (extend_str = "dbf") Thenexecl_strcmd = "SELECT * from " & CommonDialog1.FileName execl_count_str = "SELECT count(*) from " & CommonDialog1.FileNameEnd Ifexecl_rst.Open execl_strcmd, execl_cnnexecl_count_rst.Open execl_count_str, execl_cnnIf (CommonDialog1.FileName <> "") Then' 进度条设置ProgressBar1.Min = 0ProgressBar1.max = execl_count_rst.Fields(0).Value如果有记录If (execl_rst.RecordCount) ThenIf (Option1.Value) Then ' 如果是仪器总库If (execl_rst.Fields.Count = 8) ThenSet rst = yg_gain_table_recordset("yg_device")execl_rst.MoveFirstDo While (Not execl_rst.EOF)rst.AddNewrst.Fields(0).Value = yg_getNextId("yg_device_id")rst.Fields(1).Value = execl_rst.Fields(0).Value & "" rst.Fields(2).Value = execl_rst.Fields(1).Value & "" rst.Fields(3).Value =execl_rst.Fields(2).Value & "" rst.Fields(4).Value =execl_rst.Fields(3).Value & "" rst.Fields(5).Value =execl_rst.Fields(4).Value & "" rst.Fields(6).Value =execl_rst.Fields(5).Value & "" rst.Fields(7).Value =execl_rst.Fields(6).Value & "" rst.Fields(8).Value =execl_rst.Fields(7).Value & "" rst.Updateexecl_rst.MoveNextProgressBar1.Value = ProgressBar1.Value + 1 DoEventsLoopyg_free_recordset rstElseMsgBox " 结构不一致 "Exit SubEnd IfEnd IfIf (Option2.Value) Then ' 如果是外借仪器If (execl_rst.Fields.Count = 12) ThenSet rst = yg_gain_table_recordset("yg_out_device") execl_rst.MoveFirst Do While (Not execl_rst.EOF)rst.AddNewrst.Fields(0).Value = yg_getNextId("yg_out_device_id")rst.Fields(1).Value = execl_rst.Fields(0).Value & "" rst.Fields(2).Value = execl_rst.Fields(1).Value & "" rst.Fields(3).Value =execl_rst.Fields(2).Value & "" rst.Fields(4).Value =execl_rst.Fields(3).Value & "" rst.Fields(5).Value =execl_rst.Fields(4).Value & "" rst.Fields(6).Value =execl_rst.Fields(5).Value & "" rst.Fields(7).Value =execl_rst.Fields(6).Value & "" rst.Fields(8).Value =execl_rst.Fields(7).Value & "" rst.Fields(9).Value =execl_rst.Fields(8).Value & "" rst.Fields(10).Value =execl_rst.Fields(9).Value & "" rst.Fields(11).Value =execl_rst.Fields(10).Value & "" rst.Fields(12).Value =execl_rst.Fields(11).Value & "" rst.Updateexecl_rst.MoveNextProgressBar1.Value = ProgressBar1.Value + 1 DoEvents Loopyg_free_recordset rstElseMsgBox " 结构不一致 "Exit SubEnd IfEnd If。

Access中一句查询代码实现Excel数据导入导出

Access中一句查询代码实现Excel数据导入导出

Access中⼀句查询代码实现Excel数据导⼊导出摘 要:⽤⼀句查询代码,写到vba中实现Excel数据导⼊导出,也可把引号中的SQL语句直接放到查询分析器中执⾏正 ⽂:导⼊数据(导⼊数据时第⼀⾏必须是字段名):DoCmd.RunSQL "Insert INTO 表名 Select * FROM [Excel 8.0;DATABASE=E:\桌⾯\测试数据.xls].[Sheet1]"DoCmd.RunSQL"InsertINTO表名Select∗FROM[Sheet1] IN 'E:\桌⾯\测试数据.xls'[EXCEL 8.0;]"DoCmd.RunSQL "Insert INTO 表名 Select * FROM [Sheet1$] IN 'E:\桌⾯\测试数据.xls' 'EXCEL 8.0;'"导出数据:DoCmd.RunSQL "Select * INTO [Excel 8.0;DATABASE=E:\桌⾯\测试数据.xls].[Sheet1] FROM 表名"DoCmd.RunSQL "Select * INTO [Sheet1] IN 'E:\桌⾯\测试数据.xls'[EXCEL 8.0;] FROM 表名"DoCmd.RunSQL "Select * INTO [Sheet1] IN 'E:\桌⾯\测试数据.xls' 'EXCEL 8.0;' FROM 表名"要点:DoCmd.RunSQL为VBA中的代码,导⼊时⼯作表名称后⾯要加(如Sheet1),⽽导出时却不能加(如Sheet1),另外⽰例代码中的Sheet1可以是其它名称(如“测试数据”)。

最初的写法: [Excel 8.0;DATABASE=E:\桌⾯\测试数据.xls].Sheet1 这个是参考帮助⽂档写的,经过仔细测试验证,的确存在问题,所以建议⼤家不要再⽤了,看样⼦帮助中的东西也不能全信,问题不少出处:Processing math: 100%。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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运行。

相关文档
最新文档