2010-09-19 56 views
6

使用Shapes.AddPicture(...)方法將圖片插入到Excel工作表中時,Excel自動爲其指定名稱「圖片1」,「圖片2」等。如何在Excel中獲取Shape的內部名稱

該名稱可用於在Shapes集合(如Shapes.Item(「圖片1」))中獲取對此形狀對象的引用。如果使用名稱框在Excel中更改名稱,則有兩個不同的名稱(或其中一個是鍵/標題),通過該名稱可以引用Shape對象。所以,如果我將名稱更改爲「MyPic」我可以使用任意這些Shapes集合引用形狀:

Shapes.Item("Picture 1") 
OR 
Shapes.Item("MyPic") 

名稱可以使用Shape.Name屬性來訪問在VBA,但我們如何可以訪問其他價值(MyPic),似乎沒有改變內部?

修訂
我所試圖做的是一個單元格鏈接到Excel中的一個畫面。我將圖片數據保存在單元格的評論中。這些是場景:

  1. 如果我保留圖片名稱(外部名稱),則在同一工作表上覆制粘貼結構將複製名稱,並且單元格將指向相同的結構。
  2. 如果我保留內部名稱,則複製粘貼到其他工作表將會產生問題,因爲同一內部名稱可能存在於同一工作簿中的某個其他工作表上。
  3. 如果我拿ID,我將無法從它那裏得到

圖片參考對我來說獲得的內部名稱是很重要的。我有形狀參考,但不知道如何從這個參考獲得內部名稱。

回答

7

在將形狀添加到工作表(oSht)後,立即可以使用oSht.Shapes(Osht.Shapes.count)來引用它。 因此,oSht.Shapes(osht.shapes.count).Name會給你它的名字。

如果你想在Shapes集合中找到一個形狀的索引並知道它的名字,那麼你需要遍歷Shapes.Name,直到找到它。如果您知道索引,則可以構造「圖片n」替代名稱,或者可以存儲「圖片n」替代名稱。您還可以存儲形狀的ID屬性,然後通過循環遍歷Shapes集合來引用形狀,直到找到Shape.ID

如果用戶將形狀移動到其他工作表並重命名它,則無法將其標識爲原始形狀,因爲外部名稱,備用名稱,形狀索引和ID都將不同。所以,如果這是您場景中的問題,則需要考慮陰影複製或表單保護。

+0

+1:「如果你知道索引,那麼你可以構造」圖片n「替代名稱」 - 這可能並不總是如此,因爲如果索引2處的圖片從Shapes集合中刪除,我們可能會有「圖片3「在索引2處。我不認爲內部名稱會改變以匹配索引。 – A9S6 2010-09-20 00:31:54

+0

如果我在VBA中添加一個Shape,Shapes.AddPicture(...)的返回值會給我參考,所以不需要在這裏做一個Shapes(Count)。另外,對於新創建的對象,內部名稱和顯示名稱都是相同的,所以shape.Name將在那時起作用。問題是如何在稍後使用Shape引用獲取內部名稱(用戶可能已經更改了顯示名稱) – A9S6 2010-09-20 01:02:22

+0

如果您具有對形狀對象的有效引用,則Shape.name將爲您提供其外部名稱。 – 2010-09-20 07:26:38

相關問題