Как я могу исправить VBA Copy и Past Formula Error - PullRequest
0 голосов
/ 16 апреля 2020

enter image description here

Я пытаюсь вставить приведенную ниже формулу в оставшуюся часть столбца, используя следующий код VBA. Это изменит гнездо, но тогда я получу "#NAME?" ошибка в остальных клетках. Помогите, что я делаю не так?

Private Sub CommandButton2_Click()

Dim LstRow As Long

With Sheets("sheet1")

Lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

.Range("F6:F" & Lastrow).Formula = "=IF(F5=F4,”P=”&ROW(F7)/2,F5)"
.Range("F6:F" & Lastrow).Copy
.Range("F6:F" & Lastrow).PasteSpecial xlValues
Application.CutCopyMode = False

End With

End Sub

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020

Использовать R1C1 Обозначения. Гораздо быстрее, проще в реализации. В R1C1 все относительно ячейки, в которой написана формула.

Private Sub CommandButton2_Click()

Dim LstRow As Long

With Sheets("sheet1")

    Lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

    With .Range("F6:F" & Lastrow)
        .FormulaR1C1 = "=IF(R[-1]C=R[-2]C,""P=""&R[1]/2,R[-1]C)"
        .Value = .Value
    End With

    Application.CutCopyMode = False

End With

End Sub
1 голос
/ 16 апреля 2020

заменить:

"=IF(F5=F4,”P=”&ROW(F7)/2,F5)"

на:

"=IF(F5=F4,""P="" & ROW(F7)/2,F5)"

Примечание. Использование двойных кавычек "неправильного вкуса".

0 голосов
/ 16 апреля 2020

Скотт Кранер дал решение в своем комментарии

вот возможная оптимизация кода

Private Sub CommandButton2_Click()

    With Sheets("sheet1")
        With .Range("F6:F" & .Cells(.Rows.Count, 1).End(xlUp).row)
            .Formula = "=IF(F5=F4,""P=""&ROW(F7)/2,F5)"
            .Value = .Value
        End With
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...