2016-11-14 36 views
0

雖然在我的PowerPoint宏的工作,我注意到以下幾點:爲什麼必須使用Set來保存對象?

爲了獲得當前活動的幻燈片:

Dim currSlide As Slide 
Set currSlide = Application.ActiveWindow.View.Slide 

要獲得一個新創建的文本框:

Dim textbox As Shape 
Set textbox = currSlide.Shapes.AddTextbox(...) 

我VBA新手,曾與Java,C++ & C#合作過。爲什麼必須使用Set以上?爲什麼使用Slide & Shape反而會產生錯誤?變量聲明在這方面的工作方式與VBA有何不同?

回答

2

這是從Byte Comb - Values and References in VBA

在VBA採取值類型和引用類型之間的差通過分配參考時需要關鍵字集的顯式。另外,您經常會看到分配一個稱爲「綁定」的引用。

Byte Comb詳細介紹了VBA的交互操作。我強烈建議使用VBA的任何認真的編程閱讀它。

通俗地說:Set被用來讓編譯器知道編程想要一個變量引用一個Object類型。通過這種方式,當您嘗試爲對象分配值時,編譯器會知道發生錯誤。

另一個原因是對象可以有默認值。

在這個例子中,我有一個名爲value的變量是Variant類型。變體可以是VBA中的任何類型。注意編譯器知道如何在value = Range("A1")時分配Range的值,並在Set value = Range("A1")中使用關鍵字Set時設置對Range的引用。

enter image description here

+1

另外(和相關的) - 在VBA對象可以具有默認屬性:例如'Range'具有'Value'作爲其默認屬性。如果沒有'Set',像'a = Range(「A1」)'這樣的東西就會模糊不清(你的意思是等於範圍本身還是其值?) –

+0

@TimWilliams再次感謝。我更新了我的答案。我可能可以更好地解釋它,但我認爲單步執行代碼示例確實強調了一些要點。 – 2016-11-14 03:38:01

+0

另請參閱:http://stackoverflow.com/questions/9481140/exposing-property-as-variant-in-net-for-interop/9924325#9924325 –

相關問題