【问题标题】:How To Clear Contents of A Cell If Another Cell Changes In VBA?如果另一个单元格在 Vba 中发生变化,如何清除一个单元格的内容
【发布时间】:2022-11-22 09:13:08
【问题描述】:

我对 vba 非常陌生,我在工作表 1 中有一个 A 列,在工作表 2 中有一个 B 列。我想如果工作表 1 A 列中的一个单元格发生变化,那么工作表 2 B 列中的一个单元格也应该改变。

Private Sub Worksheet_Change (ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Sheets("Sheet2").Range("B:B").ClearContents
End If
End Sub

我已经试过了,但它只是清除了整个专栏。

任何帮助将不胜感激。

【问题讨论】:

  • Sheets("Sheet2").Range("B:B").ClearContents ---> Sheets("Sheet2").Range("B" & Target.Row).ClearContents。这假设 Target 只是一个单元格。
  • 仅供参考,在工作表代码模块中,您可以使用 Me 而不是(例如)Sheets("Sheet2")

标签: excel vba


【解决方案1】:

其中之一应该可以解决问题:

Option Explicit
'
' If cell is edited in any way
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count = 1 And Not Intersect(Target, Range("A:A")) Is Nothing Then
    Sheets("Sheet2").Range("B" & Target.Row).ClearContents
    End If
End Sub
'
' If cell is cleared
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "" And Target.Cells.Count = 1 And Not Intersect(Target, Range("A:A")) Is Nothing Then
    Sheets("Sheet2").Range("B" & Target.Row).ClearContents
    End If
End Sub

【讨论】:

    【解决方案2】:

    工作表更改:清除另一个工作表

    Private Sub Worksheet_Change(ByVal Target As Range)
        
        Const SOURCE_COLUMN As String = "A"
        Const DESTINATION_NAME As String = "Sheet2"
        Const DESTINATION_COLUMN As String = "B"
    
        Dim dws As Worksheet, srg As Range, ColumnOffset As Long
        
        With Me
            Set srg = Intersect(Target, .Columns(SOURCE_COLUMN))
            If srg Is Nothing Then Exit Sub
            ColumnOffset = .Columns(DESTINATION_COLUMN).Column _
                - .Columns(SOURCE_COLUMN).Column
            Set dws = .Parent.Worksheets(DESTINATION_NAME)
        End With
    
        Dim durg As Range, drg As Range, sarg As Range
        
        For Each sarg In srg.Offset(, ColumnOffset).Areas
            Set drg = dws.Range(sarg.Address)
            If durg Is Nothing Then Set durg = drg Else Set durg = Union(durg, drg)
        Next sarg
    
        If Not durg Is Nothing Then durg.ClearContents
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多