📄 实现vb与excel的无缝连接_mysky.htm
字号:
href="http://hi.baidu.com/gallonchai/friend">好友</A> </DIV></DIV>
<DIV class=stage>
<DIV class=stagepad>
<DIV style="WIDTH: 100%">
<TABLE class=modth cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=modtl width=7> </TD>
<TD class=modtc noWrap>
<DIV class=modhead><SPAN class=modtit>查看文章</SPAN></DIV></TD>
<TD class=modtc noWrap align=right></TD>
<TD class=modtr width=7> </TD></TR></TBODY></TABLE>
<DIV class=modbox id=m_blog>
<DIV class=tit>实现VB与EXCEL的无缝连接</DIV>
<DIV class=date>2007-08-27 13:10</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt id=blog_text>
<P>实现VB与EXCEL的无缝连接</P>
<P>VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序 τ萌砑 奈 すぷ鞔 醇
蟮牟槐恪R虼擞泻芏喑绦蛟毕衷谝丫 浞掷
肊XECL的强大报表功来实现报表功能。但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。</P>
<P> 一、 VB读写EXCEL表:</P>
<P> VB本身提自动化功能可以读写EXCEL表,其方法如下:</P>
<P> 1、在工程中引用Microsoft Excel类型库:</P>
<P> 从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object
Library(EXCEL2000),然后选择"确定"。表示在工程中要引用EXCEL类型库。</P>
<P> 2、在通用对象的声明过程中定义EXCEL对象:</P>
<P>Dim xlApp As Excel.Application<BR>Dim xlBook As Excel.WorkBook<BR>Dim
xlSheet As Excel.Worksheet</P>
<P> 3、在程序中操作EXCEL表常用命令:</P>
<P>Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象<BR>Set xlBook
= xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件<BR>xlApp.Visible = True
'设置EXCEL对象可见(或不可见)<BR>Set xlSheet = xlBook.Worksheets("表名")
'设置活动工作表<BR>xlSheet.Cells(row, col) =值
'给单元格(row,col)赋值<BR>xlSheet.PrintOut '打印工作表<BR>xlBook.Close (True)
'关闭工作簿<BR>xlApp.Quit '结束EXCEL对象<BR>Set xlApp = Nothing
'释放xlApp对象<BR>xlBook.RunAutoMacros (xlAutoOpen)
'运行EXCEL启动宏<BR>xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏</P>
<P> 4、在运用以上VB命令操作EXCEL表时,除非设置EXCEL对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对
EXCEL进行操作。但在EXCEL操作过程中关闭EXCEL对象时,VB程序无法知道,如果此时使用EXCEL对象,则VB程序会产生自动化错误。形成
VB程序无法完全控制EXCEL的状况,使得VB与EXCEL脱节。</P>
<P> 二、 EXCEL的宏功能:</P>
<P> EXCEL提供一个Visual Basic编辑器,打开Visual
Basic编辑器,其中有一工程属性窗口,点击右键菜单的"插入模块",则增加一个"模块1",在此模块中可以运用Visual
Basic语言编写函数和过程并称之为宏。其中,EXCEL有两个自动宏:一个是启动宏(Sub Auto_Open()),另一个是关闭宏(Sub
Auto_Close())。它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令
xlBook.RunAutoMacros (xlAutoOpen)和xlBook.RunAutoMacros (xlAutoClose)
来运行启动宏和关闭宏。</P>
<P> 三、 VB与EXCEL的相互勾通:</P>
<P> 充分利用EXCEL的启动宏和关闭宏,可以实现VB与EXCEL的相互勾通,其方法如下:</P>
<P> 在EXCEL的启动宏中加入一段程序,其功能是在磁盘中写入一个标志文件,同时在关闭宏中加入一段删除此标志文件的程序。VB程序在执行时通过判断此标志文件存在与否来判断EXCEL是否打开,如果此标志文件存在,表明EXCEL对象正在运行,应该禁止其它程序的运行。如果此标志文件不存在,表明
EXCEL对象已被用户关闭,此时如果要使用EXCEL对象运行,必须重新创建EXCEL对象。</P>
<P> 四、举例:</P>
<P> 1、在VB中,建立一个FORM,在其上放置两个命令按钮,将Command1的Caption属性改为EXCEL,Command2的Caption属性改为End。然后在其中输入如下程序:</P>
<P>Dim xlApp As Excel.Application '定义EXCEL类<BR>Dim xlBook As
Excel.Workbook '定义工件簿类<BR>Dim xlsheet As Excel.Worksheet '定义工作表类</P>
<P>Private Sub Command1_Click() '打开EXCEL过程<BR> If Dir("D:\temp\excel.bz")
= "" Then '判断EXCEL是否打开<BR> Set xlApp = CreateObject("Excel.Application")
'创建EXCEL应用类<BR> xlApp.Visible = True '设置EXCEL可见<BR> Set xlBook =
xlApp.Workbooks.Open("D:\temp\bb.xls") '打开EXCEL工作簿<BR> Set xlsheet =
xlBook.Worksheets(1) '打开EXCEL工作表<BR> xlsheet.Activate
'激活工作表<BR> xlsheet.Cells(1, 1) = "abc"
'给单元格1行驶列赋值<BR> xlBook.RunAutoMacros (xlAutoOpen)
运行EXCEL中的启动宏<BR> Else<BR> MsgBox ("EXCEL已打开")<BR> End If<BR>End Sub</P>
<P>Private Sub Command2_Click()<BR> If Dir("D:\temp\excel.bz") <> ""
Then '由VB关闭EXCEL<BR> xlBook.RunAutoMacros (xlAutoClose)
'执行EXCEL关闭宏<BR> xlBook.Close (True) '关闭EXCEL工作簿 <BR> xlApp.Quit
'关闭EXCEL<BR> End If<BR> Set xlApp = Nothing '释放EXCEL对象<BR> End<BR>End
Sub</P>
<P> 2、在D盘根目录上建立一个名为Temp的子目录,在Temp目录下建立一个名为"bb.xls"的EXCEL文件。</P>
<P> 3、在"bb.xls"中打开Visual Basic编辑器,在工程窗口中点鼠标键选择插入模块,在模块中输入入下程序存盘:<BR>Sub
auto_open()<BR> Open "d:\temp\excel.bz" For Output As #1 '写标志文件<BR> Close
#1<BR>End Sub<BR>Sub auto_close()<BR> Kill "d:\temp\excel.bz"
'删除标志文件<BR>End Sub</P>
<P> 4、运行VB程序,点击EXCEL按钮可以打开EXCEL系统,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应用系统,均可同时进行操作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提示EXCEL已打开。如果在EXCEL中关闭EXCEL后再点EXCEL按钮,则会重新打开EXCEL。而无论EXCEL打开与否,通过VB程序均可关闭EXCEL。这样就实现了VB与EXCEL的无缝连接。</P>
<P></P></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章
href="http://hi.baidu.com/gallonchai/blog/category/vb_ÆäËû">类别:vb_其他</A> | <A
title=将此文章添加到百度搜藏 onclick="return addToFavor();"
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN
id=result></SPAN>) | <A
href="http://hi.baidu.com/gallonchai/blog/item/71550fb57813ffcc37d3ca0f.html#send">评论</A> (0)
<SCRIPT language=javascript>/*<![CDATA[*/var pre = [true,'listview控件里的数据导出到excel', 'listview控件里的数据导出到exce...','/gallonchai/blog/item/10b7a6d3d518f8dda9ec9ac2.html'];var post = [true,'功能强大的SendMessage函数','功能强大的SendMessage函数', '/gallonchai/blog/item/7b4aff18a7e0200534fa4158.html'];if(pre[0] || post[0]){ document.write('<div style="height:5px;line-height:5px;"> </div><div id="in_nav">'); if(pre[0]){ document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' + pre[2] + '</a> '); } if(post[0]){ document.write('下一篇:<a href="' + post[3] + '" title="' + post[1] + '">' + post[2] + '</a>'); } document.write('</div>');}/*]]>*/</SCRIPT>
</DIV>
<DIV class=line></DIV>
<STYLE type=text/css>#in_related_doc A {
TEXT-DECORATION: none
}
</STYLE>
<DIV id=in_related_tmp></DIV>
<SCRIPT language=javascript type=text/javascript>/*<![CDATA[*/function HI_MOD_IN_RELATED_DOC_CALLBACK(arg){ if(arg.length <= 1) return false; var hasMore = arg[0]; var D=function(A,B){A[A.length]=B;} if(arg.length % 2 == 0) D(arg, ["","","",""]); var html = ['<div id="in_related_doc"><div class="tit">相关文章:</div>']; D(html, '<table cellpadding="0" cellspacing="3" border="0">'); for(var i = 1, j = arg.length; i < j; i += 2){ D(html, '<tr>'); D(html, '<td width="15px"><a style="font-size:25px" >•</a></td><td><a href="http://hi.baidu.com/' + arg[i][3] + '/blog/item/' + arg[i][2] + '.html" target="_blank" title="' + arg[i][0] + '">' + arg[i][1] + '</a>'); D(html, new Array(10).join('\u3000')); D(html, '</td>'); if(arg[i + 1][0] != "") D(html, '<td width="15px"><a style="font-size:25px" >•</a></td><td><a href="http://hi.baidu.com/' + arg[i + 1][3] + '/blog/item/' + arg[i + 1][2] + '.html" target="_blank" title="' + arg[i + 1][0] + '">' + arg[i + 1][1] + '</a></td>'); else D(html, '<td> </td><td> </td>'); D(html, '</tr>'); } if(hasMore) D(html, '<tr><td colspan="4"><a target="_blank" href="/sys/search?pageno=1&type=7&sort=1&word=%CA%B5%CF%D6VB%D3%EBEXCEL%B5%C4%CE%DE%B7%EC%C1%AC%BD%D3&item=71550fb57813ffcc37d3ca0f">更多>></a></td></tr>'); D(html, '</table></div><div class="line"> </div>'); var div = document.getElementById('in_related_tmp'); if(div){ div.innerHTML = html.join(''); while(div.firstChild){ div.parentNode.insertBefore(div.firstChild, div); } div.parentNode.removeChild(div); } window.setTimeout("tracker_init('in_related_doc')",100);}if(RelatedDocData == -1){ // not supported xhr var script = document.createElement('script'); script.type = 'text/javascript'; script.src = '/sys/search?type=8&word=%CA%B5%CF%D6VB%D3%EBEXCEL%B5%C4%CE%DE%B7%EC%C1%AC%BD%D3&item=71550fb57813ffcc37d3ca0f&t=' + new Date().getTime(); document.getElementsByTagName('HEAD')[0].appendChild(script);}else if(RelatedDocData == null){ GetAndEval = true;}else{ eval(RelatedDocData);}/*]]>*/</SCRIPT>
<DIV id=in_reader>
<DIV class=tit>最近读者:</DIV>
<SCRIPT> var g_spAnnony=true;var g_read=[ ["renqidong","3229beaac0cbb1bcc0d7cf01","惊浪奔雷"], ["kibom","8ad8a2b887cea2b871696503","⒏囄⒏qi"],{}];g_read.length=g_read.length-1;var _rh1="";var _rh2="";function wrreader(){ _rh1 += '<table width="100%" ><tr>'; _rh2+='<tr>'; if(g_spAnnony){ _rh1+='<td align="center" width="10%" ><img border="0" width="55" height="55" src="http://img.baidu.com/hi/img/portraitn.jpg"></td>'; _rh2+='<td> </td>'; if(g_read.length>0){ _rh1+='<td align="left" width="12%">'; }else{ _rh1+='<td align="left" width="100%">'; } _rh1+="<a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"' target='_self'>登录</a>后,您就出现在这里。</td>"; _rh2+='<td> </td>' } if(g_read.length==0){ if(!g_spAnnony){ _rh1+='<td align=left width="100%">最近还没有登录用户看过这篇文章……</td>'; _rh2+='<td> </td>'; } }else{ for(i=0,len=g_read.length;i<len;i++){ _rh1+='<td align="center" valign="bottom" width="10%" class="user"><a href="/'+g_read[i][0]+'" target="_blank"><img border="0" src="http://himg.baidu.com/sys/portraitn/item/'+g_read[i][1]+'.jpg"></a></td>'; _rh2+='<td align="center" valign="top" class="user"><a href="/'+g_read[i][0]+'" target="_blank">'+g_read[i][2]+'</a></td>'; } } _rh1+='<td width="100%"></td></tr>'; _rh2+='<td></td></tr></table>'; document.write(_rh1+_rh2);}wrreader();</SCRIPT>
</DIV>
<DIV class=line></DIV>
<SCRIPT language=JavaScript>allkey=allkey+"268962d15d40ed389b5027b9_71550fb57813ffcc37d3ca0f_";</SCRIPT>
<DIV id=in_comment><A name=comment></A>
<DIV class=tit>网友评论:</DIV>
<SCRIPT>function writecmt(type,id,cmtname,cmturl,portraitId){ var html1=""; if(type==1){ html1="<a href='"+cmturl+"' target='_blank' title='"+cmturl+"'><img border='0' src='http://himg.baidu.com/sys/portraitn/item/"+portraitId+".jpg'><br>"+cmtname+"</a>"; }else{ if(cmtname=="" || cmtname=="匿名网友"){ if(cmturl==""){ html1="<a>匿名网友</a>"; }else{ html1="<a href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a>"; } }else{ if(cmturl==""){ html1="<div class='f14' style='display:inline'>网友:<a>"+cmtname+"</a></div>"; }else{ html1="<div class='f14' style='display:inline'>网友:<a href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a></div>"; } } } document.write(html1);}</SCRIPT>
<DIV id=page></DIV></DIV>
<DIV id=in_send><A name=send></A>
<FORM id=popFormSubmit name=form1 onsubmit="return checkcmtform()"
action=/gallonchai/commit method=post><INPUT type=hidden value=8 name=ct> <INPUT
type=hidden value=1 name=cm> <INPUT type=hidden value=71550fb57813ffcc37d3ca0f
name=spBlogID>
<SCRIPT language=JavaScript> document.write("<input type='hidden' name='spRefURL' value='"+window.location.href+"'>");</SCRIPT>
<DIV class=tit>发表评论:</DIV>
<TABLE cellSpacing=5 cellPadding=0 width=620 border=0>
<TBODY>
<TR>
<TD class=f14>姓 名:</TD>
<TD><INPUT id=spBlogCmtor style="WIDTH: 220px" onfocus=hidErr(1);
tabIndex=1 maxLength=49 onchange="checkname('spBlogCmtor')"
name=spBlogCmtor>
<SCRIPT>document.write(" <a href='http://passport.baidu.com/?reg&tpl=sp&return_method=get&skip_ok=1&u=http://hi.baidu.com/sys/reg/' target='_blank'>注册</a>");document.write(" | <a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"'>登录</a>");</SCRIPT>
<DIV id=nmerror style="DISPLAY: none">*姓名最长为50字节</DIV></TD></TR>
<TR id=1_err style="DISPLAY: none">
<TD> </TD>
<TD>
<DIV class=error id=1_err_con></DIV></TD></TR>
<TR>
<TD class=f14>网址或邮箱:</TD>
<TD><INPUT id=spBlogCmtURL style="WIDTH: 360px" onfocus=hidErr(2);
tabIndex=2 maxLength=128 onchange="checkeandu('spBlogCmtURL')"
name=spBlogCmtURL> (选填)</TD>
<SCRIPT>G("spBlogCmtor").value="";G("spBlogCmtURL").value="";</SCRIPT>
</TR>
<TR id=2_err style="DISPLAY: none">
<TD> </TD>
<TD>
<DIV class=error id=2_err_con></DIV></TD></TR>
<TR>
<TD class=f14 vAlign=top>内 容:</TD>
<TD><TEXTAREA id=spBlogCmtText style="WIDTH: 520px; HEIGHT: 155px" onfocus=hidErr(3); tabIndex=3 name=spBlogCmtText></TEXTAREA>
<SCRIPT>G("spBlogCmtor").value=G("spBlogCmtor").defaultValue;G("spBlogCmtText").value="";</SCRIPT>
</TD></TR>
<TR id=3_err style="DISPLAY: none">
<TD> </TD>
<TD>
<DIV class=error id=3_err_con></DIV></TD></TR>
<TR id=vercode>
<TD class=f14 vAlign=top>验证码:</TD>
<TD vAlign=top><INPUT type=hidden
value=D165E574A3AA9CA9BADE0F3176E4078A76096FD4D15F71072E6BA60C66BA180DD6A0C6D2D49754D919C2C458CE7ECA256AC20B9408945C83E30662575D909D8A
name=spVcode> <INPUT id=spVerifyKey onfocus=f_focus() tabIndex=4
maxLength=4 size=6 name=spVerifyKey autocomplete="off"><BR>
<SCRIPT type=text/javascript>/*<![CDATA[*/var imgsrc="http://hiup.baidu.com/cgi-bin/genimg?D165E574A3AA9CA9BADE0F3176E4078A76096FD4D15F71072E6BA60C66BA180DD6A0C6D2D49754D919C2C458CE7ECA256AC20B9408945C83E30662575D909D8A";function f_focus(){ if(G('yanzheng').style.display=="none" ){ G('verifypic').src=imgsrc; G('yanzheng').style.display="block"; }}function newverifypic(){ G("verifypic").src = imgsrc +"&t="+ Math.random(); return false;}/*]]>*/</SCRIPT>
<DIV id=yanzheng style="DISPLAY: none"><IMG id=verifypic height=40
width=120><WBR><A title=看不清左边的字符 onfocus=this.blur();
onclick="return newverifypic();"
href="http://hi.baidu.com/gallonchai/blog/item/71550fb57813ffcc37d3ca0f.html#">看不清?</A>
</DIV></TD></TR>
<TR>
<TD class=f14 vAlign=top> </TD>
<TD class=f14 vAlign=top><INPUT id=btn_ok tabIndex=5 type=submit value=发表评论 name=btn_ok></TD></TR></TBODY></TABLE></FORM></DIV><BR></DIV>
<TABLE height=8 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=modbl width=7> </TD>
<TD class=modbc> </TD>
<TD class=modbr width=7> </TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV>
<SCRIPT language=javascript><!--var hstr="/gallonchai/brwstat?key1=1";document.write("<script src='"+hstr+"&key2="+allkey+"'><\/script>");//--></SCRIPT>
<BR>
<CENTER>
<DIV id=ft>©2008 Baidu</DIV></CENTER>
<SCRIPT>if(document.getElementById("m_blog")){ var imgarray = document.getElementById("m_blog").getElementsByTagName('img'); var imgw = document.getElementById("m_blog").offsetWidth; imgw =imgw-40; for(var i=0; i<imgarray.length; i++){ if(imgarray[i].className=="blogimg" && imgarray[i].width>=imgw) imgarray[i].width=imgw; }}// Fix ff bugsvar blog_text = document.getElementById('blog_text');blog_text.innerHTML = blog_text.innerHTML.replace(/href\s*=\s*("|')?(\.\.\/\.\.\/)/gi,"href=$1../$2");</SCRIPT>
</CENTER><IMG style="DISPLAY: none" src=""> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -