根据单元格引用

时间:2017-02-07 15:46:41

标签: excel vba excel-vba dynamic

我有一个工作簿,可以将工作表复制并移动到新工作簿并将其保存到选定目标。我已将代码保存到该工作表中,以便将其转移到新工作簿。我需要编码,以便它将宏名称分配给工作簿中的形状。

因此编辑前的代码如下所示:

    Selection.OnAction = "Sheet17.PEER_REVIEW_COMPLETED"

问题是,如果有人在工作簿中添加了一张工作表,那么工作表不再是工作表17.因此,我在一个单元格中创建了一个公式,该公式吐出"Sheet17.PEER_REVIEW_COMPLETED"但是17会根据有多少自动更改床单有。如何指定Selection.OnAction来引用该单元格?

2 个答案:

答案 0 :(得分:0)

一种方法是在单独的宏中嵌入对单元格的引用。例如,如果您的宏名称包含在以下范围名称中:

Public Sub runtest()

Application.Run Sheet2.Range("D14").Value

End Sub

您的Selection.OnAction值可以改为

Selection.OnAction = "runtest"

我不确定是否有更直接的方法可以做到这一点,或者这样做是否有任何缺点,但我只是尝试过这种方式似乎确实有效

答案 1 :(得分:0)

如果您使用worksheet.CopyWorksheet.Move方法复制工作表,则可以立即获取复制工作表的代码模块名称句柄。

示例:

    Dim destWB As Workbook
    Set destWB = Workbooks.Open("...")
    ' ...
    Sheet17.Move After:=destWB.Sheets(destWB.Sheets.Count)
    Dim codeName As String: codeName = destWB.Sheets(destWB.Sheets.Count).CodeName
    Debug.Print codeName
    '...
    myShape.OnAction = codeName & ".PEER_REVIE"