返回列表 上一主題 發帖

[發問] 請教物件變數的語法set與with-end with

[發問] 請教物件變數的語法set與with-end with

本帖最後由 oak0723-1 於 2010-9-6 23:34 編輯

請問
With Sheets("1")
rng = .Range(.[c10], .[m83].End(3))
End With
rng是物件變數
可否將with-enwith改寫成
set rng = Sheets("1").Range(Sheets("1").[c10], Sheets("1").[m83].End(3))

set rng = Sheets("1").Range(Sheets("1").[c10], Sheets("1").[m83].End(3))是對的
學海無涯_不恥下問

TOP

set rng = Sheets("1").Range(Sheets("1").[c10], Sheets("1").[m83].End(3))
這樣是把rng定義為range物件(對象)
與前面定義成陣列在效能上不能同日而語!

TOP

本帖最後由 oak0723-1 於 2010-9-7 00:11 編輯

回復 3# oobird


    所以差別在效能囉??
With Sheets("1")
rng = .Range(.[c10], .[m83].End(3))
End With
這樣寫法又是把rng定義在哪裡?

TOP

這樣rng是一個2維陣列,沒有儲存格其他資訊,只有值。存在記憶體中,程式結束後即消失。

TOP

回復 5# oobird

還是不是很懂~~~
寫法1>
With Sheets("1")
rng = .Range(.[c10], .[m83].End(3))
End With
寫法2>
set rng = Sheets("1").Range(Sheets("1").[c10], Sheets("1").[m83].End(3))
2個寫法都正確
都可執行
差別在於執行效率
但是此時寫法1較寫法2有執行效率
因為寫法2等於將變數rng設定給物件range就變成
rng成了屬於range的物件變數
可是小弟所看的書有簡單提到
使用with-with end是為了設定某一物件的多項屬性
問題:
With Sheets("1")
rng = .Range(.[c10], .[m83].End(3))
End With
在這個階段
變數rng是什麼性質的變數?
是工作表Sheets("1")的物件變數嗎?

TOP

1.先了解with
使用with可減少對儲存格的頻繁存取。更可以縮短程式碼,以此例使用with後
原本rng = Sheets("1").Range(Sheets("1").[c10], Sheets("1").[m83].End(3))
就簡化成rng = .Range(.[c10], .[m83].End(3))
2.前面說了是把這個範圍的資料以二維陣列存放在記憶體內,不再是儲存格了,而是純脆的資料排列。屬Variant型態,因exce變數l預設值是Variant,所以不用寫出來。

TOP

本帖最後由 luhpro 於 2010-9-7 21:57 編輯

回復 6# oak0723-1

你把程式看複雜了,
其實歸根結底就只有兩個部份 :
1.  在 With A  與 End With 中間的敘述裡, 以 "." 開頭的敘述一律等同 "A.", 亦即
With Sheets("1")
  rng = Range([c10], [m83].End(3))
End With

會等同於

rng = Sheets("1")•Range(Sheets("1")•[c10], Sheets("1")•[m83].End(3))

註 : 上例中 為求效果明顯一律以 "" 代表 "."

2. 在敘述中 rng 的前方並沒有 "." ,
所以它與 Sheets("1") 並沒有直接的依存關係.

而因為它右邊等號的右方是 ".RANGE()" 形式的敘述,
所以它的內含為 Sheets("1") 中某個 RANGE範圍 的內含值,
亦即是 "多個" (除了 Range 只有一個儲存格以外)值 組成的資料,
所以最有可能儲存它(們)的應該會是一個 "陣列".

TOP

回復 8# luhpro


    大致了解~~~
感恩喔

TOP

        靜思自在 : 忘功不忘過,忘怨不忘恩。
返回列表 上一主題