Как сохранить местоположение ячейки или адрес в качестве переменной для использования на другом листе - PullRequest
0 голосов
/ 02 ноября 2018

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

Sub Test()  
Sheets("Buy Sell Alloc").Activate

    Dim X As Range
    Set X = Range("C" & Rows.Count).End(xlUp)

    Sheets("Invest #1- Intermediate").Activate
    Rows("2:2").Select
    Selection.Copy
    X.Select
    Range(Selection, "C2").PasteSpecial

End Sub

Это мой код, и он работает, если я не переключаю листы, но выдает ошибку при переходе на другой лист. Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Я предпочитаю использовать вспомогательную функцию, чтобы я мог без проблем повторять вызов из любого места в моем коде. Я передаю ему переменную листа (то есть, на каком листе найти последнюю строку) и переменную столбца (то есть в каком столбце данного листа найти последнюю заполненную строку). Вы можете продолжить разработку, чтобы передать дополнительный параметр того, какой метод последней строки использовать, а затем добавить код для этих методов внутри функции. Функция возвращает значение Long для последней строки.

Public Function GetLastRow(ByVal ws As Worksheet, Optional ByVal columnNumber As Long = 1) As Long
    With ws
        GetLastRow = .Cells(.Rows.Count, columnNumber).End(xlUp).Row
    End With
End Function
0 голосов
/ 02 ноября 2018

Вам не нужно активировать листы, чтобы сделать это, вы можете скопировать напрямую:

Dim X As Range
Set X = sheets("Buy Sell Alloc").range("C" & sheets("Buy Sell Alloc").Rows.Count).End(xlUp)

Sheets("Invest #1- Intermediate").Rows("2:2").Copy
X.PasteSpecial

Проблема в исходном коде состоит в том, что выбор X не активирует лист, на котором он находится, и потому что команда pastespecial не включает ссылку на лист, она вставляет его на активный лист.

...