由带有下拉列表的单元格更改触发的 VBA 宏

问题描述 投票:0回答:1

将自动更改单元格值功能与下拉列表组合时遇到一个小问题。

我想要的是每次更改 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 中的值(否则,它只是启动宏而不让我编辑单元格的值)。

我希望问题已经清楚了。该代码给出了一些结果,但并不完全符合我的预期。我已经检查了有关该主题的其他主题,一些讨论与我的问题很接近,但我没有找到解决方案。

excel vba drop-down-menu
1个回答
0
投票

最近经历了这个挑战,我找到了下面几乎完美的解决方案

** 公共 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()) 函数。

© www.soinside.com 2019 - 2024. All rights reserved.