VB与EXCEL的连接

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

VB与EXCEL的连接[2009-1-610:31:00|By:jap]一、VB读写EXCEL表:VB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用MicrosoftExcel类型库:从工程菜单中选择引用栏;选择MicrosoftExcel9.0ObjectLibrary(EXCEL2000),然后选择确定。表示在工程中要引用EXCEL类型库。2、在通用对象的声明过程中定义EXCEL对象:DimxlAppAsExcel.ApplicationDimxlBookAsExcel.WorkBookDimxlSheetAsExcel.Worksheet3、在程序中操作EXCEL表常用命令:SetxlApp=CreateObject(Excel.Application)'创建EXCEL对象SetxlBook=xlApp.Workbooks.Open(文件名)'打开已经存在的EXCEL工件簿文件xlApp.Visible=True'设置EXCEL对象可见(或不可见)SetxlSheet=xlBook.Worksheets(表名)'设置活动工作表xlSheet.Cells(row,col)=值'给单元格(row,col)赋值xlSheet.PrintOut'打印工作表xlBook.Close(True)'关闭工作簿xlApp.Quit'结束EXCEL对象SetxlApp=Nothing'释放xlApp对象xlBook.RunAutoMacros(xlAutoOpen)'运行EXCEL启动宏xlBook.RunAutoMacros(xlAutoClose)'运行EXCEL关闭宏4、在运用以上VB命令操作EXCEL表时,除非设置EXCEL对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对EXCEL进行操作。但在EXCEL操作过程中关闭EXCEL对象时,VB程序无法知道,如果此时使用EXCEL对象,则VB程序会产生自动化错误。形成VB程序无法完全控制EXCEL的状况,使得VB与EXCEL脱节。二、EXCEL的宏功能:EXCEL提供一个VisualBasic编辑器,打开VisualBasic编辑器,其中有一工程属性窗口,点击右键菜单的插入模块,则增加一个模块1,在此模块中可以运用VisualBasic语言编写函数和过程并称之为宏。其中,EXCEL有两个自动宏:一个是启动宏(SubAuto_Open()),另一个是关闭宏(SubAuto_Close())。它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令xlBook.RunAutoMacros(xlAutoOpen)和xlBook.RunAutoMacros(xlAutoClose)来运行启动宏和关闭宏。三、VB与EXCEL的相互勾通:充分利用EXCEL的启动宏和关闭宏,可以实现VB与EXCEL的相互勾通,其方法如下:在EXCEL的启动宏中加入一段程序,其功能是在磁盘中写入一个标志文件,同时在关闭宏中加入一段删除此标志文件的程序。VB程序在执行时通过判断此标志文件存在与否来判断EXCEL是否打开,如果此标志文件存在,表明EXCEL对象正在运行,应该禁止其它程序的运行。如果此标志文件不存在,表明EXCEL对象已被用户关闭,此时如果要使用EXCEL对象运行,必须重新创建EXCEL对象。四、举例:1、在VB中,建立一个FORM,在其上放置两个命令按钮,将Command1的Caption属性改为EXCEL,Command2的Caption属性改为End。然后在其中输入如下程序:DimxlAppAsExcel.Application'定义EXCEL类DimxlBookAsExcel.Workbook'定义工件簿类DimxlsheetAsExcel.Worksheet'定义工作表类PrivateSubCommand1_Click()'打开EXCEL过程IfDir(D:\temp\excel.bz)=Then'判断EXCEL是否打开SetxlApp=CreateObject(Excel.Application)'创建EXCEL应用类xlApp.Visible=True'设置EXCEL可见SetxlBook=xlApp.Workbooks.Open(D:\temp\bb.xls)'打开EXCEL工作簿Setxlsheet=xlBook.Worksheets(1)'打开EXCEL工作表xlsheet.Activate'激活工作表xlsheet.Cells(1,1)=abc'给单元格1行驶列赋值xlBook.RunAutoMacros(xlAutoOpen)运行EXCEL中的启动宏ElseMsgBox(EXCEL已打开)EndIfEndSubPrivateSubCommand2_Click()IfDir(D:\temp\excel.bz)Then'由VB关闭EXCELxlBook.RunAutoMacros(xlAutoClose)'执行EXCEL关闭宏xlBook.Close(True)'关闭EXCEL工作簿xlApp.Quit'关闭EXCELEndIfSetxlApp=Nothing'释放EXCEL对象EndEndSub2、在D盘根目录上建立一个名为Temp的子目录,在Temp目录下建立一个名为bb.xls的EXCEL文件。3、在bb.xls中打开VisualBasic编辑器,在工程窗口中点鼠标键选择插入模块,在模块中输入入下程序存盘:Subauto_open()Opend:\temp\excel.bzForOutputAs#1'写标志文件Close#1EndSubSubauto_close()Killd:\temp\excel.bz'删除标志文件EndSub4、运行VB程序,点击EXCEL按钮可以打开EXCEL系统,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应用系统,均可同时进行操作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提示EXCEL已打开。如果在EXCEL中关闭EXCEL后再点EXCEL按钮,则会重新打开EXCEL。而无论EXCEL打开与否,通过VB程序均可关闭EXCEL。这样就实现了VB与EXCEL的无缝连接。阅读全文(5625)|回复(1)|反映问题|引用通告(0)|编辑标签:VBEXCEL上一篇:让程序登录之前就能自动运行下一篇:VB建立ACCESS数据库Re:VB与EXCEL的连接[2009-1-615:28:33|By:jap]1、在Excel表的顶端插入一个类似Access数据库字段名那样的表头,也就是列名,类似于“学号”、“姓名”这样的。2、在VB窗口添加一个ListBox控件,List1(我都不知道要用什么来显示分组,随便用这个了)。PrivateSubCommand1_Click()'工程-引用-MicrosoftActiveXDataObjects2.XLibraryDimxlConnAsNewADODB.ConnectionDimxlRsAsNewADODB.RecordsetDimstrConnAsStringDimxlCntAsIntegerDim学号()AsString,姓名()AsString'连接数据库的字符串,后面的“HDR=yes”需要注意,它的意思是把Excel表第一行作为字段名,第二行开始方是有效数据。HDR=no则反之,从第一行开始就看做有效数据。strConn=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=&App.Path&\Book1.xls;ExtendedProperties='Excel8.0;HDR=yes;IMEX=1''打开Excel连接xlConn.OpenstrConn'像打开数据库一样,使用SQL语言,打开名称为“sheet1”的工作表xlRs.Openselect*from[sheet1$],xlConn,adOpenStatic,adLockReadOnly'获得表中数据的记录数xlCnt=xlRs.RecordCount'读出名称为“Sheet1”的工作表里面的数据ReDim学号(xlCnt),姓名(xlCnt)Fori=1ToxlCnt学号(i)=Str(xlRs(学号))姓名(i)=xlRs(姓名)xlRs.MoveNextNext'全部读进数组之后,就可以开始分组啦,这里你可以随便按照你的要求改了Fori=1ToxlCntList1.AddItem(学号(i)&,&姓名(i))IfiMod4=0ThenList1.AddItem()Next'关闭sheet对象,关闭Excel连接xlRs.ClosexlConn.CloseSetxlRs=NothingSetxlConn=NothingEndSub2010年04月11日星期日09:03提问:=uc_push有一EXCEL文件,D:\客户资料.xls,sheet1的A列为客户ID号。建一VB工程,有控件TEXT1、COMMAND1、TEXT2、COMMAND2,在TEXT1里输入一个ID号,按COMMAND1,查找EXCEL文件中所对应的ID号,比如说在A6单元格,提取这个ID号所在行的第二个单元格,也就是B6单元格中的内容显示于TEXT2内,修改TEXT2中的内容,按COMMAND2,将修改后的TEXT2.TEXT填入B6单元格,完成。请问如何编写?谢谢!本人回答:PrivateSubCommand1_Click()IfZID(Text1)=0ThenMsgBox对不起,没找到您输入的ID!ElseSetxlApp=CreateObject(Excel.Application)'创建EXCEL对象xlApp.Visible=FalseSetxlBook=xlApp.Workbooks.Open(D:\客户资料.xls)Text2=xlApp.Worksheets(Sheet1).Range(A1).Cells(ZID(Form1.Text1),2)EndIfOnErrorResumeNextxlBook.Close(True)xlApp.ActiveWorkbook.ClosexlApp.QuitSetxlApp=NothingShelltaskkill.exe/imExcel.exe/f,vbHideEndSubFunctionZID(IDAsString)AsIntegerDimIAsIntegerSetxlApp=CreateObject(Excel.Application)'创建EXCEL对象xlApp.Visible=FalseSetxlBook=xlApp.Workbooks.Open(D:\客户资料.xls)I=1DoIfxlApp.Worksheets(Sheet1).Range(A1).Cells(I,1)=ThenZID=0ExitFunctionEndIfIfxlApp.Worksheets(Sheet1).Range(A1).Cells(I,1)=Form1.Text1ThenZID=IExitDoEndIfI=I+1LoopOnErrorResumeNextxlBook.Close(True)xlApp.ActiveWorkbook.ClosexlApp.QuitSetxlApp=NothingEndFunctionPrivateSubCommand2_Click()IfZID(Text1)=0ThenMsgBox对不起,没找到您输入的ID!ElseSetxlApp=CreateObject(Excel.Application)'创建E

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功