Vba Excel单元格值中的更改插入一个“;S";在另一个牢房里

Vba Excel单元格值中的更改插入一个“;S";在另一个牢房里,vba,excel,Vba,Excel,我已经粘贴了工作表1。请注意这些列。要监控的一个在标题描述和Healthman下。在“更改”列下发生更改后,将插入一个S。例如,眼镜架更改为规格架,我们在更改中插入了S。“更改”列为空。在Healthman下,当价格发生变化时,在“变化”列下插入一个P。当要删除产品时,即删除行,在“更改”下插入X。当插入一行时,因为我正在逐单元格与隐藏的工作表单元格进行比较,这就是我更新隐藏工作表的原因。我尝试了前面的代码,但它不起作用,我想粘贴工作表供您审阅。 图例:P=价格变动 N=新X=已删除S=说明 代

我已经粘贴了工作表1。请注意这些列。要监控的一个在标题描述和Healthman下。在“更改”列下发生更改后,将插入一个S。例如,眼镜架更改为规格架,我们在更改中插入了S。“更改”列为空。在Healthman下,当价格发生变化时,在“变化”列下插入一个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      

您可以使用工作表更改事件。参见示例和

要添加到工作表的示例代码-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
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Address=Range(“A1”).Address,则
范围(“A3”)=“您更改了A1”
ElseIf Target.Address Range(“A3”).Address Then“防止A3更改以触发更新
范围(“A3”)=“您更改了另一个单元格”
如果结束
端接头

您可以使用工作表更改事件。参见示例和

要添加到工作表的示例代码-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
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Address=Range(“A1”).Address,则
范围(“A3”)=“您更改了A1”
ElseIf Target.Address Range(“A3”).Address Then“防止A3更改以触发更新
范围(“A3”)=“您更改了另一个单元格”
如果结束
端接头

在使用
工作表\u Change
时,您必须确保两件事

1)必须进行适当的错误处理

2)关闭
。启用事件
,以避免出现无休止的循环

假设

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
Private子工作表\u更改(ByVal目标作为范围)
关于错误转到哇
如果不相交(目标,范围(“A1:D15”))则为零
模糊旧值
Application.EnableEvents=False
旧值=工作表(“HiddenSheet”).Range(Target.Address).value
如果目标值为旧值,则
“~~>将1更改为所需的任何偏移量。
Target.Offset(0,1).Value=“S”
如果结束
如果结束
让我们继续:
Application.EnableEvents=True
出口接头
哇
MsgBox错误说明
继续
端接头


Sid

在使用
工作表\u Change
时,您必须确保两件事

1)必须进行适当的错误处理

2)关闭
。启用事件
,以避免出现无休止的循环

假设

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
Private子工作表\u更改(ByVal目标作为范围)
关于错误转到哇
如果不相交(目标,范围(“A1:D15”))则为零
模糊旧值
Application.EnableEvents=False
旧值=工作表(“HiddenSheet”).Range(Target.Address).value
如果目标值为旧值,则
“~~>将1更改为所需的任何偏移量。
Target.Offset(0,1).Value=“S”
如果结束
如果结束
让我们继续:
Application.EnableEvents=True
出口接头
哇
MsgBox错误说明
继续
端接头


Sid

我注意到,如果只单击单元格而不更改其中的值或文本,它会在下一个单元格中插入一个值“S”。是否有办法将原始值保存或存储在隐藏的工作表中,并将其与单元格退出时的单元格值进行比较。通过这种方式,我可以区分真正的更改和鼠标单击。我注意到,如果我只单击单元格而不更改其中的值或文本,它会在下一个单元格中插入一个值“S”。是否有办法将原始值保存或存储在隐藏的工作表中,并将其与单元格退出时的单元格值进行比较。通过这种方式,我可以将真正的更改与鼠标单击区分开来。我知道您正在尝试做什么。我提供的代码可以工作,但您必须修改它以满足您的需要。你上传的文件没有我提供的代码。您必须使用上述代码并进行必要的更改。一旦完成,然后重新上传文件,以便我可以看到你理解代码。这也太长了。除了有链接的帖子,你能删除上面所有的评论吗?我也会这么做你把代码贴在“教授费历史记录”上了吗?你不应该在“Sheet1”中发布代码吗?你为什么用“C1:G15”?这就是你想要捕捉的范围吗?非常感谢。我已经把它贴在床单上了。是的,我想跟踪描述、健康人和光学助手。我喜欢代码。它起作用了。不过我有个问题。什么时候