gpt4 book ai didi

excel - 在特定单元格更改时捕获数据

转载 作者:行者123 更新时间:2023-12-04 20:55:10 25 4
gpt4 key购买 nike

当某些单元格发生变化时,我正在尝试从特定单元格中捕获数据:

当单元格 B5 更改时,我想在 Sheet2 的 A 列和 B 列中捕获单元格 B3 和 B4 中的数据。

当单元格 C5 更改时,我还希望能够在 C 和 D Sheet2 列中的单元格 C3 和 C4 中捕获数据。

宏确实会执行此操作 - 但是,当 B5 或 C5 更改时,它会从 B 和 C 列中捕获数据 - 而不是当 B5 更改时仅捕获单元格 B3 和 B4 中的数据,而当 C5 仅更改来自单元格 C3 和 C4 中的数据时。

非常感谢任何帮助 - 这是我目前的代码:

    Sub Worksheet_Calculate()
Worksheet_Change Range("B5:C5")
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

'Capture data when cell B5 changes
If Not Intersect(Target, Range("B5")) Is Nothing Then
Application.EnableEvents = False
Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("B3").Value
Application.EnableEvents = True
Application.EnableEvents = False
Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("B4").Value
Application.EnableEvents = True

End If

'Capture data when cell C5 changes
If Not Intersect(Target, Range("C5")) Is Nothing Then
Application.EnableEvents = False
Sheets("Sheet2").Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("C3").Value
Application.EnableEvents = True
Application.EnableEvents = False
Sheets("Sheet2").Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("C4").Value
Application.EnableEvents = True



End If

End Sub

最佳答案

这似乎对我有用..

Private Sub Worksheet_Change(ByVal Target As Range)
Dim oWS As Worksheet: Set oWS = ThisWorkbook.Worksheets("Sheet2")

Application.EnableEvents = False
With oWS
If Not Intersect(Range("B5"), Target) Is Nothing Then
.Range("A" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("B3").Value
.Range("B" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("B4").Value
ElseIf Not Intersect(Range("C5"), Target) Is Nothing Then
.Range("C" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("C3").Value
.Range("D" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("C4").Value
End If
End With
Application.EnableEvents = True
End Sub

编辑

When the cell value is changed by a formula



如果您希望在公式更改单元格值时更新值,则方法不同:

首先,在您的 Module ,声明公共(public)变量:
Public sB5Value As String
Public sC5Value As String

然后,在 Workbook_Open捕获单元格的当前值
Private Sub Workbook_Open()
With Thisworkbook.Worksheets("Sheet2")
sB5Value = .Range("B5").Value
aC5Value = .Range("C5").Value
End With
End Sub

现在在您的 Worksheet (我假设是 Sheet2 )计算功能,您可以执行检查
Private Sub Worksheet_Calculate()
With Thisworkbook.Worksheets("Sheet2")
' B5 change check
If .Range("B5").Value <> sB5Value Then
.Range("A" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("B3").Value
.Range("B" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("B4").Value

' We have to update the value for B5 in the variable
sB5Value = .Range("B5").Value
End If

' C5 change check
If .Range("C5").Value <> sC5Value Then
.Range("C" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("C3").Value
.Range("D" & .Rows.count).End(xlUp).Offset(1, 0).Value = .Range("C4").Value

' We have to update the value for C5 in the variable
sC5Value = .Range("C5").Value
End If
End With
End Sub

注意:我留下了原始代码以防万一
您也可以制作 IF条件不区分大小写(即使用 LCase UCase ),但我会把它留给你。我还没有测试过这段代码,但这个想法应该可行

关于excel - 在特定单元格更改时捕获数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49560549/

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