Excel 保留图纸宏以链接更改图纸名称的单元格

Excel 保留图纸宏以链接更改图纸名称的单元格,excel,worksheet,vba,Excel,Worksheet,Vba,在分别名为“Sheet1”和“Sheet2”的工作表中,我有两个名为INPUT_A_1和INPUT_A_2的单元格,我正在链接(更改一个单元格会触发另一个单元格中相同的更改)与下列工作非常好的工作表宏: 第1页: Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If (Target.Address = Range("INPUT_A_1").Address) Then

在分别名为“Sheet1”和“Sheet2”的工作表中,我有两个名为INPUT_A_1INPUT_A_2的单元格,我正在链接(更改一个单元格会触发另一个单元格中相同的更改)与下列工作非常好的工作表宏:

第1页:

Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False
 If (Target.Address = Range("INPUT_A_1").Address) Then
  Sheets("Sheet2").Range("INPUT_A_2") = Target.Value
 End If
 Application.EnableEvents = True
End Sub
第二张:

Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False
 If (Target.Address = Range("INPUT_A_2").Address) Then
  Sheets("Sheet1").Range("INPUT_A_1") = Target.Value
 End If
 Application.EnableEvents = True
End Sub
我的问题是,由于语法表(sheetname).Range(rangename),如果我决定重命名其中一个或两个工作表,那么我必须相应地修改宏。是否有某种解决方法不涉及按相应工作表名称调用单元格?当我在不同的工作表中有3个或3个以上的链接单元格时,这个问题显然变得更加突出

谢谢

解决方法是使用工作表的

使用工作表的代码名

访问工作表的最佳方法是使用代码名。 每个工作表都有一个工作表名和一个代码名。图纸名称是 Excel中工作表选项卡中显示的名称

更改图纸名称不会更改代码名称,这意味着 通过代码名引用图纸是一个好主意


根据上面Storax的优秀建议,下面是我实施的修复:

在第一个工作表中(可随意重命名):

在第二张工作表中(也可以随意重命名):

最后,在任何模块中:

Public Function SheetFromCodeName(CodeName$) As Worksheet
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If sh.CodeName = CodeName Then
           Set SheetFromCodeName = sh
           Exit For
        End If
    Next sh
End Function
SheetName和CodeName关联依据:


如果有多张带有链接单元格的工作表,并且删除了其中任何一张工作表,则“下一步出错恢复”应能正常工作。

事实上,可以使用工作表索引,从而完全避免使用SheetFromCodeName例程

第一页和第二页中的语法是

Worksheets(2).Range("INPUT_A_2") = Target.Value


明亮的谢谢工作得很有魅力!我从来没有改变过一个代号,也不打算改变,所以这是理想的。如果我出于任何原因删除了一份工作表,那么接下来一份简单的错误简历应该会起作用。
Public Function SheetFromCodeName(CodeName$) As Worksheet
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If sh.CodeName = CodeName Then
           Set SheetFromCodeName = sh
           Exit For
        End If
    Next sh
End Function
Worksheets(2).Range("INPUT_A_2") = Target.Value
Worksheets(1).Range("INPUT_A_1") = Target.Value