2017-02-07 66 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

你的意思是你想讓代碼保留在原始工作簿中嗎? –

相關問題