2017-09-26 33 views
0

我從spreadsheetguru發現了這段代碼。代碼的目的是激活Excel 16.0庫。我希望能夠在我的代碼之前添加它,以便它自動添加庫,然後運行需要它的其餘代碼。現在我有兩個潛艇。一個是我在這裏的Private Sub,另一個是Public Sub和我的宏的其餘部分。現在,當我運行宏時,它會在此處運行代碼psote,然後停止。然後,如果我再次點擊它將運行下一個子。我有什麼辦法讓這一切都只需點擊一下?也許通過把它全部分成一個子組,或者我不知道的其他私人/公共子組合?如何讓這段代碼完全在一次點擊中運行?

謝謝!

Private Sub ActivateReferenceLibrary() 

'PURPOSE: Activate Specific Object Libraries 

'Error Handler in Case Reference is Already Activated 
    On Error Resume Next 

    'Activate PowerPoint Library (version 2.9) 
     Application.VBE.ActiveVBProject.References.AddFromGuid _ 
      GUID:="{00020813-0000-0000-C000-000000000046}", _ 
      Major:=0, Minor:=0  

'Reset Error Handler 
    On Error GoTo 0 

End Sub 
+1

你嘗試過這麼遠嗎?你有沒有嘗試從另一個子調用ActivateReferenceLibrary?在調用子例程時,請參閱此處以瞭解有關範圍的一些信息https://www.thespreadsheetguru.com/blog/2014/3/5/explaining-private-vs-public-claclarations – QHarr

+0

您僅發佈的代碼運行一個命令,沒有別的,所以你爲什麼期望它做更多? – jsotola

+0

@QHarr這些是我嘗試的三種方式:[從ActiveReferenceLibrary調用](https://pastebin.com/3Fk4DnnC),[從averageScoreRelay調用](https://pastebin.com/7nVweNPr),[No Call,just Public Subs](https://pastebin.com/Eq1pqVjc)。這些都沒有工作。他們只是給我錯誤,如:Sub或Function未定義,用戶定義類型未定義,或者它沒有給我錯誤,只是運行ActiveReferenceLibrary並停止。 – Pinlop

回答

1

在文章spreadsheetguru它被賦予作爲子ActivateReferenceLibrary(),所以你需要你的私人子改變,只是子。然後在你的其他Sub中,我認爲叫averageScoreRelay,在開始時你會寫下這一行: Call ActivateReferenceLibrary。 確保兩個子例程都在相同的工作簿和標準模塊中(您可以將它們放在同一個標​​準模塊中)。

請記住,某些庫引用是默認的,不能刪除。雖然你會得到一個不同的錯誤信息。例如,如果您使用的是Excel 2016,則默認情況下,Excel 16.0對象庫將自動出現。您不能將其添加到早期版本或從2016年刪除(我相信)。

如果未能發佈更多的代碼,我們可以看到您的其他子例程如何工作。

一些其他的解決方案,如後期綁定,你可以刪除某些參考依賴,正在這裏討論: VBA reference libraries

+0

我仍然收到相同的錯誤:/ [這是我的完整代碼](https://pastebin.com/gFDYTtAq)。我從PowerPoint開始進入Excel,這就是爲什麼我需要Excel庫。我想避免後期綁定,因爲它會使我已經很慢的代碼至少減慢一倍。但除了時間之外,我真的很想嘗試這種方式來工作。 – Pinlop

+0

您可以確認您要添加哪個庫引用,以及您使用的是哪個版本的MS Office?如果您安裝了MS Office 2016,則Excel 2016對象庫將默認顯示。 – QHarr

+0

我有辦公室365,我期待添加Excel 16.0庫。從PowerPoint啓動時,默認情況下只有PowerPoint 16.0。 – Pinlop