Настройка макроса для копирования диапазона из одного листа в другой в той же книге - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть рабочая книга с несколькими листами, и я пытаюсь настроить макрос на листе 2, который очистит содержимое листа 2, а затем скопирует из листа 6 диапазон данных (столбцы A: Q) из строки 2 до последней строка данных в соответствующие столбцы листа 2 из строки 2. Я нашел некоторый код, который может выполнять копирование, но я подозреваю, что он будет работать, только если исходный лист (лист 6) является активным листом, и мне нужно, чтобы он был частью макрос для запуска на sheet2, так как есть другие вещи, которые будут добавлены позже в макрос. Код, который я использовал на листе 2, выглядит следующим образом:

Sub AImportData()


    Rows("2:2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-3

    Dim ws As Worksheet
    Set ws = Sheets("Sheet2")

    With Sheets("Sheet6")
        .Range("A:Q").Copy Destination:=ws.Range("A2")
    End With



End Sub

Это очищает данные в листе 2, но когда доходит до точки, где необходимо скопировать данные из листа 6, я получаю индекс вне ошибки ошибки. Я попытался использовать ActiveWorksheet в своем коде, но затем я получил объект требуется ошибка. Мне нужно некоторое руководство по этому вопросу, пожалуйста?

Здесь, вы можете увидеть имена листов, как показано в Project Explorer:

enter image description here

1 Ответ

1 голос
/ 03 апреля 2020

Существует разница между именем листа и именем объекта листа. Например, вы можете видеть в этой цене, что у меня есть лист с именем «Лист2», а его объект называется «Лист5»

enter image description here

Для ссылки на на этом листе необходимо выполнить одно из следующих действий:

1: использовать имя листа: Sheets("Sheet2")

2: использовать имя объекта листа: Sheet5

3: Используйте номер листа (положение): Sheets(2)

(Положение листа изменится, когда вы удалите листы до этого листа. [Например, когда вы удаляете первый лист, лист, который был второй, теперь будет первым]. Поэтому будьте осторожны при использовании этого метода.)

Итак, в вашей ситуации вам нужно убедиться, что у вас есть лист с именем «Лист6», или правильно назвать его.

Другая проблема, с которой вы столкнулись, заключается в том, что вы пытаетесь скопировать набор целых столбцов (A: Q) в позицию, которая не является целыми столбцами, а является частью столбца, начиная со строки № 2 (A2 ).

Итак, вы должны сделать что-то вроде этого:

Sub AImportData()
    Rows("2:2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-3 'Do you really need this?
    With Sheet6
        maxRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
        .Range("A2:Q" & maxRow).Copy Range("A2")
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...