VBA для цикла, пока столбец не пуст - PullRequest
3 голосов
/ 19 июля 2011

Я новичок в VBA, и я пытаюсь сделать это из цикла, но я думаю, что мой счетчик "To" неверен.Я хочу, чтобы он выполнял указанные действия до тех пор, пока не останется больше столбцов для вырезания.

Что происходит, у меня есть горизонтальный набор данных (столбец "T" - "EV"), который я обрезаюи вставка в вертикальном порядке в столбце S. Это работает, но я все еще получаю эту ошибку:

Я получаю:

Ошибка времени выполнения '1004':

Этот выборне является действительным.Существует несколько возможных причин:

  • Копирование и вставка областей не могут перекрываться, если они не имеют одинаковый размер и форму.
  • Если вы используете команду «Создать из выделения», строка илистолбец, содержащий предложенные имена, не будет включен в (обрезается здесь)

Код:

Dim x As Integer

For x = 0 To ActiveCell.CurrentRegion.Columns.Count
    ActiveCell.Select
    ActiveCell.Offset(0, x).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Cut
    Range("S3000").Select
    ActiveCell.End(xlUp).Select
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    Range("T11").Select

Next x

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Вы можете просто использовать встроенную функцию листа TRANSPOSE для достижения этой цели - см. здесь

Если вы хотите добиться этого с помощью VBA, то, как указал Тиаго Кардосо, используя вырези паста, как правило, не лучшее решение.Попробуйте использовать метод Cells объекта Worksheet и отслеживать, с каким столбцом и с какой строкой вы работаете.

1 голос
/ 19 июля 2011

Не проверено, написано прямо здесь, но должно работать ...

dim c as range
for each c in range("t1").currentregion
    range("s3000").end(xlup).offset(1,0)= c.value
    c.clear
next c

Нет смысла менять активную ячейку. Это просто замедляет ваш код.

...