close

以下僅為雜記,用於記戴一些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 時,其使用(呼叫)的時間,必須在容器正在使用中...也就是你必須有開啟這工作簿,且正好是點選這工作表名..(如圖)

2019-04-10_111619.png

否則這白痴Range就會不知道或假裝聽不懂你要叫他幹什麼...

因為他先天上的白痴設計,所以當初本來可以執行的原因,應該就是當時這工作表是正在被啟中的..

那日後不可啟動或呼叫或引用或參照或複製或........XXXXX....的原因..即可能是出在如下...

2019-04-10_112614.png

要呼叫的工作簿(紅色)雖然有開啟,但卻未必是使用中,使用中的工作簿為(紫色)...至於白色的則是200塊來站台插花的

所以為了讓這白痴Range的呼叫能 一勞久逸

不要每次一下可以、一下莫名其妙的不行耍脾氣..

故只要把語法改成

Workbooks("XXX.xlsx").Worksheets("工作表1").Activate

Range("A1:C10").Select 

先啟動,後呼叫...

也就是說,光一個物件就一堆局限與條件,還要注意跟這傢伙溝通時的語法(要用容器)一層層的命令..

否則他就不耍你..

才一個物件...就一堆煩事....看來...很有得搞..期待AI的到來...直接用口述的寫程式吧...

 

 

 

 

 

 

 

正確解讀:使用Range屬性來選取儲存格範圍(Range物件),然後再回傳該選取範圍內相對的儲存格位置。

自註:因為很繞口令,又很難看懂,所以放在這邊到此一遊

arrow
arrow

    Ray 發表在 痞客邦 留言(0) 人氣()