Перемещение объектов на рабочем листе - PullRequest
0 голосов
/ 09 марта 2020

Я хотел бы использовать l oop для быстрого перемещения моих объектов в разных частях листа.

enter image description here

Каждый моего текстового поля имеют свое собственное имя (ID), которое использовалось в l oop.

Код выглядит следующим образом:

 Dim i As Long, shp, ws As Worksheet

         Set ws = ActiveSheet

         For i = 1 To 4

          Set shp = ws.Shapes("Textbox_Chamber" & i)

          With ws.Range("C6").Offset(i - 10, 0)
            shp.Top = .Top
            shp.Left = .Left
         End With

       Next i

   End Sub

Запрос ниже заявляет:

Ошибка выполнения VBA 1004 «Ошибка приложения или объекта» при выборе диапазона

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

Если честно, я не знаю, что я здесь сделал неправильно. Я хочу, чтобы это l oop работало.

РЕДАКТИРОВАТЬ:

После рекомендации в комментарии мой код выглядит следующим образом:

  Dim i As Long, shp, ws As Worksheet

         Set ws = ActiveSheet

         For i = 1 To 4

          Set shp = ws.Shapes("Textbox_Chamber" & i)

          With ws.Range("C6").Offset(i + 10, 0)
            shp.Top = .Top
            shp.Left = .Left
         End With

       Next i

    End Sub

Но это все равно не решает мою проблему, поскольку все объекты копируются в одну целевую ячейку вместо 4.

Я хочу, чтобы они располагались через каждые 10 ячеек в строке, как показано на рисунке ниже. Как я могу расширить свой l oop тогда?

enter image description here

1 Ответ

0 голосов
/ 09 марта 2020

Правильный l oop должен выглядеть следующим образом:

  Dim i As Long, Shp, Ws As Worksheet

      Set Ws = ActiveSheet

      For i = 1 To 4

        Set Shp = Ws.Shapes("Textbox_Chamber" & i)

        With Ws.Range("C6").Offset((i * 10) - 10, 0)
            Shp.Top = .Top
            Shp.Left = .Left
        End With

     Next i

Где, как сказано в комментарии @SJR, мы должны написать i * 10 вместо i + 10. Оператор i + 10 разместит все наши фигуры на одном целевом листе, который нам не нужен. Оператор i * 10 разместит наши фигуры правильно (каждая фигура каждые 10 ячеек вниз), но они появятся на 10 ячеек перед нашей первоначальной целевой ячейкой. Утверждение (i * 10) -10 является окончательным решением этой проблемы, нацеленным на наш первый shjape именно там, где мы хотим, и на следующие каждые 10 ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...