2016-12-27 94 views
1

我正在環視Excel嵌入Excel工作簿並對嵌入數據進行讀取/寫入操作。使用Excel數據粘貼專用似乎嵌入整個工作簿,而不僅僅是選定/複製的數據。如何在嵌入OLE的Excel對象中獲取ActiveSheet

我能夠獲得對Visio頁面上嵌入的Excel工作簿對象的引用,但我無法分辨哪些工作表處於活動狀態並在Visio中顯示。看來,我只能告訴正在編輯表格的活動表單。當它在頁面上時,Workbook對象爲ActiveSheet返回Nothing,並且工作簿沒有Windows。這是有道理的,它沒有窗戶,但沒有太多的意義,沒有積極的工作表。

有沒有辦法找出Excel OLE對象中的「活動」工作表?或者我應該寫的任何代碼都是在假設所有內容都在表1中的情況下工作的?我可能會以編程的方式添加任何嵌入式工作簿,因此將每本書限制在一張紙上不會太大,但我只是想確保沒有一些屬性可以忽略,這會告訴我我想要什麼。

此代碼將在網頁上找到一個Excel OLE對象,並設置單元格A1和B1在工作簿中的表1:

Dim CheckShp As Visio.Shape 
Dim CheckObj As OLEObject 
For Each CheckObj In ActivePage.OLEObjects 
    If CheckObj.ProgID Like "Excel.Sheet.*" Then 
     Dim Sheet As Excel.Worksheet 
     Dim Bk As Excel.Workbook 
     Set Bk = CheckObj.Object 
     Set Sheet = Bk.Worksheets(1) 

     Sheet.Cells(1, 1) = "HELLO" 
     Sheet.Cells(1, 2) = "WORLD" 

    End If 
Next CheckObj 
+0

,你可以得到不'Activating'或'Editing'嵌入OLE對象反正工作簿對象的引用? –

+2

到目前爲止你有什麼代碼? – BruceWayne

+0

我可以很容易地獲得對工作簿的引用,但我想要獲取對不編輯OLE對象時顯示的工作表的引用。沒有什麼明顯的,我可以看到(ActiveSheet是沒有工作簿對象,除非OLE對象正在編輯)。 –

回答

-1

你不需要ActiveSheet,這實際上是什麼,如果你是不編輯。您可以遍歷Bk.Worksheets,從1到Worksheets.Count,找到一個具有特定名稱的工作表。

而且,該指數可以是一個名字,所以這應該工作:

Set Sheet = Bk.Worksheets("MySpecificSheet") 
+0

問題是'正在顯示錶單的名稱是什麼'。我知道如何獲得特定的表格。問題是詢問如何找出OLE對象正在顯示的表單。 –

+0

對不起,我誤解了這個問題。答案是「沒有名字,因爲沒有顯示任何工作表,否則就是ActiveSheet」 –

+0

據我所知,Excel對象沒有主動渲染到屏幕上,而且OLE向我展示了一個圖形上一次表單呈現的時間。我真的很想看看Workbook對象或OLE對象上是否存在一個屬性,它會告訴我顯示的表單的名稱。 –