在工作簿中互连Excel单元格

时间:2018-08-31 16:18:24

标签: excel vba

我有一个Excel工作簿,其中有4个工作表,其中有两个单元格名称开始日期和结束日期,其值在所有4个工作表中都应该相同,如果我要更改其他三个工作表中任何一个的值,工作表会自动更新该值。反之亦然。

2 个答案:

答案 0 :(得分:3)

如果其中任何一个单元格发生更改,请使用Workbook_SheetChange事件更新每个工作表上的相同单元格。


例如,如果每个工作表都具有命名范围start_dateend_date(其中范围仅限于该工作表),则对任何start_date或{{1} }任何工作表上的范围 都会更新所有其他工作表上的相应范围。

end_date

如果您是通过单元格的地址而不是通过已定义的名称来引用单元格,则可以使用以下方法:

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    On Error GoTo SafeExit
    Application.EnableEvents = False
    Dim ws As Worksheet

    With Sh
        If Not Intersect(Target, .Range("start_date")) Is Nothing Then
            For Each ws In Worksheets
                ws.Range("start_date").Value = Target.Value
            Next ws
        End If
        If Not Intersect(Target, .Range("end_date")) Is Nothing Then
            For Each ws In Worksheets
                ws.Range("end_date").Value = Target.Value
            Next ws
        End If
    End With

SafeExit:
    Application.EnableEvents = True
End Sub

此代码在VBA编辑器的Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) On Error GoTo SafeExit Application.EnableEvents = False Dim ws As Worksheet With Sh ' "A1" is the start date, change as needed If Not Intersect(Target, .Range("A1")) Is Nothing Then For Each ws In Worksheets ws.Range("A1").Value = Target.Value Next ws End If ' "B1" is the end date, change as needed If Not Intersect(Target, .Range("B1")) Is Nothing Then For Each ws In Worksheets ws.Range("B1").Value = Target.Value Next ws End If End With SafeExit: Application.EnableEvents = True End Sub 模块中。

答案 1 :(得分:0)

您不需要VBA,而需要命名范围。将光标放在start_date的输入单元格中,例如E5,然后单击命名的范围框(在工作表网格的左上角,在A列的正上方)。在start_date上键入E5,然后点击Enter。现在,单元格E5命名为start_date。如果您在工作簿中的其他任何地方使用=start_date,它将引用单元格E5的当前内容。如果要以任何方式编辑命名范围,请转到功能区菜单FORMULAS -> Name Manager

如果您仅出于学习VBA的目的而使用VBA进行此操作,我建议您改选VBA课程。 Udemy的一些好东西经常以10美元左右的价格出售,我相信其他地方也有很多免费资源。