电竞比分网-中国电竞赛事及体育赛事平台

分享

VBA編程,工作薄打開,兩個工作薄之間表格復(fù)制,Range的copy方法

 旅行中的甘藍(lán) 2020-04-12

在VBA中,ThisWorkbook和ActiveWorkbook區(qū)別,ThisWorkbook值得是代碼所在的工作簙,而ActiveWorkbook是目前程序代碼運行到的激活的工作簙。例如我在用VBA編寫兩個Workbook操作時,出現(xiàn)的錯誤:
一、一開始進(jìn)行操作時,聲明了Application,當(dāng)然第二個Workbook是在新建的Application中打開的,前面的操作都可以,如表格的選取等,但是到了利用Range方法時就出現(xiàn)“類range的copy方法無效”,這是應(yīng)為兩個Range在不同的Application里面,不知道是哪個Application執(zhí)行的更快,如果是復(fù)制的Appliation快,則黏貼可以執(zhí)行,如果是先黏貼就報錯了。
我新建的Application刪除后,然后再同一個Application里打開第二個Workbook出現(xiàn)的問題:

二、ThisWorkbook和ActiveWorkbook:如我從ThisWorkbook里通過對象調(diào)用各種方法然后執(zhí)行到了Workbook2,然后再選取Workbook2的單元格進(jìn)行復(fù)制,回到ThisWorkbook里進(jìn)行黏貼。這時會出現(xiàn)兩種情況第一種方法是直接的: rg3.Copy ThisWorkbook.Sheets(str1).Cells(m + 4, 1) 等價于下列三行代碼 :

(1)rg3.Copy

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

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

按理說根本不需要第(2)句,但是不行。 我自己將其理解為假死狀態(tài),所謂的假死是需要接手后才能激活,而且激活也是要有等級的如:

rg3.Copy ThisWorkbook.Sheets(str1).Cells(m + 4, 1)這句中rg3是主,后面的是次,我不用管后面的死活,我只要知道它是個目的地就行,因為ThisWorkbook.Sheets....是可以找到的,所以這個方法可以成功。而第二種三行方法的代碼第一句rg3是主,而第三句ThisWorkbook.對象是主,這就擺脫了假死狀態(tài)。所以要對其進(jìn)行激活,(重點)ThisWorkbook一直沒有變化可以選值,但不可以調(diào)用方法,必須激活后才能。當(dāng)執(zhí)行到第一句時ActiveWorkbook是第二個表,若要成功執(zhí)行第三句后ActiveWorkbook是第一個表。(重點激活)這是就牽扯到了我認(rèn)為的激活等級問題。由于Workbook、Worksheet和Range都含有activate方法,如果要變主的是Range類,則激活應(yīng)激活到Sheet,如果你只激活了Workbook是不行的,同樣如果變主的是Sheet,則激活到Workbook就可以。而且激活的必須高于操作的。如用sheet就要激活WorkBook,如果激活Sheet也不行,即激活同等級不行。
三、如本案例僅僅只有兩個Book,也可以不用上面的激活操作,直接將第二個表格Close掉即可

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多