与定义Excel VBA复位值奇数问题

问题描述 投票:1回答:1

我做了一些事情一下子,我相信可能会引起问题。我已经在Office 2013和Office 2016的Windows 10下测试该VBA。

我有工作表的群众,其中的每一个基于月份和年份名为(比如:“2018年11月”,“2018十二月”等)。我用VBA做两(独立的)事情:

  1. 获取活动工作表的名称
  2. 遍历以前的工作表的数据

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,并继续连续的电子表格公式。

excel vba
1个回答
2
投票

的建议夫妇:

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
© www.soinside.com 2019 - 2024. All rights reserved.