Excel VBA: копировать динамический диапазон в последнюю строку на основе значения смещения - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть пара вопросов, с которыми мне нужна помощь.

Когда пользователь выбрал активный месяц (строка 3) с помощью раскрывающегося списка проверки данных, я хочу позволить пользователю нажать кнопку, котораябудет 1) Добавить формулу к расположению 2 строки, в которой был указан «Активный месяц» 2) Скопировать это в последнюю строку в рабочей книге 3) Выбрать эту строку удалить формулы и заменить только значениями.

Первая проблема, которую я получаю, это сообщение 1004.Код работает, если я ввожу базовую формулу, например, = 5 + 10, но не для этой

2-я задача.Где у меня есть Range («Z5: Z» и Lastrow), я не понимаю, как я могу сделать этот выбор, основываясь на значении столбца, где пользователь выбрал «Активный месяц», это могут быть AA, AB, AC и т. Д.

Код ниже, где я получаю ошибку 1004.

Dim Lastrow As Long

Lastrow = Range("D" & Rows.Count).End(xlUp).Row
Cells.Find(What:="Active Month", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

ActiveCell.Offset(2).Select
Range("Z5:Z" & Lastrow).Formula = "=IF(ISNUMBER(VLOOKUP(F5,Dormant!A:A,1,0)),Z4,"")"

1 Ответ

0 голосов
/ 25 февраля 2019

1) Добавить формулу в расположение на 2 строки, где указано «Активный месяц»

2) Скопировать это в последнюю строку в рабочей книге

3)Выберите эту строку, удалите формулы и замените только значениями.

Вы получаете Application Defined Error, потому что вы не добавили двойные кавычки в своей формуле.Замените "" на """" в этой формуле, чтобы оно стало "=IF(ISNUMBER(VLOOKUP(F5,Dormant!A:A,1,0)),Z4,"""")"

Это то, что вы пытаетесь?( UNTESTED ).Я прокомментировал код.Если у вас все еще есть сомнения, просто спросите:)

Sub Sample()
    Dim ws As Worksheet
    Dim Lastrow As Long, StartRow As Long
    Dim aCell As Range
    Dim ColName As String, myformula As String

    '~~> Change formula here
    myformula = "=IF(ISNUMBER(VLOOKUP(F5,Dormant!A:A,1,0)),Z4,"""")"

    '~~> Set this to the relevant worksheet
    Set ws = Sheet1

    With ws
        '~~> Find the "Active Month"
        Set aCell = .Cells.Find(What:="Active Month", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

        '~~> If Found
        If Not aCell Is Nothing Then
            '~~> Get offset to where it was found
            StartRow = aCell.Row + 2

            '~~> Get the column name where it is found
            ColName = Split(.Cells(, aCell.Column).Address, "$")(1)

            '~~> Find last row in that column
            Lastrow = .Range(ColName & .Rows.Count).End(xlUp).Row

            '~~> Identify the range and insert formula and convert it to values
            With .Range(ColName & StartRow & ":" & ColName & Lastrow)
                .Formula = myformula
                .Value = .Value
            End With
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...