我有一個工作簿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。我認爲這些時期對於下面評論和迴應中發佈的解決方案造成了一些麻煩,因爲當我刪除這些時期這些技術是成功的。
如果你知道程序的名稱和位置,然後使用'Application.Run'例如,可以運行它:'Application.Run「!temp.xlsm Sheet1.CommandButton1_Click」' **編輯**快照! –
@TimWilliams,謝謝,這有幫助,當我用文件名「temp.xlsm」運行它時,它可以工作,但是我的實際文件名導致一些問題,因爲它有周期;請參閱下面我對nutch的回答的回覆。對不起,沒有包括在原來發布的問題中。 – sigil
請參閱此處:http://stackoverflow.com/questions/2136768/using-application-run-in-excel-vba-when-workbook-name-contains-spaces您需要在文件名周圍放置單引號。 –