VBA函数仅适用于一个工作表

VBA函数仅适用于一个工作表,vba,excel,Vba,Excel,我有一个接受一个参数的函数。该函数的目标是在“数据”表B列中查找匹配项(与输入的参数),然后返回F列中相应的单元格(乘以我使用的某个因子)。我希望这个函数能够在所有工作表上工作。不幸的是,它似乎只在数据表上起作用。例如,如果我在Analyzer工作表上的随机单元格中键入“=CPOST(B18)”,我将得到一个“#Value!”错误 我已经在谷歌上搜索过了,但仍然没有找到任何东西。这是我第一次在这个网站上提问,尽管我已经从这里得到了很多答案。谢谢大家 代码如下: Public Function C

我有一个接受一个参数的函数。该函数的目标是在“数据”表B列中查找匹配项(与输入的参数),然后返回F列中相应的单元格(乘以我使用的某个因子)。我希望这个函数能够在所有工作表上工作。不幸的是,它似乎只在数据表上起作用。例如,如果我在Analyzer工作表上的随机单元格中键入“=CPOST(B18)”,我将得到一个“#Value!”错误

我已经在谷歌上搜索过了,但仍然没有找到任何东西。这是我第一次在这个网站上提问,尽管我已经从这里得到了很多答案。谢谢大家

代码如下:

Public Function CPost(rng As Range)

' find the date in the data sheet from column 2 (B)
' sum the prior 21 abs values from column 6 (F)
' take the sum * factor * 100
' return that total as output

Dim LR As Integer

Set sh1 = Sheets("Analyzer")
Set sh2 = Sheets("Data")
Set sh3 = Sheets("Notes")

LR = sh2.Cells(Rows.Count, 1).End(xlUp).Row

For x = 3 To LR
    y = Cells(x, 2).Value
    If y = rng Then
        Set xx = Cells(x + 1, 6).Resize(21, 1)
        yy = Application.WorksheetFunction.Average(xx)
        zz = yy * 5 * 100
        CPost = zz
    End If
Next x

End Function
更新:

基于您在下面的所有回复(我非常感谢),我已将我的代码从模块4复制到此工作簿。我删除了模块4(ht-Dirk)。我将工作表限定符添加到我的范围(ht BruceTimScott)。现在,当我尝试在工作簿的任何工作表中键入公式时,会出现“#NAME?”错误。这是新代码。如果我遗漏了一些明显的东西,我很抱歉:

Public Function CPost(rng As Range)

' find the date in the data sheet from column 2 (B)
' sum the prior 21 abs values from column 6 (F)
' take the sum * factor * 100
' return that total as output

With Sheets("Data")

Dim LR As Integer

LR = Worksheets("Data").Cells(Rows.Count, 1).End(xlUp).Row

For x = 3 To LR
    y = Worksheets("Data").Cells(x, 2).Value
    If y = rng Then
        Set xx = Worksheets("Data").Cells(x + 1, 6).Resize(21, 1)
        yy = .Application.WorksheetFunction.Average(xx)
        zz = yy * 5 * 100
        CPost = zz
    End If
Next x

End With

End Function

请尝试通过函数定义中的
Public Function CPost(rng As Range)
更改
Public Function CPost(rng As Excel.Range)

代码是在单独的模块中还是附加到工作表中?它位于VBAProject(abc.xlsm)下的“Module4”中。您正在使用的
单元格()
,没有任何工作表限定符,因此,他们将始终参考活动表-这可能会产生意外的结果。您需要使用工作表对象限定每个范围引用。为了进一步添加@TimWilliams所述内容,您可以在设置
LR
时执行此操作,您只需要使用正确的工作表限定
单元格的其他实例。好了,朋友们,我根据@TimWilliams和同事的建议添加了限定符。一旦我将代码添加回模块4,它似乎可以跨所有工作表工作。因此,模块4中的代码似乎可以接受,但需要工作表限定符。据我所知,Tim的回答是正确的。谢谢大家。