我做了一些事情一下子,我相信可能会引起问题。我已经在Office 2013和Office 2016的Windows 10下测试该VBA。
我有工作表的群众,其中的每一个基于月份和年份名为(比如:“2018年11月”,“2018十二月”等)。我用VBA做两(独立的)事情:
VBA代码:
Public Function RelSheet(iPos As Integer, zRange As String)
'Relative Worksheet Reference Facility
'eg: =RelSheet(-1,"A3") = Cell A3 in Previous (Left) WSheet
'eg: =RelSheet(1,"A3") = Cell A3 in Next (Right) WSheet
'eg: "#Error" when reference does not exist
'eg: Can do maths =RelSheet(1,"A3")*2
Dim shtActive As Worksheet
Application.Volatile True
Set shtActive = Application.Caller.Worksheet
On Error GoTo BadSheetReference
RelSheet = Sheets(shtActive.Index + iPos).Range(zRange).Value
GoTo ExitFunction
BadSheetReference:
RelSheet = "#Error"
ExitFunction:
End Function
Function TabName()
TabName = ActiveSheet.Name
End Function
在我的工作表,我清点求和一个月一个月,直到近一年的创建,然后理货在0重新开始(或任何值Jannuary包含)。小区C8是当月的价值,小区C9是前一个月的值(前一工作表的C9)+在C8当前工作表单元格的值的总和。该小区(C9)的公式如下:==IF(ISNUMBER(SEARCH("January", TabName())), C8, RelSheet(-1, "C9")+C8)
不幸的是,一旦工作表的名称确实包含“一月”的文本,所有以前的工作表也恢复到0的总和我认为这是关系到RelSheet功能和基本递归检查本身,但是当我通过代码逻辑在纸面上,我看不出它是如何做这个。我现在的解决方法是只为了一月份工作表中的特定单元格的值手动设置为0,并继续连续的电子表格公式。
的建议夫妇:
Public Function RelSheet(iPos As Integer, zRange As String)
'Relative Worksheet Reference Facility
'eg: =RelSheet(-1,"A3") = Cell A3 in Previous (Left) WSheet
'eg: =RelSheet(1,"A3") = Cell A3 in Next (Right) WSheet
'eg: "#Error" when reference does not exist
'eg: Can do maths =RelSheet(1,"A3")*2
Dim shtActive As Worksheet
Application.Volatile True
Set shtActive = Application.Caller.Worksheet
On Error GoTo BadSheetReference
'##added workbook qualifier
RelSheet = ThisWorkbook.Sheets(shtActive.Index + iPos).Range(zRange).Value
GoTo ExitFunction
BadSheetReference:
RelSheet = CVErr(xlErrRef)
ExitFunction:
End Function
Function TabName()
'## not ActiveSheet
TabName = Application.Caller.Parent.Name
End Function