Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 - Fatal编程技术网

动态检测范围变化,并在excel中的单元格中添加或删除公式

动态检测范围变化,并在excel中的单元格中添加或删除公式,excel,vba,Excel,Vba,我有一个动态范围的细胞。根据是否有人添加或删除列A中某个单元格中的数据,范围将发生变化。我需要检测该范围内的变化。范围等于 sht.Range(“C3:”&单元格(numberOfRows,numberOfColumns)。 然后,例如,假设更改的单元格是“F9”。我需要在“AH9”中添加一个公式。这里的要点是,该公式将始终位于“AH”列中,而该行将发生更改。如果您感到好奇,我添加的公式将对具有更改单元格的行中的“C”列和“AG”列求和。因此,如果“F9”是更改的单元格,我需要将“C9”和“AG

我有一个动态范围的细胞。根据是否有人添加或删除列A中某个单元格中的数据,范围将发生变化。我需要检测该范围内的变化。范围等于
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”部分。我编辑它以显示正确的代码。