VBA set range 奇怪的範圍問題

下圖咁, 我明明SET 了 rgn=RANGE("A1:B4"),   但rgn.cells(1,3) 範圍外的資料"na"又可以顯示到出黎,

請問原因點解係咁呢?
(都可能我對SET RANGE 的理解有問題)

附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

您面臨的問題可能是由於 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 屬性的行為,並確保存取定義範圍內的儲存格,以避免意外結果。

TOP

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

TOP

回覆 2# s20012797


    睇黎用陣列array 先可以固定範圍

TOP

回覆  s20012797


    睇黎用陣列array 先可以固定範圍
bongbong3481 發表於 2024/8/11 07:34


有時間研究一下Pyspread LA, Excel得罪一句,過氣垃圾難登大枱

TOP

回覆 5# s20012797


    我覺得excel 及vba 好難過時,商用絕太多數公司用緊

TOP

回覆  s20012797


    我覺得excel 及vba 好難過時,商用絕太多數公司用緊
bongbong3481 發表於 2024/8/11 19:36


以google doc普及化開始計,失禮&得罪一句,五十以上個堆excel文員訓直,好快會佚代,VBA工能性吾係吾得,耐何M$吾維護又吾肯開源

TOP