单元格1 =单元格2,单元格2 =单元格1,两者都有不同的输入方法,Excel VBA

时间:2017-04-10 20:28:15

标签: excel vba excel-vba

我希望2张纸中的2个单元格始终相等,但是对于任何一个单元格而言,它们都有自己不同的公式或列表或输入。我使用以下代码并且它可以工作,但只需要修复错误。

信息中心表

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub

    If Target.Address = "$I$20" Then
        Sheets("Questionnaire").Range("$AH$15") = Sheets("Dashboard").Range("$I$20").Value
    End If
End Sub

问卷调查表

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub

    If Target.Address = "$AH$15" Then
        Sheets("Dashboard").Range("$I$20") = Sheets("Questionnaire").Range("$AH$15").Value
    End If

End Sub

请帮我查一下错误?

2 个答案:

答案 0 :(得分:1)

尝试在每个处理程序上设置单元格的值之前添加Application.EnableEvents = False,例如:

信息中心表

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Target.Address = "$I$20" Then
    Application.EnableEvents = False
    Sheets("Questionnaire").Range("$AH$15") = Sheets("Dashboard").Range("$I$20").Value
    Application.EnableEvents = True
End If

End Sub

问卷调查表

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Target.Address = "$AH$15" Then
    Application.EnableEvents = False
    Sheets("Dashboard").Range("$I$20") = Sheets("Questionnaire").Range("$AH$15").Value
    Application.EnableEvents = True
End If

End Sub

请记住,设置值会覆盖输入的任何公式。

答案 1 :(得分:0)

您可以将工作簿级别事件放在Workbook代码窗格中:

Private Sub Workbook_SheetChange(ByVal Sh As Object, _ 
 ByVal Source As Range)

Select Case sh.Name & Source.Address
    Case "Dashboard$I$20"
        Equalize "Questionnaire", "$AH$15", Source

    Case "Questionnaire$AH$15"
        Equalize "Dashboard", "$I$20", Source
End Sub

Sub Equalize(targetShName As String, targetCellAddr As String, source As Range)
    Application.EnableEvents = False
    Sheets(targetShName).Range(targetCellAddr).Value = source.Value
    Application.EnableEvents = True
End If