2015-05-30 3 views

ответ

2

Текстовые поля ActiveX можно передавать по их существующему имени или в качестве порядкового номера в Shapes collection.

Если вы знаете, что текстовое поле в настоящее время названы TextBox1 и вы хотите назвать это TextBox99 затем обратиться к нему напрямую.

With ActiveSheet '<-reference the worksheet properly! 
    .Shapes("TextBox1").Name = "TextBox99" 
End With 

Если вы хотите переименовать все текстовые поля в листе, то проведите все формы.

Dim t As Long, s As Long 
With ActiveSheet '<-reference the worksheet properly! 
    For s = 1 To .Shapes.Count 
     If CBool(InStr(1, .Shapes(s).Name, "textbox", vbTextCompare)) Then 
      t = t + 1 
      .Shapes(s).Name = "MyTextBox" & Format(t, "00") 
     End If 
    Next s 
End With 

Обратите внимание, что индекс в коллекции .Shapes является один на основе, не нуля. В зависимости от того, что вы пытаетесь выполнить, контроль ошибок, чтобы убедиться, что вы не пытаетесь переименовать текстовое поле как нечто уже существующее, было бы разумным.

1

Ответ Jeeped отлично подойдет для Excel, но, к сожалению, не для Word (который мне также нужен). Таким образом, это также относится к Word:

Dim shp As InlineShape 
On Error Resume Next 
    For Each shp In ActiveDocument.InlineShapes 
     If Not shp.OLEFormat Is Nothing And _ 
      shp.OLEFormat.Object.Name = "TextBox1" Then 
     shp.OLEFormat.Object.Name = "TextBox99" 
     End If 
    Next 
On Error GoTo -1