gpt4 book ai didi

vba - 不同工作表上的 UDF 相互调用返回错误 2015

转载 作者:行者123 更新时间:2023-12-02 22:55:49 25 4
gpt4 key购买 nike

我有两张纸,第一张有 3 个 UDF,第二张有 2 个。

  • 表 1 是一个每月矩阵,每天有 1 列,人们在下面的行中输入他们的工作时间。在 3 个特定行上,有 UDF 合并上面列中的数据,并引用该行作为参数。我执行如下所示的函数调用,以避免使 UDF 不稳定(如果这样做,则会大大延长计算时间),因此当 R 列中发生任何更改时,UDF 的结果会更新:

    calculateOvertime(R:R) 
  • 在表 2 上,每月的天数按行(而不是列)排列,如果加类的话,人们可以在其中填写当天的详细信息。这是由工作表 1 中的一个 UDF 检测到的,因此这里的 2 个 UDF 需要由工作表 1 中的 UDF 计算的数据

我对这个设置有一些奇怪的问题:

  • 出于某种原因,当我切换选项卡时,包含任何这些功能的所有单元格都显示为#VALUE!。我必须将“Application.CalculateFull”添加到事件处理程序中,该事件处理程序在激活选项卡时触发:

    Private Sub Worksheet_activate()
    Application.CalculateFull
    End Sub
  • 引用另一个选项卡上包含另一个 UDF 的单元格的 UDF 将始终显示“2015!”作为值,引用错误 2015(值错误,因为当工作表未激活时单元格包含#VALUE!)

显然这两个问题是相关的,因为当我移动工作表时,非事件工作表中的 UDF 计算值会以某种方式丢失。

我从单元格获取值的方法如下。我使用 Find() 函数找出 A 列中的标签位于哪一行

Dim compensationRowIndex As Integer
compensationRowIndex = CInt(othersheet.Range("A1:A250").Find("COMPENSATION").Row)

然后我获取该值并将其转换为 Single

Dim compensation As Single
compensation = CSng(othersheet.Cells(compensationRowIndex , columnIndex).Value)

变量“compensation”始终保留值 2015。

有什么办法可以解决这个问题吗?另外,当我想打印工作表时,所有包含 UDF 的单元格都填充了 #VALUE!。我的猜测是:如果我能让问题 1 消失,那么问题 2 也会消失。

非常感谢对此的任何帮助。我已经花了几乎一整天的时间来解决这个问题,但还没有找到通过谷歌搜索症状的解决方案。

最佳答案

问题解决了!

UDF 中的“ActiveSheet”并不意味着“包含 UDF 的单元格所在的工作表”,它的字面意思是“处于事件状态的工作表”。

当在另一张纸上引用 UDF 时,事情会发生严重错误。只需用 If 语句中设置的变量替换 ActiveSheet,该变量决定从何处调用 UDF。就我而言,第二张纸中始终包含“信息”一词。在该工作表上时,您应该向左移动一张工作表:

Dim ws As Worksheet

If InStr(ActiveSheet.Name, "Info") = 0 Then
Set ws = ActiveSheet
Else
Set ws = Worksheets(ActiveSheet.Index - 1)
End If

不是 100% 防水的解决方案(例如,如果有人重新订购床单怎么办),但就我的目的而言,它已经足够接近了。

关于vba - 不同工作表上的 UDF 相互调用返回错误 2015,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27907835/

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