无法从公式调用的函数中隐藏行Excel 2003

我有这个非常简单的function

Public Function HRows(xx As String) BeginRow = 2 EndRow = 10 ' HideRows For RowCnt = BeginRow To EndRow Cells(RowCnt,ChkCol).EntireRow.Hidden = True Next RowCnt End Function 

当从一个命令button调用时,它工作正常,当作为公式调用,例如= HRows(A1),从工作表单元格它不会做任何事情在Excel 2003上,它可以在Open Office Calc 4.1

这发生在一个空白的电子表格上 – 没有保护,没有评论,没有形状(在其他问题中被认为是抑制剂)

最后,我想隐藏/显示电子表格的相关部分,具体取决于用户在某些关键单元格中input的内容 – 我不想添加命令button来控制隐藏。

我已经在这里介绍了这个方法https://stackoverflow.com/a/23232311/2165759 ,为了你的目的,代码如下:

将代码放置到VBAProject的一个模块中:

 Public Tasks, PermitNewTasks, ReturnValue Function HideRowsUDF(lBegRow, lEndRow) ' Use this UDF on the sheet If IsEmpty(Tasks) Then TasksInit If PermitNewTasks Then Tasks.Add Application.Caller, Array(lBegRow, lEndRow) HideRowsUDF = ReturnValue End Function Function HideRows(lFrom, lUpTo) ' actually all actions performed within this function, it runs without UDF limitations Range(Rows(lFrom), Rows(lUpTo)).EntireRow.Hidden = True HideRows = "Rows " & lFrom & "-" & lUpTo & " were hidden" End Function Sub TasksInit() Set Tasks = CreateObject("Scripting.Dictionary") ReturnValue = "" PermitNewTasks = True End Sub 

将代码放在VBAProject中Microsoft Excel对象的ThisWorkbook部分:

 Private Sub Workbook_SheetCalculate(ByVal Sh As Object) Dim Task, TempFormula If IsEmpty(Tasks) Then TasksInit Application.EnableEvents = False PermitNewTasks = False For Each Task In Tasks TempFormula = Task.FormulaR1C1 ReturnValue = HideRows(Tasks(Task)(0), Tasks(Task)(1)) Task.FormulaR1C1 = TempFormula Tasks.Remove Task Next Application.EnableEvents = True ReturnValue = "" PermitNewTasks = True End Sub