我正在尝试调用放置在工作表中的标签,但是我想通过提供名称字符串来动态调用它。
我尝试了很多建议,这给了我最大的希望:
Can I reference an object using a string?
我过去已经成功实现了预期的效果,但是那些应用程序都是基于用户形式的。这个没有用户窗体,因此显然我不能使用Userform.Controls?
建议改用Shape,但是每当我要更改形状的标题时,它都说它不具有该属性。我曾尝试过以怪异的方式“组合”标签和形状,但是当然我总是会出现不匹配的情况。
我将使用链接答案中的示例
Dim shpLabel As Shape
Set shpLabel = Sheet1.Shapes("labelnum" & i)
shpLabel.Caption = "some string"
显然这对某些人有用(也许是旧版本?),但对我来说,它总是会返回该属性丢失的信息。
我希望我不必做这样的事情: Using string as object name
我要这样做的主要原因是速度和尺寸。该文件已经非常慢,我担心像这样的递归代码只会使它变得更糟。
答案 0 :(得分:2)
它有点埋头,这完全取决于标签的类型:
如果是表单控件标签:
Sheet1.Shapes("LabelName").Textframe.Characters.Text = "Some string"
如果是Activex控件标签:
Sheet1.OLEObjects("LabelName").Object.Caption = "Some string"
答案 1 :(得分:1)
为Michael的出色回答增色不少:
下面的Function
使您可以轻松地重命名标签的标题,无论它是ActiveX还是Form控件对象。
Function changename(shapename As String, newname As String, workbookname As String, sheetname As String)
With Workbooks(workbookname).Sheets(sheetname)
If .Shapes(shapename).Type = 12 Then
Set shp = .OLEObjects(shapename).Object
shp.Caption = newname
Else
Set shp = .Shapes(shapename)
shp.TextFrame.Characters.Text = newname
End If
End With
End Function
然后您可以按以下方式调用它
Sub ChangeShapeCaption()
changename "Label1", "The caption has changed", "Book1", "Sheet1"
End Sub