注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

奕克

爱家人爱工作爱生活

 
 
 

日志

 
 

word VBA中实现不同excel工作簿的拷贝问题(原创)  

2010-06-26 12:52:30|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
         今天有同事在工作簿拷贝之间碰到问题,让我帮着解决一下,我调试了一番,虽然没有最终完全解决,但有了不完美解决方案,暂时先记录下来:
         实验环境:在C盘建立2.xls和3号.xls,目标是要把2.xls中的第一个工作表拷贝到3号.xls中成为第一工作表,当然这个功能要在word vba环境中实现,excel中实现是相当简单的。
       
        第一种方式:后绑定(late binding)方案。后绑定方案不要引用具体的office版本,不需要工程中的显式引用,相当方便。代码如下:
Set xlsapp = CreateObject("Excel.Application")
xlsapp.Workbooks.Open ("c:\2.xls")
xlsapp.Workbooks.Open ("c:\3号.xls")
xlsapp.Workbooks("2.xls").Activate
xlsapp.ActiveWorkbook.Worksheets(1).Copy Before:=Workbooks("3号.xls").Sheets(2)
xlsapp.Workbooks("3号.xls").Save
xlsapp.Workbooks.Close
xlsapp.Quit
Set xlsapp = Nothing
该代码能实现拷贝,但当我把
xlsapp.ActiveWorkbook.Worksheets(1).Copy Before:=Workbooks("3号.xls").Sheets(2)
改为
xlsapp.ActiveWorkbook.Worksheets(1).Copy Before:=Workbooks("3号.xls").Sheets(1)
老是提示我下标越界,也就是说不能拷贝到3号.xls成为第一个工作表,只能成为第2个以后的。百思不得其解后,我尝试
了前绑定方案,代码如下:
 
Dim xlsapp As Excel.Application
Set xlsapp = New Excel.Application
xlsapp.Workbooks.Open ("c:\2.xls")
xlsapp.Workbooks.Open ("c:\3号.xls")
Workbooks("2.xls").Activate
xlsapp.ActiveWorkbook.Worksheets(1).Copy Before:=xlsapp.Workbooks("3号.xls").Sheets(2)
xlsapp.Workbooks("3号.xls").Save
xlsapp.Workbooks.Close
xlsapp.Quit
Set xlsapp = Nothing
前绑定的问题依然是不能拷贝到第一个工作表之前,改成
xlsapp.ActiveWorkbook.Worksheets(1).Copy Before:=xlsapp.Workbooks("3号.xls").Sheets(1)
依然提示我下标越界。
 
通过网上查找,我找到了第三方方案,不太完美,但能行:
首先在2.xls工作簿中新建一excel VBA过程
Sub mycopy(bname As String)
    Sheets("Sheet1").Select
    Sheets("Sheet1").Copy Before:=Workbooks(bname).Sheets(1)
End Sub
该过程实现的功能是接受一个目标工作簿名,然后将本工作簿第一个表复制到目标工作簿的第一个表。
第二步在word VBA中调用,用的是后绑定的方式:
Set xlsapp = CreateObject("Excel.Application")
xlsapp.Workbooks.Open ("c:\3号.xls")
xlsapp.Workbooks.Open ("c:\2.xls")
xlsapp.Run "mycopy", "3号.xls"
xlsapp.Workbooks("3号.xls").Save
xlsapp.Workbooks.Close
xlsapp.Quit
Set xlsapp = Nothing
上述代码成功了!run过程能运行工作簿中指定的过程,第一个参数过程名,第二个参数是该过程参数,可以有n个参数。
 
这是一个不完美的方案,因为需要现在被复制工作簿中添加excelVBA过程,在很多情况下这是不可行的,今天没时间了,要赶着准备上交期末检查资料了。下次我会深入看看为什么前两种方式会下标越界的。。。
  评论这张
 
阅读(137)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017