Цикл VBA For до тех пор, пока столбец не будет пустым

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

Что происходит, так это то, что у меня есть горизонтальный набор данных (столбец от «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

person Leon    schedule 19.07.2011    source источник


Ответы (2)


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

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

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

person Patrick Honorez    schedule 19.07.2011
comment
Пробовал, но получаю ошибку времени выполнения "438": объект не поддерживает это свойство или метод. Он выделяет строку range(s3000).end(xlup).offset(1,0).paste при отладке - person Leon; 19.07.2011
comment
В коде @iDevlop есть запятая, где (я думаю) должна быть точка. - person Tiago Cardoso; 19.07.2011
comment
Я заменил запятую на точку. Я поймал ошибку. Спасибо хоть - person Leon; 19.07.2011
comment
Только что проверил здесь, и для объекта диапазона нет метода «вставить», но есть «PasteSpecial». Я внесу изменения в код @iDevlop так, как (я думаю), это может сработать... Редактировать: готово, ожидается одобрение iDevlop. Тем не менее, использовать вырезание и вставку не рекомендуется, так как буфер обмена используется совместно с другими приложениями... - person Tiago Cardoso; 20.07.2011
comment
Ошибка выполнения: "1004": сбой метода PasteSpecial класса Range. - person Leon; 20.07.2011
comment
в порядке. Я отредактировал его другим (более быстрым?) способом, без копирования/вставки. - person Patrick Honorez; 20.07.2011
comment
РЖУ НЕ МОГУ. Это на самом деле пошло вниз и удалило мои строки. Не уверен что происходит. Спасибо всем за вашу помощь. Я думаю, что могу просто оставить это, так как мой код по большей части работал, но мне просто придется иметь дело с кодом ошибки в конце. - person Leon; 21.07.2011
comment
хорошо, Ли, этот код работает, я проверил его. Если просто скопировать/вставить и не пытаться понять, то в этом нет смысла! - person Patrick Honorez; 21.07.2011

Для этого можно просто использовать встроенную функцию рабочего листа TRANSPOSE — см. здесь

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

person barrowc    schedule 20.07.2011