【问题标题】:Excel a change in cell value inserts a "S" in another cellExcel 单元格值的更改在另一个单元格中插入“S”
【发布时间】:2013-06-06 12:46:14
【问题描述】:

我已经粘贴了 worksheet1。注意列。要监控的在标题描述和 Healthman 下。一旦在更改列下发生更改,就会插入一个 S。例如 Spectacle Frame 更改为 Spec Frame,我们在 Change 下插入 S。更改栏原来是空的。在 Healthman 下,当价格发生变化时,将在 Change 列下插入一个 P。当要删除产品时,即删除行时,将在更改下插入 X。当插入一行时,因为我正在逐个单元格地与隐藏的工作表进行比较,这就是我更新隐藏工作表的原因。我尝试了以前的代码,但它不起作用,并想粘贴表格供您查看。
图注:P=价格变化
N = 新 X = 已删除 S = 描述
代码更改说明 HEALTHMAN

    40501       Spectacle Frame             
    40609       Sunglasses              
    40525   S   Ready Made Optical              
    41008       Spectacle Case              
    43025   P   Transfer - Zyl or Metal  Frame  198.00          
    43126   P   Transfer - Nylon Supra Frame    314.00          
    43136   P   Transfer - Rimless Frame    359.00      

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    在使用 Worksheet_Change 时,您必须确保两件事。

    1)适当的错误处理是必须的

    2) 关闭.EnableEvents 以避免无限循环的可能性。

    假设

    1)你想捕捉单元格A1中的变化

    2)你想在A2中显示“S”

    所以请在下面的代码中根据需要进行更改。

    代码

    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo Whoa
    
        If Not Intersect(Target, Range("A1")) Is Nothing Then
            Application.EnableEvents = False
            Range("A2").Value = "S"
        End If
    
    LetsContinue:
        Application.EnableEvents = True
        Exit Sub
    Whoa:
        MsgBox Err.Description
        Resume LetsContinue
    End Sub
    

    跟进

    这是你正在尝试的吗?

    这在“ThisWorkbook”代码区域中。

    Private Sub Workbook_Open()
       Dim hiddenSheet As Worksheet
    
       Set hiddenSheet = Me.Worksheets.Add
       hiddenSheet.Visible = xlSheetVeryHidden
    
       On Error Resume Next
       Application.DisplayAlerts = False
       Sheets("HiddenSheet").Delete
       Application.DisplayAlerts = True
       On Error GoTo 0
    
       hiddenSheet.Name = "HiddenSheet"
    
       Sheet1.Range("A1:D15").Copy hiddenSheet.Range("A1:D15")
    End Sub
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       On Error Resume Next
       Application.DisplayAlerts = False
       Sheets("HiddenSheet").Delete
       Application.DisplayAlerts = True
       On Error GoTo 0
    End Sub
    

    这在相关的工作表区域

    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo Whoa
    
        If Not Intersect(Target, Range("A1:D15")) Is Nothing Then
            Dim old_value
    
            Application.EnableEvents = False
    
            old_value = Sheets("HiddenSheet").Range(Target.Address).Value
    
            If Target.Value <> old_value Then
                '~~> Change 1 to whatever offset that you want.
                Target.Offset(0, 1).Value = "S"
            End If
        End If
    
    LetsContinue:
        Application.EnableEvents = True
        Exit Sub
    Whoa:
        MsgBox Err.Description
        Resume LetsContinue
    End Sub
    

    HTH

    席德

    【讨论】:

    • 我明白你在做什么。我提供的代码可以工作,但您必须修改它以满足您的需要。您上传的文件没有我提供的代码。您必须使用上述代码并进行必要的更改。完成后重新上传文件,以便我可以看到您理解代码。这也太长了。除了有链接的帖子之外,您可以删除上面所有的 cmets 吗?我也会这样做
    • 您已将代码粘贴到“Prof fee History”表中?您不应该在“Sheet1”中发布代码吗?为什么要使用“C1:G15”?那是你要陷进去的范围吗?
    • 非常感谢。我已将其粘贴到 sheet1。是的,我想跟踪描述、保健员和光学助手。我喜欢代码。它的工作。不过我有问题。当我只是双击描述中的一个单元格而不更改描述时,它会注册为更改并插入与 Healthman 列中相同的 S。我必须做些什么来抵消双击不被解释为更改。
    • 当价格和描述都发生变化时,它必须插入SP。
    【解决方案2】:

    您可以使用 Worksheet_Change 事件。参见例如thisthat

    添加到工作集的示例代码 - 当您更改另一个单元格时,A3 将自动更改,如果更改的单元格是 A1,则具有特定行为:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = Range("A1").Address Then
            Range("A3") = "You changed A1"
        ElseIf Target.Address <> Range("A3").Address Then 'to prevent a change of A3 to trigger an update
            Range("A3") = "You changed another cell"
        End If
    End Sub
    

    【讨论】:

    • 我注意到,如果我只是单击单元格而不更改其中的值或文本,它会在下一个单元格中插入一个值“S”。有没有办法可以将原始值保留或存储在隐藏的工作表中,并将其与单元格退出时的单元格值进行比较。这样我就可以区分真正的变化和鼠标点击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2021-08-02
    • 1970-01-01
    • 2016-12-09
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多