2012-10-31 34 views
0

我有一個工作簿Wbk1其中工作表有一個ActiveX按鈕。我想從另一個工作簿Wbk2運行按鈕的關聯Sub。將Sub的代碼複製到Wbk2是不現實的,因爲它反過來會調用Wbk1中的一組函數。我試過如下:如何以編程方式單擊另一個工作簿中的ActiveX按鈕?

Sub pushButton() 

Dim obj As OLEObject 
Dim btn As MSForms.CommandButton 

For Each obj In Wkb1.Sheets("testSheet").OLEObjects 
    If TypeOf obj.Object Is MSForms.CommandButton Then 
    set btn=obj.Object 
    debug.print btn.Caption 'used to test whether or not For loop is picking up button 
    obj.Activate 
    SendKeys " " 
    End If 
Next 

End Sub 

這不僅是一個不雅SendKeys()黑客攻擊,但它不工作;該按鈕獲得焦點,但不會被推動。我知道For循環正確地迭代了對象,包括CommandButton,因爲我可以獲取按鈕的標題。我怎樣才能從Wbk2點擊這個按鈕(從而運行它的私人小組)?

編輯:問題的實際文件名格式爲123A_1.0-2.0.xlsm。我認爲這些時期對於下面評論和迴應中發佈的解決方案造成了一些麻煩,因爲當我刪除這些時期這些技術是成功的。

+1

如果你知道程序的名稱和位置,然後使用'Application.Run'例如,可以運行它:'Application.Run「!temp.xlsm Sheet1.CommandButton1_Click」' **編輯**快照! –

+0

@TimWilliams,謝謝,這有幫助,當我用文件名「temp.xlsm」運行它時,它可以工作,但是我的實際文件名導致一些問題,因爲它有周期;請參閱下面我對nutch的回答的回覆。對不起,沒有包括在原來發布的問題中。 – sigil

+1

請參閱此處:http://stackoverflow.com/questions/2136768/using-application-run-in-excel-vba-when-workbook-name-contains-spaces您需要在文件名周圍放置單引號。 –

回答

1

如何只

Application.Run (wb1.Name & "!MacroName") 
+0

雖然我也需要在按鈕所在的位置包含工作表名稱,比如'Application.Run「Wbk1!Sheet1.MacroName',這有助於解決問題,我的實際工作簿名稱中包含句點,例如Wbk1.0.xlsm 。'Wbk1.0!Sheet1.MacroName'和'Wbk1.0.xlsm!Sheet1.MacroName'都沒有成功運行該程序,因爲第一個給出了「找不到文件」的錯誤,第二個給出了「Method'Run'對象'_Application'失敗「錯誤。 – sigil

相關問題