簡體   English   中英

ActiveCell.Offset 混淆

[英]ActiveCell.Offset Confusion

我正在閱讀某人之前編寫的模塊中的一些 VBA 並遇到了一些讓我感到困惑的事情:

Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Range("A1").Select

我想知道 ActiveCell.Offset(column,row).Range().Select 行是如何工作的。 在這種情況下,“開始”范圍是一個單元格,A18,偏移量將它偏移一行,我得到了這么多。 但我沒有關注 Range("A1") 在這里插入的方式或內容。

不會

Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Select

工作相同並且不那么令人困惑? 插入 Range("A1") 子句是否有任何原因?

非常感謝,很抱歉初學者的問題。

簡答

是的,在這種特殊情況下,兩者都做同樣的事情。 刪除Range("A1")很好。

長答案

這是因為您在這一行中使用了ActiveCell

ActiveCell.Offset(1, 0).Range("A1").Select

ActiveCell是您選擇的范圍內的第一個單元格。

考慮以下宏:

Sub Macro1()
    Debug.Print ActiveCell.Address
End Sub

無論您選擇什么范圍,這都會打印所選內容中白色單元格的地址。

IE

在此處輸入圖片說明

ActiveCell$A$4

例子

單個單元格上調用Offset(1,0)只會偏移該單元格 因此,如果我們查看您的原始代碼:

Sub Macro2()
    Sheets("Setup").Select
    Range("Start").Select
    ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

讓我們假設我之前顯示的選擇( A2:B4 )是“開始”的命名范圍,我們可以准確地了解正在發生的事情:

  1. 在此示例中Range("Start").Select將選擇范圍A2:B4 從而使ActiveCell等於A2

  2. 接下來我們在ActiveCell上調用Offset(1,0)相當於Range("A2").Offset(1,0)將我們置於范圍A3 (A2 下方的 1 行)

  3. 現在我們調用.Range("A1")它將抓取范圍內的第一個單元格 由於當前范圍只有A3.Range("A1")給了我們A3

  4. 那么當然.Select()仍然只選擇A3

.Range("A1")真正有用?

考慮以下沒有任何Range("A1")調用的示例:

Sub Macro3()
    Sheets("Setup").Select
    Range("Start").Select
    Selection.Offset(1, 0).Select
End Sub

由於我們已將ActiveCell更改為Selection因此Offset(1,0)將選擇與“Start”相同的尺寸范圍,只是偏移了 1 行。

IE:

如果這是“開始”的范圍:

在此處輸入圖片說明

我們運行示例宏:

在此處輸入圖片說明

我們有一個相同維度的新選擇。

但是,如果我們更改示例宏以包含Range("A1")

Sub Macro4()
    Sheets("Setup").Select
    Range("Start").Select
    Selection.Offset(1, 0).Range("A1").Select
End Sub

在此處輸入圖片說明

現在只選擇了選擇中的第一個單元格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM