首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel VBA --在检测到单元值变化时调用函数的最佳实践

Excel VBA --在检测到单元值变化时调用函数的最佳实践
EN

Stack Overflow用户
提问于 2018-10-12 07:39:45
回答 2查看 204关注 0票数 2

我试验了许多不同的方法,在检测到某一范围的单元格中的变化时,自动调用宏/函数,大致如下:

代码语言:javascript
运行
复制
Private Sub Worksheet_Change(ByVal Target As Range)
    Range ("PartNumbers") = "B6:B18"
    If Not Application.Intersect(Range(Target.Address), Range("PartNumbers")) Is Nothing Then
        Application.EnableEvents = False
        decodepartnumber (Target.Address)
        Application.EnableEvents = True
    End If
End Sub

我想知道是否有更好的方法,即:

  1. 避免丢失撤消历史记录
  2. 只有在值发生更改时才触发函数。

该应用程序用于监视range (B6:B18),如果我在B6中输入产品部件编号,函数decodepartnumber将在C6中填写产品描述,在D6中填写产品价格。

最初,我用B6在C6中填充了=part_desc(A6)=part_price(A6),但这意味着用户无法轻松地编辑结果值。

任何关于最佳做法或替代办法的想法都将受到赞赏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-12 12:04:30

作为另一种方法:您可以使用一个函数来触发更改(计算必须设置为xlAutomatic)

在一个模块中:

代码语言:javascript
运行
复制
Function ValChange(Cell2Follow As Range) As String
 Evaluate "decodepartnumber(" & ActiveCell.Row & ")"
End Function

Sub decodepartnumber(rw As Long)
Cells(rw, 3).Value = "description ":   Cells(rw, 4).Value = "price"
End Sub

在单元格(工作表上的某个地方):=ValChange(PartNumbers)

当您的范围" PartNumbers“发生更改时,该函数将触发(您的.2点),您仍然可以使用撤销选项,但有一个警告:撤消只对PartNumbers范围内的第一个撤消起作用,直到第一个撤销为止。

(+多个选择-不考虑更改)

票数 0
EN

Stack Overflow用户

发布于 2018-10-12 07:51:28

我认为在使用vba时,您总是会丢失撤消历史记录。**编辑:不用担心下面的内容会保留撤销历史,但是会再次引发单元格的更改。

看一看这个:

代码语言:javascript
运行
复制
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim KeyCells As Range

 Set KeyCells = Range("B6:B18")

 If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then
    ' Display a message when one of the designated cells has been
    ' changed.
    ' Place your code here.
    MsgBox "Cell " & Target.Address & " has changed."

 End If
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52774617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档