2017-02-07 33 views
0

我有一个工作簿,可以在工作表上复制并移动到新工作簿并将其保存到选定的目标。我已将代码保存到该工作表中,以便传送到新的工作簿。我需要编写代码,以便它将宏名称分配给工作簿中的形状。指定宏名称toi基于单元格引用的按钮

所以编辑之前的代码如下所示:

Selection.OnAction = "Sheet17.PEER_REVIEW_COMPLETED" 

的问题是,如果有人添加了一个表来感动板工作簿不再片17所以,我在一个单元格中创建一个公式吐出"Sheet17.PEER_REVIEW_COMPLETED",但是17会自动根据有多少张纸张进行更改。如何分配Selection.OnAction来引用该单元格?

回答

0

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

Public Sub runtest() 

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

End Sub 

你Selection.OnAction值也可以取而代之

Selection.OnAction = "runtest" 

我不知道是否有这样做的更直接的方式或者如果这样做有任何缺点,但我刚刚尝试过,并且这种方式似乎工作

+0

问题是,当我的工作表复制到一本新书存储在当前工作簿中的宏不动过。转移到新工作簿的唯一代码是嵌入到工作表中的代码。嵌入式代码的问题在于它需要在其之前具有图纸编号。实际工作表的名称始终是相同的,也许有一种方法可以通过实际工作表名称来调用它? – Bhiggz

+0

@Bhiggz嵌入式代码不需要在其中包含工作表编号 - 你说你已经在一个单元格中创建了一个公式,它为您提供了工作表编号和宏名称。以上代码允许您执行的操作是运行在该单元中定义的宏。宏“runtest”运行Sheet2单元格D14中指定的任意宏(根据需要进行修改) - 需要使用其中输出“Sheet17.PEER_REVIEW_COMPLETED”的公式的单元格。 – danl

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" 
+0

有没有办法只分配按钮来调用嵌入到活动工作表中的代码? – Bhiggz

+0

'ActiveSheet'通常是你刚才'Move'd或'Copy'd的,所以你可以使用'codeName = ActiveSheet.CodeName'。但指望它不是好的做法,也不健壮!使用显式引用要好得多。 :) –

+0

你的意思是你想让代码保留在原始工作簿中吗? –

相关问题