1

Этот код должен найти обычное / основное текстовое поле на листе и затем переместить его влево. Затем перейдите на следующий лист и сделайте то же самое. Делай до последнего листа.

Он работает (когда я перебираю его, используя F8), но затем на следующем листе говорится, что объект не поддерживает это свойство метода.

Я понятия не имею, почему это происходит.

Dim I As Integer
Dim txBox As Shape
Set txBox = ActiveSheet.Shapes("Text Box 1")


For I = 1 To Worksheets().Count
    Worksheets(I).Activate
    txBox.Select
    **Selection.ShapeRange.IncrementLeft 586.5**

Next I

End Sub

1 ответ1

3

Предполагая, что текстовое поле называется "Текстовое поле 1" на каждом листе, вам просто нужно переместить Set txBox = внутри цикла For . В противном случае txBox ссылается только на текстовое поле на листе, которое было активным при запуске макроса. Так как txBox больше не находится на активном листе, Selection не ссылается на txBox , но, скорее, на ячейку, а не на текстовое поле, следовательно, ошибка "Объект не поддерживает это свойство или метод". Надеемся, что приведенный ниже код поможет вам или, по крайней мере, заставит вас двигаться в правильном направлении.

Dim I As Integer
Dim txBox As Shape

For I = 1 To Worksheets().Count
    Worksheets(I).Activate
    Set txBox = ActiveSheet.Shapes("Text Box 1")
    txBox.Select
    Selection.ShapeRange.IncrementLeft 586.5
Next I

Редактировать:
Кроме того, вы можете улучшить производительность вашего макроса, избегая всего .Select , Selection звонков.

Dim ws as Worksheet
Dim txBox As Shape

For Each ws in Worksheets
    Set txBox = ws.Shapes("Text Box 1")
    txBox.IncrementLeft 586.5
Next ws

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