Каждый лист в моей книге Excel содержит одно основное текстовое поле. К сожалению, каждый раз они называются по-разному (текстовое поле 1, текстовое поле 17 и т.д.).

У меня есть код, который находит текстовое поле 1 и перемещает его. Тем не менее, есть ли способ в VBA сказать "найти текстовое поле на активном листе и текстовое поле имени 1". Или есть какой-то способ просто сказать «найти текстовое поле и выполнить действие?»"

Я не могу найти правильный способ использования объекта / метода Shapes.

Dim ws As Worksheet
Dim txBox As Shape

For Each ws In Worksheets
ws.Activate
    Set txBox = ws.Shapes("Text Box 1")
    txBox.IncrementLeft 200
Next ws

2 ответа2

1

Этот код переместит все текстовые поля в книге вправо.

Sub blah()
Dim ws As Worksheet
Dim txBox As Shape

For Each ws In Worksheets
    For Each txBox In ws.Shapes
        If txBox.Type = msoTextBox Then txBox.IncrementLeft 200
    Next txBox
Next ws
End Sub

Он перебирает коллекцию Shapes на каждом листе. Затем он проверяет, является ли фигура текстовым полем, а затем перемещает его, если это так. Нет необходимости переименовывать текстовые поля, если вы делаете это таким образом.

0
Sub SetTextBoxNames()
    Dim shp As Shape
    Dim ws As Worksheet

    For Each ws In Worksheets

        If ws.Shapes.Count <> 0 Then
            If ws.Shapes(1).Type = msoTextBox Then   'or = 17
                ws.Shapes(1).Name = "TextBox1"
                ws.Shapes(1).IncrementLeft 200
            End If
        End If
    Next ws
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .