作者: bongbong3481 時間: 2024-8-9 08:44 標題: VBA set range 奇怪的範圍問題
下圖咁, 我明明SET 了 rgn=RANGE("A1:B4"), 但rgn.cells(1,3) 範圍外的資料"na"又可以顯示到出黎,
請問原因點解係咁呢?
(都可能我對SET RANGE 的理解有問題)
[attach]2436446[/attach]
作者: s20012797 時間: 2024-8-9 11:39
您面臨的問題可能是由於 VBA 處理範圍的方式和 Cells 屬性的行為所造成的。
當您設定 rgn = Range("A1:B4") 時,您將建立一個代表從 A1 到 B4 的儲存格的範圍物件。但是,範圍物件的 Cells 屬性並不限於指定的範圍。相反,它代表工作表中的所有儲存格,您可以使用 Cells 屬性存取定義範圍之外的儲存格。
在您的情況下,當您使用rgn.Cells(1, 3) 時,您正在存取第一行第三列中的單元格,即單元格C1,即使它超出了您定義的範圍(A1:B4 )。這就是為什麼您能夠在訊息框中顯示值“na”。
為了確保您只存取定義範圍內的儲存格,可以使用下列方法:
Sub text()
Dim rgn As Range
Set rgn = Range("A1:B4")
MsgBox rgn.Cells(1, 2).Value ' This will display the value in cell B1
End Sub
在這段修改後的程式碼中,我們使用 rgn.Cells(1, 2) 來存取第一行第二列中的儲存格,該儲存格位於 A1:B4 定義的範圍內。
或者,您可以使用 Offset 屬性來存取定義範圍內的儲存格:
Sub text()
Dim rgn As Range
Set rgn = Range("A1:B4")
MsgBox rgn.Offset(0, 2).Value ' This will display the value in cell C1
End Sub
在本例中,我們使用 rgn.Offset(0, 2) 存取範圍內左上角儲存格(即儲存格 C1)向下 0 行、右側 2 列的儲存格。
關鍵要點是,在 VBA 中使用範圍時,您需要注意 Cells 屬性的行為,並確保存取定義範圍內的儲存格,以避免意外結果。
作者: s20012797 時間: 2024-8-9 13:04
SubAccessCells()
' Please change the worksheet name as needed
Set ws = ThisWorkbook.Sheets("Sheet1")
' Setting range
Set rgn = ws.Range("A1:B4")
'Access cells within the range
valueInB1 = rgn.Cells(1, 2).Value
' This will get the value of B1
Debug.Print valueInB1
'Access the value of C1
valueInC1 = ws.Range("C1").Value
Debug.Print valueInC1
'Access the upper left cell of A1:B4, then offset
offsetValue = ws.Cells(1, 3).Value
' This will get the value of C1
Debug.Print offsetValue
End Sub
作者: bongbong3481 時間: 2024-8-11 07:34
回覆 2# s20012797
睇黎用陣列array 先可以固定範圍
作者: s20012797 時間: 2024-8-11 17:21
有時間研究一下Pyspread LA, Excel得罪一句,過氣垃圾難登大枱
作者: bongbong3481 時間: 2024-8-11 19:36
回覆 5# s20012797
我覺得excel 及vba 好難過時,商用絕太多數公司用緊
作者: s20012797 時間: 2024-8-11 20:38
以google doc普及化開始計,失禮&得罪一句,五十以上個堆excel文員訓直,好快會佚代,VBA工能性吾係吾得,耐何M$吾維護又吾肯開源

