2013-10-04 64 views
2

對於我正在編寫的代碼,我監視某些單元格區域中的更改以運行函數和私有子集。爲此,我使用worksheet_change子版中的相交功能。以前活動的單元格

但是,相交'test'的觸發器總是讓我'移出'我正在測試的單元格是否通過鼠標點擊到不同的單元格中或通過光標移動。

我需要的是一種方法來定義一個變量,其中包含我之前選擇的單元格的.address

我試過下面的代碼,但我得到的只是錯誤。

有沒有人有一個想法如何做到這一點?

Public xfrLastCell As String 
Public xfrActiveCell As String 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

If xfrActiveCell = "" Then xfrActiveCell = ActiveCell.Address 
xfrLastCell = xfrActiveCell 
xfrActiveCell = ActiveCell 
MsgBox xfrLastCell 

End Sub 

回答

2

下面的代碼對我的作品 - 你的activecell任務是缺少一個地址含義activecell變量始終是空白

Option Explicit 

Public xfrLastCell As String 
Public xfrActiveCell As String 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

If xfrActiveCell = "" Then xfrActiveCell = ActiveCell.Address 
xfrLastCell = xfrActiveCell 
xfrActiveCell = ActiveCell.Address 
MsgBox xfrLastCell 

End Sub 
+0

+ 1好抓:) :) –

0

可能更容易「記憶」的範圍比的地址,而範圍:

Dim Oldcell As Range 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Oldcell Is Nothing Then 
     Set Oldcell = Target 
     Exit Sub 
    End If 
    MsgBox "New cell is " & Target.Address & vbCrLf & "Old cell was " & Oldcell.Address 
    Set Oldcell = Target 
End Sub 
+0

+ 1另一個好方法:) –

+0

-1這是非工作的例子! 'OldCell'將始終指向'ActiveCell'! –

+0

嗨LS_dev:你的觀點100%正確!它只是在**中的那個舊的細胞是重要的。它決定你來自哪裏。 –

1

有了這個代碼,參照PreviousActiveCell將返回所需的結果:

Public PreviousActiveCell as Range 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Static pPrevious as Range 
    Set PreviousActiveCell = pPrevious 
    Set pPrevious = ActiveCell 
End Sub 

這適用於單個工作表。您是否需要跨越其他工作表和工作簿的以前的單元格?

0

If是不必要的。我已經使用這個:

Public sPreviousTarget As String 
Public sTarget As String 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    sPreviousTarget = sTarget 
    sTarget = Target.Address 
End Sub 

另外,Target是從ActiveCell不同(ActiveCell指小區之一中Target)。

相關問題