Don在工作簿中有多个图表。每个图表都包含两个文本框,其中包含当前数据的日期和图表的更新日期。 Don想要使用宏更改这些图表文本框中的所有文本,但是不知道执行该任务的适当技术。

当然,这可以使用宏来完成,但是您应该理解,没有宏也可以做到这一点。您可以根据需要将文本框中显示的内容与单元格的内容绑定在一起。这意味着您可以使每个文本框都是“动态的”,从而只需更改关联单元格中的内容即可。该单元格可以包含文本值,数字值,日期或公式,这并不重要。

实现此技术的方法如下:一次单击要与单元格关联的文本框。熟悉的句柄应出现在文本框的外部。然后,在“公式”栏中,输入单元格引用。您可以这样输入:

=$C$15

这会将文本框的内容绑定到单元格C15中的内容。如果愿意,还可以删除“公式”栏中的所有内容,并在“公式”栏处于活动状态的情况下,单击要链接的单元格。单元格的地址应出现在“公式”栏中。按Enter键,任务完成。

现在,在关联的单元格中键入内容。您键入的任何内容均应立即出现在文本框中。

在提供一些潜在的与宏相关的答案之前,您需要了解一些有关Excel对象模型的背景,可以通过VBA访问该背景。

工作簿中可以包含两种图表类型:图表表和嵌入式图表。图表工作表由Chart对象表示,并且属于Charts集合。另一方面,嵌入式图表由属于ChartObjects集合的Chart对象表示,而ChartObjects集合又属于工作表对象。

如果将文本框放在实际的图表表上,则可以通过以下方式访问它:

Sub FindTextBoxes1()

Dim c As Chart     Dim s As Shape     Dim sMsg As String     Dim sName As String

For Each c In ActiveWorkbook.Charts         For Each s In c.Shapes             If s.Type = msoTextBox Then                 sMsg = s.TextFrame2.TextRange.Text                 sName = s.Name                 MsgBox "Text: " & sMsg, vbOKOnly, sName             End If         Next s     Next c End Sub

该宏逐步遍历每个图表表,然后遍历每个图表表上的每个文本框。每个文本框中的内容将显示在消息框中。如果要更改消息框中包含的内容,只需设置TextRange对象的Text属性即可。

嵌入式图表上的文本框是一个不同的故事。为什么?因为文本框可能不是真正在图表中的一部分,而是在工作表中的一部分。换句话说,文本框的“父”可以是嵌入式图表,也可以是工作表。

确定文本框是否为嵌入式图表的一部分的一种好方法是创建一个与刚才显示的宏类似的宏。但是,这一步可以逐步浏览每个工作表中的每个嵌入式图表,并在该图表中找到每个形状(文本框)。

Sub FindTextBoxes2()

Dim w As Worksheet     Dim c As ChartObject     Dim s As Shape     Dim sMsg As String     Dim sName As String

For Each w In ActiveWorkbook.Worksheets         For Each c In w.ChartObjects             For Each s In c.Chart.Shapes                 If s.Type = msoTextBox Then                     sMsg = "This text box is a child of the "

sMsg = sMsg & "embedded chart" & vbCrLf                     sMsg = sMsg & "Text: " & s.TextFrame2.TextRange.Text                     sName = s.Name                     MsgBox sMsg, vbOKOnly, sName                 End If             Next s         Next c         For Each s In w.Shapes             If s.Type = msoTextBox Then                 sMsg = "This text box is a child of the "

sMsg = sMsg & "worksheet" & vbCrLf                 sMsg = sMsg & "Text: " & s.TextFrame2.TextRange.Text                 sName = s.Name                 MsgBox sMsg, vbOKOnly, sName             End If         Next s     Next w End Sub

运行宏时,您将看到每个文本框的消息框,它实际上是嵌入式图表的子级。然后,您将看到一个消息框,该消息框是作为工作表的子级的所有文本框的。与上一个宏一样,此宏在显示有关Shape对象的任何信息之前会进行检查以确保Shape对象确实是一个文本框。当逐步浏览工作表中的每个形状时,这尤其重要,因为工作表上的所有嵌入图表也被视为Shapes集合的一部分。

如前所述,要更改文本框中包含的文本,您需要做的就是更改TextRange对象的Text属性。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13377)适用于Microsoft Excel 2007、2010和2013。