以下僅為雜記,用於記戴一些VBA遇到的小問題與覺得自己日後可注意或易遺忘之地方
@書本-VBA應用講座 Chapter8 P8-27
Range()
陳述式: ActiveCell.Offset(3,2).Range("A1").Select
可改成 ActiveCell.Offset(3,2).Select
語譯:陳述式裡先由Offset的屬性開始做移動,然後才使用Range這物件來做選取。
但是解讀上不可解讀成 以Offset屬性變更選取範圍,來選取儲存格A1..
★Range物件屬性先天的限制 (屬性局限) (參P8-9)
在使用該物件的方法 Select 與 Activate 時需注意:
常常會有諸如
Workbooks("XXX.xlsx").Worksheets("工作表1").Range("A1:C10").Select
看似無誤的語法,或先前可以執行,日後卻突然出現執行出現 "執行階段錯誤..Class Range 的 Select 方法失敗等訊息"
原因=>出在 Range 這物件 在使用方法如: Select 或 Activate 時,使用的儲存格必須是工作表內的儲存格、、、、(???公什夥、、書中就是這樣說的)
又是一句很繞舌的解釋,這話的意思是,在利用
陳述式 Workbooks("XXX.xlsx").Worksheets("工作表1").Range("A1:C10").Select 時
1、用容器的概念,一層包一層,=>工作簿\工作表名稱\儲存格 +予使用的方法
(或改用資料夾去設想,根目錄下的 主資料夾\副資料夾\子資料夾\孫資料夾\.............族繁不及備戴資料夾)
2、利用方法 Select 或 Activate 時,其使用(呼叫)的時間,必須在容器正在使用中...也就是你必須有開啟這工作簿,且正好是點選這工作表名..(如圖)
否則這白痴Range就會不知道或假裝聽不懂你要叫他幹什麼...
因為他先天上的白痴設計,所以當初本來可以執行的原因,應該就是當時這工作表是正在被啟中的..
那日後不可啟動或呼叫或引用或參照或複製或........XXXXX....的原因..即可能是出在如下...
要呼叫的工作簿(紅色)雖然有開啟,但卻未必是使用中,使用中的工作簿為(紫色)...至於白色的則是200塊來站台插花的
所以為了讓這白痴Range的呼叫能 一勞久逸
不要每次一下可以、一下莫名其妙的不行耍脾氣..
故只要把語法改成
Workbooks("XXX.xlsx").Worksheets("工作表1").Activate
Range("A1:C10").Select
先啟動,後呼叫...
也就是說,光一個物件就一堆局限與條件,還要注意跟這傢伙溝通時的語法(要用容器)一層層的命令..
否則他就不耍你..
才一個物件...就一堆煩事....看來...很有得搞..期待AI的到來...直接用口述的寫程式吧...
正確解讀:使用Range屬性來選取儲存格範圍(Range物件),然後再回傳該選取範圍內相對的儲存格位置。
自註:因為很繞口令,又很難看懂,所以放在這邊到此一遊
留言列表