Формула в таблицу Excel с использованием VBA

#excel #vba #excel-formula

#excel #vba #excel-формула

Вопрос:

Я хочу вставить следующую формулу в третий столбец моей таблицы Excel «Транзакции». Если я введу ее вручную, она сработает, но если я попытаюсь ввести ее с помощью подпрограммы, я получу ошибку 1004. Не уверен, как это решить. Вот фрагмент кода:

     Sub test3()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim lCol As ListColumn

    Set ws = ThisWorkbook.Worksheets("Transactions")
    Set lo = ws.ListObjects(1)
    Set lColName = lo.ListColumns(3)

    lColName.DataBodyRange.Formula = "=IFERROR(INDEX(Staff[CREDENTIALS],MATCH([@[Staff, Last Name]],LastName,0)),"")"
    End Sub
  

Все, что мне действительно нужно сделать, это поместить формулу в первую строку таблицы (строка 2) в третьем столбце «Персонал, учетные данные». Он извлекается из другой таблицы Excel «Staff».

Комментарии:

1. Как вы правильно сказали, все, что вам нужно сделать, это поместить вашу формулу в первую ячейку. Тогда почему вы пытаетесь поместить ее во весь диапазон столбцов? Попробуйте lColName.DataBodyRange.Cells(1).Formula = [whatever]

Ответ №1:

Я полагаю, что проблема связана с вашей формулой (я знаю, что вы упомянули, что она работает, когда вы вводите ее вручную, однако, когда я пытаюсь, я получаю сообщение об ошибке), попробуйте изменить [@[Staff, Last Name]] на Staff[Last Name]

Кроме того, вам нужно экранировать "" в IFERROR формуле, приведенный ниже код должен работать:

 Sub test3()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim lCol As ListColumn

    Set ws = ThisWorkbook.Worksheets("Transactions")
    Set lo = ws.ListObjects(1)
    Set lColName = lo.ListColumns(3)

    lColName.DataBodyRange.Formula = "=IFERROR(INDEX(Staff[CREDENTIALS],MATCH(Staff[Last Name],LastName,0)),"""")"
End Sub
  

Комментарии:

1. Рад помочь и добро пожаловать в Stack Overflow. Если этот или любой другой ответ решил вашу проблему, пожалуйста, отметьте его как «принятый», щелкнув зеленую галочку.