2014-03-12 14 views
0

我正在將舊的VBA項目轉換爲C#VSTO。我知道很多代碼必須離開窗口,但我希望仍然可以使用嵌入到表單中的佈局和對象。對象的示例包括控件按鈕,標籤,圖像等。與OleObjects /嵌入式控件交互VSTO,VBA轉換

當我在創建新項目時選擇文檔作爲模板時,所有這些都很好地保持。我遇到了問題,因爲我似乎無法選擇或引用任何這些對象。例如,在工作表中間有一個按鈕。如果我在VS2012中打開工作表,我可以看到按鈕。我甚至可以「突出顯示」但不選擇它。如果我右鍵單擊該按鈕以調出屬性,它將調出表單的屬性,而不是按鈕。我無法調整它們或將它們移動(不是我想要的)。

我也似乎無法引用它們的代碼,即...Sheet1.ControlButton1......Sheet1.OleObject(n)...將永遠不會引用任何內容。如果我直接從解決方案文件夾打開工作簿並單擊相同的控件,我可以看到屬性,並且Excel中的公式欄顯示爲=EMBED("Forms.CommandButton.1","")

我還沒有能夠遍歷所有的OleObjects,只顯示他們的名字。很明顯,在收藏這些東西的地方,我找不到它。

回答

1

嘗試使用Workbook.Shapes集合

根據以下注釋進行編輯。此作品: Globals.ThisWorkbook.Worksheets(1).OLEObjects(「CommandButton1」);

+0

我試過了。我可以添加一個形狀,然後當我通過形狀循環時,新形狀似乎是唯一的形狀。 –

+1

好了,糟糕的解決方法,但是你可以在實際的VBA項目中創建一些小的包裝函數,除了返回對這些對象的引用之外什麼都不做?然後你可以在C#中使用Object obj = Application.Run(FunctionName)。 – steveo40

+0

值得一試。我會給它一個鏡頭,讓你知道。 –