动态检测范围变化,并在excel中的单元格中添加或删除公式
我有一个动态范围的细胞。根据是否有人添加或删除列A中某个单元格中的数据,范围将发生变化。我需要检测该范围内的变化。范围等于动态检测范围变化,并在excel中的单元格中添加或删除公式,excel,vba,Excel,Vba,我有一个动态范围的细胞。根据是否有人添加或删除列A中某个单元格中的数据,范围将发生变化。我需要检测该范围内的变化。范围等于 sht.Range(“C3:”&单元格(numberOfRows,numberOfColumns)。 然后,例如,假设更改的单元格是“F9”。我需要在“AH9”中添加一个公式。这里的要点是,该公式将始终位于“AH”列中,而该行将发生更改。如果您感到好奇,我添加的公式将对具有更改单元格的行中的“C”列和“AG”列求和。因此,如果“F9”是更改的单元格,我需要将“C9”和“AG
sht.Range(“C3:”&单元格(numberOfRows,numberOfColumns)
。
然后,例如,假设更改的单元格是“F9”。我需要在“AH9”中添加一个公式。这里的要点是,该公式将始终位于“AH”列中,而该行将发生更改。如果您感到好奇,我添加的公式将对具有更改单元格的行中的“C”列和“AG”列求和。因此,如果“F9”是更改的单元格,我需要将“C9”和“AG9”
=sum(F9:AG9)
。我想我需要将代码放在工作表中,我试图检测其中的更改,它看起来是这样的
Private Sub currentSheetChange(ByVal Target As Range)
Dim sht As Worksheet
Dim rfRange As Range
Dim numberOfColumns As Integer
Dim numberOfRows As Integer
numberOfColumns = getNumberOfColumns
numberOfRows = getNumberOfRows
Set sht = ThisWorkbook.Sheets("Current")
Set rfRange = sht.Range("C3:" & Cells(numberOfRows, numberOfColumns)
If Not Intersect(Target, sht.Range(rfRange)) Is Nothing Then
这是我迄今为止所做的。如果它能工作到这一点,我不知道如何知道哪个单元格发生了更改。我还假设我会使用
sht.Range(“AH”&rowNumber)。Formula=
在单元格中输入公式。这允许我根据更改的单元格行动态地将公式输入到单元格中
我决定稍微更改我的要求。我不希望公式输入到单元格中,因为有人可以更改它。我让VBA进行计算并将结果放入单元格中。我将新代码注释掉,因为这并没有回答我原来的问题,但我想显示两种方式,因此有选项
Private Sub Worksheet_Change(ByVal Target As Range)
Dim numberOfColumns As Long
Dim numberOfRows As Long
numberOfColumns = getNumberOfColumns 'Function call to a function on another sheet
numberOfRows = getNumberOfRows 'Function call to a function on another sheet
If Not Intersect(Target, Me.Range("C3", "AG" & numberOfRows)) Is Nothing Then
Me.Range("AH" & Target.Row).Formula = "=SUM(C" & Target.Row & ":" & "AG" & Target.Row & ")"
'Range("AH" & Target.Row).Value = Range("B" & Target.Row).Value - Evaluate("SUM(C" & Target.Row & ":AG" & Target.Row & ")") **New code**
End If
End Sub
您需要
工作表\u更改
。您不能将其更改为当前工作表更改
。另外-使用长
而不是整数
。如果您在工作表代码模块中工作,Me
引用该工作表,因此我猜设置sht…
是不必要的。谢谢。我将进行这些更改。“我正在尝试检测变化[…]我不知道如何知道哪个细胞发生了变化。"Target
保存更改的范围。它可以像使用ActiveCell
、UsedRange
、CurrentRegion
或几乎任何其他只读范围对象一样使用。因此Target.Address
我们会给您地址,Set myRange=Target
将myRange设置为更改的范围。谢谢ou@defoundlyoblivious,这帮助我找到了答案。更好的是,只有一个小问题。公式=“=SUM(C”&Target.Row&“:”&Target.Row&“)”
会导致一个错误。假设一个任意的Target
,说“A17”,那么Target.Row=17
得到的公式是=SUM(C17:17)
其中“C17:17”不是有效范围。否则看起来不错。谢谢@defoundlyoblivious。我遗漏了&“AG”部分。我编辑它以显示正确的代码。