Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 先前活跃的细胞_Excel_Vba_Events - Fatal编程技术网

Excel 先前活跃的细胞

Excel 先前活跃的细胞,excel,vba,events,Excel,Vba,Events,对于我正在编写的代码,我监视某些单元格范围内的更改,以运行函数和私有sub。为此,我使用工作表\u change子部分中的Intersect函数 但是,intersect“测试”的触发器始终是我从我正在测试的单元格中“移出”,以确定它是通过鼠标单击进入另一个单元格还是通过光标移动 我需要的是一种定义变量的方法,该变量包含我以前选择的单元格的.address 我尝试了下面的代码,但得到的只是错误 有人知道怎么做吗 Public xfrLastCell As String Public xfrAct

对于我正在编写的代码,我监视某些单元格范围内的更改,以运行函数和私有sub。为此,我使用
工作表\u change
子部分中的Intersect函数

但是,intersect“测试”的触发器始终是我从我正在测试的单元格中“移出”,以确定它是通过鼠标单击进入另一个单元格还是通过光标移动

我需要的是一种定义变量的方法,该变量包含我以前选择的单元格的
.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

下面的代码适用于我-您对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
“记住”范围可能比“记住”范围地址更容易:

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

使用此代码,引用
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

这在单个工作表中起作用。在其他工作表和工作簿中是否需要上一个单元格?

如果不需要。我用过这个:

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
中的一个单元格)。

-1这是非工作示例
OldCell
将始终指向
ActiveCell
!嗨,LS_dev:你的观点是100%正确的!只有在sub中,Oldcell才是重要的。它决定了你来自哪里。