2014-06-19 28 views
0

如果我選擇一個形狀(如圖表或文本框),如何在VBA中重命名它?我有一個很好的小的子和PowerPoint中的形式,這樣做:如何在Excel中重命名所選形狀

Sub ShapeName() 
If Not ActiveWindow.Selection Is Nothing Then 
    If ActiveWindow.Selection.Type = ppSelectionShapes Then 
     NameForm.NameBox.Text = ActiveWindow.Selection.ShapeRange.Name 
     NameForm.Show 
     If Not NameForm.bCancel Then 
      ActiveWindow.Selection.ShapeRange.Name = NameForm.NameBox.Text 
     End If 
    End If 
End If 
End Sub 

我怎樣才能在Excel中實現相同? ActiveWindow.Selection對象是非常不同的。我無法解決如何從選區導航到選定的形狀。如果選擇的圖形是一個圖表對象,那麼源單元格也會被選中,我想忽略這些圖形並重命名形狀。

+0

如果您在Excel中選擇一個圖表對象(無論如何,2007+),選擇通常是一個查詢rt元素(如圖表區域),而不是實際的圖表對象 - 除非您按Ctrl並單擊它。儘管在名稱框中輸入新名稱會更容易。 – Rory

+0

按Ctrl +點擊似乎沒有做出與正常點擊大不相同的任何操作,並且似乎不可能在名稱框中對其進行重命名,但在嘗試給它起一個新名稱後,它仍稱爲「圖表1」。我真正想做的是在Excel圖表和PowerPoint圖形之間建立關聯,因此我可以編寫一些VBA來遍歷工作簿,並將所有圖表複製到現有圖表的頂部。在Excel中給他們起個名字是非常棘手的部分,因爲我想通過一個按鈕來向用戶公開這個功能,以重命名當前選中的形狀。 – PhilHibbs

+0

點擊圖表,然後運行'msgbox typename(selection)';現在Ctrl +單擊並運行相同的代碼。如果你只對圖表感興趣,你可以在錯誤處理程序中使用一個簡單的'set cht = activechart'。我承認我忘記了你不能重新命名圖表。 – Rory

回答

3

這裏是一個小例子:

Sub ARoseByAnyOtherName() 
    ActiveSheet.Shapes(1).Select 
    Selection.Name = "MyRedRose" 
End Sub 

編輯#1:

如果我們知道選擇對象是然後使用:

Sub ARoseByAnyOtherName() 
    ActiveChart.Parent.Name = "MyRedRose" 
End Sub 
+0

這將選擇一個形狀並重命名它。我想要做的是重命名用戶選擇的當前選定形狀,而不是VBA選擇的形狀。 – PhilHibbs

+0

然後,只需刪除** ActiveSheet.Shapes(1)。選擇** –

+0

如果用戶選擇圖表,則選擇的是圖表,而不是形狀,並且圖表不能重命名。形狀可以。我需要從選定的圖表導航到形狀並對其進行重命名,並且我無法找到從圖表到形狀的對象關係路徑。 – PhilHibbs