Формы (рабочий лист) против управления (UserForm)

Обновить

April 2019

Просмотры

78 раз

1

Я пытаюсь вызвать рабочий лист помещен ярлык, но я хотел бы динамически называть его, предоставляя строку имени.

Я пробовал много предложений, это один дал мне большую надежду:

Могу ли я ссылаться на объект, используя строку?

Я успешно достичь желаемого эффекта в прошлом, но эти приложения были UserForm основе. Это одна не имеет UserForms так, видимо, я не могу использовать Userform.Controls?

Предлагается использовать Shape вместо этого, однако всякий раз, когда я хочу, чтобы изменить заголовок формы, он говорит, что он не имеет это свойство. Я пытался «объединение» этикетки и формы в странных отношениях, но я, конечно, всегда есть несоответствие.

Я просто буду использовать пример из связанного ответа

Dim shpLabel As Shape

Set shpLabel = Sheet1.Shapes("labelnum" & i)
shpLabel.Caption = "some string"

Видимо, это работает для некоторых людей (возможно, более старые версии?), Но для меня он всегда возвращается, что свойство отсутствует.

Я надеюсь , что я не должен делать что - то вроде этого: Использование строки в качестве имени объекта

Основная причина, почему я хочу сделать это таким образом скорость и размер. Файл уже очень медленно, и я обеспокоен тем, что рекурсивный код как это только собирается сделать это хуже.

2 ответы

2

It's a little buried and it depends on exactly which type of label it is:

If it's a form control label:

Sheet1.Shapes("LabelName").Textframe.Characters.Text = "Some string"

If it's an activex control label:

Sheet1.OLEObjects("LabelName").Object.Caption = "Some string"
1

Adding to Michael's excellent answer:

The following Function enables you to easily rename the caption of a label, whether it is an ActiveX or Form control object.

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

Then you can call it as follows

Sub ChangeShapeCaption()

changename "Label1", "The caption has changed", "Book1", "Sheet1"

End Sub