将自动更改单元格值功能与下拉列表组合时遇到一个小问题。
我想要的是每次更改 Excel 工作表上特定单元格的值时都会启动一个宏。该单元格有一个下拉列表。
我遇到的问题是,目前,当我单击单元格时会启动宏,但当单元格的值发生变化时不一定会启动宏。事实上,我没有机会编辑单元格的值,宏在此之前已经执行了。
我使用的代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Application.EnableEvents = False
Call MyMacro
Range("A1").Select
Application.EnableEvents = True
End if
End Sub
A1 是一个包含 3 个值的下拉列表。 MyMacro 根据下拉列表中所选的值粘贴不同类型的信息。我发现有必要关闭EnableEvents以避免不必要的循环。我还必须在代码末尾选择单元格 A1,以便能够有效地更改单元格 A1 中的值(否则,它只是启动宏而不让我编辑单元格的值)。
我希望问题已经清楚了。该代码给出了一些结果,但并不完全符合我的预期。我已经检查了有关该主题的其他主题,一些讨论与我的问题很接近,但我没有找到解决方案。
最近经历了这个挑战,我找到了下面几乎完美的解决方案
** 公共 CurVal 作为字符串
私有子工作表_Activate() CurVal = 范围("B3") 结束子
私有子工作表_SelectionChange(ByVal Target As Range) CurVal = 范围("$B$3") 结束子
私有子工作表_Change(ByVal目标作为范围)
如果 Target.Address = "$B$3" 并且 Target <> CurVal 那么
lastrow = ThisWorkbook.Sheets("cs data").Cells(Rows.Count, 4).End(xlUp).Row ThisWorkbook.Sheets("cs data").Range("a" & lastrow + 1) = "总计" ThisWorkbook.Sheets("cs 数据").Range("d" & lastrow + 1) = Application.WorksheetFunction.Sum(ThisWorkbook.Sheets("cs 数据").Range("d12:d" & lastrow)) ThisWorkbook.Sheets("cs data").Range("d" & lastrow + 1).Font.Bold = True ThisWorkbook.Sheets("cs data").Range("a" & lastrow + 1).Font.Bold = True
MsgBox“您更改了单元格 B3 中的值”
结束如果
结束子 **
每当单元格值“B3”发生变化时,该宏都会返回底部 d 列的总和。 它运行一次,将总和放在该列的底部,但我必须在更改单元格值“B3”之前删除最后一列,因为该列来自 tocol(filter()) 函数。