gpt4 book ai didi

excel - Worksheet_Change - 同时定位多个单元格

转载 作者:行者123 更新时间:2023-12-02 10:45:28 26 4
gpt4 key购买 nike

这里是 VBA 初学者。

我有一个项目,我为用户指定了输入单元格。当这些输入单元格之一发生更改时,它需要运行几行仅特定于该单元格的代码。如果用户清除单元格的内容,我希望代码将空白单元格替换为值“0”。

下面的代码模拟了我想要实现的目标。它的编写形式与我的项目相同,但更简洁。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 And Target.Row = 1 Then
Range("B1").Value = "Changed 1" 'Just something specific to this cell. Not important
If IsEmpty(Sheet1.Range("A1")) Then Sheet1.Range("A1").Value = 0
End If

If Target.Column = 1 And Target.Row = 2 Then
Range("B2").Value = "Changed 2" 'Just something specific to this cell. Not important
If IsEmpty(Sheet1.Range("A2")) Then Sheet1.Range("A2").Value = 0
End If

If Target.Column = 1 And Target.Row = 3 Then
Range("B3").Value = "Changed 3" 'Just something specific to this cell. Not important
If IsEmpty(Sheet1.Range("A3")) Then Sheet1.Range("A3").Value = 0
End If

End Sub

当对单个单元格执行更改时,上述所有内容都可以正常工作。如果用户选择所有单元格并按删除键,则仅运行第一个单元格的代码。我希望它针对所有选定(已删除)的单元格运行。

关于如何跨多个单元格同时运行 Worksheet_Change 有什么建议吗?

谢谢

最佳答案

当您的更改事件在单个单元格上运行良好时,您可以进行一些调整,以确保它在您一次性更改一系列单元格时也能正常工作,例如将三个单元格粘贴到 A1 中以A3

您可能想要应用与此类似的方法:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim cel As Range
Dim myRow As Long

Set ws = ThisWorkbook.Sheets("Sheet1")

If Not Intersect(Target, Range("A1:A3")) Is Nothing Then ' watch all the cells in this range
For Each cel In Target ' do the next steps for each cell that was changed
myRow = cel.Row
Range("B" & myRow).Value = "Changed " & Target.Row 'Just something specific to this cell. Not important
Application.EnableEvents = False
If IsEmpty(ws.Range("A" & myRow)) Then Sheet1.Range("A" & myRow).Value = 0
Application.EnableEvents = True
Next cel
End If

End Sub

说明:

If Not Intersect(Target, Range("A1:A3")) Is Nothing Then -- 仅对单元格 A1 到 A3 的更改起作用

对于目标中的每个单元格 - 对所有已更改的单元格执行相同的操作

Range("B"& myRow).Value = "Changed "& Target.Row - 在当前行的 B 列中输入一些值

在宏的下一步中,我们可能会将一些数据输入到我们正在监视变化的单元格中,即 A1 到 A3。这些单元格的更改将触发此宏。该宏将写入单元格。单元格的变化将触发这个宏....

你知道这是怎么回事了。为了避免无限循环,我们关闭任何事件触发的宏,例如当单元格更改时触发的宏。所以我们用这个语句关闭事件监听。

Application.EnableEvents = False - 现在任何诸如“单元格已更改”之类的事件都将被忽略。

我们现在可以将一个值写入 A 列,这样就不会再次触发宏。伟大的。我们对单元格 A1 到 A3 执行我们需要执行的操作,然后重新打开事件监视。

Application.EnableEvents = True

然后我们转到触发此宏的范围内的下一个单元格(如果有)。

请告诉我这是否有帮助或者您是否需要更多详细信息。这些东西需要一点学习曲线。

关于excel - Worksheet_Change - 同时定位多个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com