尝试将单元格值设置为forumla时发生VBA运行时错误

尝试将单元格值设置为forumla时发生VBA运行时错误,vba,excel,Vba,Excel,当列标题与某个值匹配时,我试图将单元格值设置为公式。我得到了一个1004错误,我相信这是因为我的变量被设置为一个范围,我将它设置为一个字符串值 如何更正行单元格。公式=公式_1以允许插入公式 Public Function WorksheetFormula(ByVal target As Range, ColumnHeader As String, formula_1 As String, columnFormula As String, cell As Range) columnFormul

当列标题与某个值匹配时,我试图将单元格值设置为公式。我得到了一个1004错误,我相信这是因为我的变量被设置为一个范围,我将它设置为一个字符串值

如何更正行单元格。公式=公式_1以允许插入公式

Public Function WorksheetFormula(ByVal target As Range, ColumnHeader As String, formula_1 As String, columnFormula As String, cell As Range)

columnFormula = target.Offset((14 - target.Row), 0).Value

If columnFormula = "% Discount" Then
           formula_1 = "=IFERROR((GETPIVOTDATA(""Max of ""&INDIRECT((ADDRESS(14,COLUMN()))),'Database1 PivotTable'!$A$1," & _
           """KEY"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)&CurrentHFMFamily&(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4))))" & _
           "&CurrentYear,""PRODUCT"",CurrentHFMFamily,""PROGRAM"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)," & _
           """CUSTOMERSEG"",CurrentCustomerSegment,""MONTH"",(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4)))),""YEAR"",CurrentYear)),"")"

        ElseIf columnFormula = "% Take" Then
            formula_1 = "=IFERROR((GETPIVOTDATA(""Max of ""&INDIRECT((ADDRESS(14,COLUMN()))),'Database1 PivotTable'!$A$1," & _
            """KEY"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)&CurrentHFMFamily&(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4))))" & _
            "&CurrentYear,""PRODUCT"",CurrentHFMFamily,""PROGRAM"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)," & _
            """CUSTOMERSEG"",CurrentCustomerSegment,""MONTH"",(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4)))),""YEAR"",CurrentYear)),"")"

        ElseIf columnFormula = "Dollars" Then
            formula_1 = "=PRODUCT((OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(8))),(MOD(COLUMN()+1,4)))),(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,1))," & _
            "(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,2)))"

End If
Debug.Print columnFormula
Debug.Print formula_1
cell.Formula = formula_1
End Function

由于函数名为WorksheetFormula,请尝试将cell.Formula=Formula\u 1替换为WorksheetFormula=Formula\u 1


您打算对整个数据范围执行此操作吗?为什么不把它作为一个子函数,使用For…Next循环遍历所有行并输出正确的公式呢。此外,我建议使用一个选择。。。案例来清理您的代码。
    Public Function WorksheetFormula(ByVal target As Range, ColumnHeader As String, formula_1 As String, columnFormula As String, cell As Range)

    columnFormula = target.Offset((14 - target.Row), 0).Value

        Select Case collumnFormula    
            Case "% Discount"
               formula_1 = "=IFERROR((GETPIVOTDATA(""Max of ""&INDIRECT((ADDRESS(14,COLUMN()))),'Database1 PivotTable'!$A$1," & _
               """KEY"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)&CurrentHFMFamily&(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4))))" & _
               "&CurrentYear,""PRODUCT"",CurrentHFMFamily,""PROGRAM"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)," & _
               """CUSTOMERSEG"",CurrentCustomerSegment,""MONTH"",(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4)))),""YEAR"",CurrentYear)),"")"

            Case "% Take"
                formula_1 = "=IFERROR((GETPIVOTDATA(""Max of ""&INDIRECT((ADDRESS(14,COLUMN()))),'Database1 PivotTable'!$A$1," & _
                """KEY"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)&CurrentHFMFamily&(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4))))" & _
                "&CurrentYear,""PRODUCT"",CurrentHFMFamily,""PROGRAM"",LEFT(INDIRECT(CONCATENATE(""B"",SUM(ROW()-1))),4)," & _
                """CUSTOMERSEG"",CurrentCustomerSegment,""MONTH"",(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(6))),-(MOD(COLUMN()+1,4)))),""YEAR"",CurrentYear)),"")"

            Case "Dollars"
                formula_1 = "=PRODUCT((OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),-(SUM(ROW()-(8))),(MOD(COLUMN()+1,4)))),(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,1))," & _
                "(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,2)))"

            Case Else
                formula_1 = "Error"
    End Select
    Debug.Print columnFormula
    Debug.Print formula_1
    WorksheetFormula = formula_1
    End Function