gpt4 book ai didi

excel - 自定义 Excel VBA 重置值的奇怪问题

转载 作者:行者123 更新时间:2023-12-04 22:29:24 27 4
gpt4 key购买 nike

我正在同时做一些我认为可能会导致问题的事情。我已经在 Windows 10 下的 Office 2013 和 Office 2016 中测试了这个 VBA。

我有许多工作表,每个工作表的标题都基于月份和年份(例如:“2018 年 11 月”、“2018 年 12 月”等)。我正在使用 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 函数有关,并且本质上是递归检查自身,但是当我按逻辑单步执行代码时在纸上,我不明白它是如何做到的。我目前的解决方法是手动将 1 月工作表中特定单元格的值设置为 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

    关于excel - 自定义 Excel VBA 重置值的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523679/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com