分享

VBA编程,工作薄打开,两个工作薄之间表格复制,Range的copy方法

 旅行中的甘蓝 2020-04-12

在VBA中,ThisWorkbook和ActiveWorkbook区别,ThisWorkbook值得是代码所在的工作簙,而ActiveWorkbook是目前程序代码运行到的激活的工作簙。例如我在用VBA编写两个Workbook操作时,出现的错误:
一、一开始进行操作时,声明了Application,当然第二个Workbook是在新建的Application中打开的,前面的操作都可以,如表格的选取等,但是到了利用Range方法时就出现“类range的copy方法无效”,这是应为两个Range在不同的Application里面,不知道是哪个Application执行的更快,如果是复制的Appliation快,则黏贴可以执行,如果是先黏贴就报错了。
我新建的Application删除后,然后再同一个Application里打开第二个Workbook出现的问题:

二、ThisWorkbook和ActiveWorkbook:如我从ThisWorkbook里通过对象调用各种方法然后执行到了Workbook2,然后再选取Workbook2的单元格进行复制,回到ThisWorkbook里进行黏贴。这时会出现两种情况第一种方法是直接的: rg3.Copy ThisWorkbook.Sheets(str1).Cells(m + 4, 1) 等价于下列三行代码 :

(1)rg3.Copy

(2) ThisWorkbook.Sheets('str').Activate

(3)ThisWorkbook.Sheet('str').Paste

按理说根本不需要第(2)句,但是不行。 我自己将其理解为假死状态,所谓的假死是需要接手后才能激活,而且激活也是要有等级的如:

rg3.Copy ThisWorkbook.Sheets(str1).Cells(m + 4, 1)这句中rg3是主,后面的是次,我不用管后面的死活,我只要知道它是个目的地就行,因为ThisWorkbook.Sheets....是可以找到的,所以这个方法可以成功。而第二种三行方法的代码第一句rg3是主,而第三句ThisWorkbook.对象是主,这就摆脱了假死状态。所以要对其进行激活,(重点)ThisWorkbook一直没有变化可以选值,但不可以调用方法,必须激活后才能。当执行到第一句时ActiveWorkbook是第二个表,若要成功执行第三句后ActiveWorkbook是第一个表。(重点激活)这是就牵扯到了我认为的激活等级问题。由于Workbook、Worksheet和Range都含有activate方法,如果要变主的是Range类,则激活应激活到Sheet,如果你只激活了Workbook是不行的,同样如果变主的是Sheet,则激活到Workbook就可以。而且激活的必须高于操作的。如用sheet就要激活WorkBook,如果激活Sheet也不行,即激活同等级不行。
三、如本案例仅仅只有两个Book,也可以不用上面的激活操作,直接将第二个表格Close掉即可

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多