直接input或公式

我有一个电子表格,我希望最终用户能够input一个值,否则电子表格将自动填充一个公式。 如果直接input被删除,我也想重新填充公式。 目前下面的代码什么都不做。 任何帮助将不胜感激!

Private Sub Worksheet_Change1(ByVal target As Range) If target.Cells.Count > 1 Then Exit Sub If Not Intersect(target, Range("B8")) Is Nothing Then Range("B8").Formula = "=IF($B$1=""DC"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$I:$I,'Wage Run'!$D$1),0),IF($B$1=""Division"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$M:$M,'Wage Run'!$D$1),0)" _ & ",IF($B$1=""GBU"",IF(MAX('TY Data'!$L:$L)&>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$N:$N,'Wage Run'!$D$1),0),IF($B$1=""Rollup"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$O:$O,'Wage Run'!$D$1),0),""""))))" End If End Sub 

编辑:

新的公式看起来像这样,我把它添加到旧的子

 Private Sub Worksheet_Change(ByVal target As Range) If target.Cells.Count > 1 Then Exit Sub If Not Intersect(target, Range("B1")) Is Nothing Then Range("C1").ClearContents End If If target.Cells.Count > 1 Then Exit Sub If Not Intersect(target, Range("B8")) Is Nothing And target.Value = "" Then Range("B8").Formula = "=IF($B$1=""DC"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$I:$I,'Wage Run'!$D$1),0),IF($B$1=""Division"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$M:$M,'Wage Run'!$D$1),0)" _ & ",IF($B$1=""GBU"",IF(MAX('TY Data'!$L:$L)&>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$N:$N,'Wage Run'!$D$1),0),IF($B$1=""Rollup"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$O:$O,'Wage Run'!$D$1),0),""""))))" End If End Sub 

您不禁用事件触发器。 将公式写入B8时,Worksheet_Change将在其上运行。 如果公式恰好返回""那么它将继续运行,直到你崩溃。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub On Error GoTo Safe_Exit Application.EnableEvents = False Select Case Target.Address(0, 0) Case "B1" Target.Offset(0, 1).ClearContents Case "B8" If Not Target.HasFormula Then _ Target.Formula = "=IFERROR(IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), " & _ "SUMIFS('TY Data'!$K:$K, " & _ "'TY Data'!$A:$A, 5101200, " & _ "'TY Data'!$L:$L, VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), " & _ "'TY Data'!$D:$D, ""AP0345R""," & _ "INDEX('TY Data'!$I:$O, 0, LOOKUP($B$1, {""DC"",""Division"",""GBU"",""Rollup""}, {1,5,6,7})), 'Wage Run'!$D$1), 0), """")" Case Else 'do nothing End Select Safe_Exit: Application.EnableEvents = True End Sub 

在一个相关的话题上,这是我对你的公式的修改。 在B8中,

 =IFERROR(IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), SUMIFS('TY Data'!$K:$K, 'TY Data'!$A:$A, 5101200, 'TY Data'!$L:$L, VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), 'TY Data'!$D:$D, "AP0345R", INDEX('TY Data'!$I:$O, 0, LOOKUP($B$1, {"DC","Division","GBU","Rollup"}, {1,5,6,7})), 'Wage Run'!$D$1), 0), "") 

最后一行是OR(B1={"DC","Division","GBU","Rollup"})