Excel:单独工作簿中的单元格的双向链接

Excel:单独工作簿中的单元格的双向链接

我是新手,不确定我问的是否正确。我有一个 Excel 电子表格,我想与客户共享,以便我们都可以编辑和更新其信息。但是,我只想共享一个部分,或者可能只有一个工作表,因为我上面有多个不同的帐户,这些帐户不是他的。我不想更新和编辑两个单独的工作簿。我希望做的是在我与他共享的工作簿和我当前的工作簿之间创建一个双向链接,这样当对一个工作簿进行更改时,它会自动更新另一个工作簿,反之亦然。

之前有一篇文章帮助我在工作表之间完成了这项工作,我很喜欢它(感谢 Christofer Weber,它效果很好)。我知道它需要 VBA,但我就是搞不懂。有什么想法吗?我只是希望修改当前用于工作表的 VBA。

当前一个

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range(Target.Address), Range("A2:D5")) Is Nothing Then
    Application.EnableEvents = False
    Sheets(1).Range(Target.Address).Value = Target
    Sheets(2).Range(Target.Address).Value = Target
    Sheets(3).Range(Target.Address).Value = Target
    Application.EnableEvents = True
End If
End Sub

这是我目前所得到的,但我知道最上面的一行是不正确的。

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range(Target.Address), Range("A2:D5")) Is Nothing Then
    Application.EnableEvents = False
    Workbooks("Test excel workbook 1 - macro.xlsm").Sheets(1).Range(Target.Address).Value = Target
    Workbooks("Test excel workbook 2 - macro.xlsm").Sheets(1).Range(Target.Address).Value = Target
    Application.EnableEvents = True
End If
End Sub

答案1

我已经测试过了,我认为它应该足以帮助你。但我注意到了以下几点。

首先要注意的是,Intersect如果你比较每个工作表中的不同范围,该方法就不起作用这个问题。您在这里没有明确地这样做,但我认为指定您正在使用的工作表而不是让 VBA 隐式地为您决定是明智的。

第二件事以此行为例:

Workbooks("Test excel workbook 1 - macro.xlsm").Sheets(1).Range(Target.Address).Value = Target

我个人认为将一个范围的值设置为另一个范围而不是将其设置为价值另一个范围,看起来则像这样:

Workbooks("Test excel workbook 1 - macro.xlsm").Sheets(1).Range(Target.Address).Value = Target.Value

下面是我想出的代码:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Const filePath As String = "C:\some\file\path\otherthing.xlsm"
    Dim otherwb As Workbook
    Dim otherws As Worksheet
    Dim thisws As Worksheet
    Dim rangeIntersection As Range

    'this will allow opening the other workbook without
    'displaying the white UI
    Application.ScreenUpdating = False

    'setting a reference to this worksheet
    Set thisws = ThisWorkbook.Worksheets("Sheet1")
    'opens an unopened workbook or it will simply set a reference
    'to this workbook if it's already opened
    Set otherwb = Excel.Workbooks.Open(filePath)
    'just chose a random worksheet
    Set otherws = otherwb.Worksheets(1)
    'doing the intersection
    Set rangeIntersection = _
        Application.Intersect(Range(Target.Address), _
        thisws.Range("A2:D5"))

    If Not rangeIntersection Is Nothing Then
        Application.EnableEvents = False
        otherws.Range(Target.Address).Value = Target.Value
        Application.EnableEvents = True
    End If

    'uncomment this if you do want to close the wb at the end
'    otherwb.Save
'    otherwb.Close
    Application.ScreenUpdating = True
End Sub

希望能帮助到你

相关内容