尝试将单元格值设置为forumla时发生VBA运行时错误
当列标题与某个值匹配时,我试图将单元格值设置为公式。我得到了一个1004错误,我相信这是因为我的变量被设置为一个范围,我将它设置为一个字符串值 如何更正行单元格。公式=公式_1以允许插入公式尝试将单元格值设置为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
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