2014-06-19 27 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