Excel VBA 如何引用本地工作表名称?

5
我有一个VBA函数,可以从ActiveSheet中的图表输出趋势线方程。我将此函数作为Add-in跨多个工作表使用。为了让函数计算,在我打开工作簿时,我按下CTRL-ALT-F9。这样做后,该函数将为ActiveSheet计算,因此,如果我在多个工作表中使用该函数,则它会针对活动的任何一个工作表进行计算,而不是针对函数所在的工作表。
理想情况下,我希望该函数只引用它所在的那个工作表。由于它应该广泛适用于多个工作表,我想摆脱指定表名的方式。
目前的引用是:ActiveSheet.ChartObjects(1).Chart 我尝试过Worksheet.ChartObjects(1).Chart,但无法编译。
感谢您提供的任何帮助/指导。
完整代码:
Function TrendLineValue(x) As Double
    Dim c As Chart
    Dim t As Trendline
    Dim e As String

    ' Get the trend line object for activesheet
    Set c = ActiveSheet.ChartObjects(1).Chart
    Set t = c.SeriesCollection(1).Trendlines(1)

    ' Display Equation
    t.DisplayRSquared = False
    t.DisplayEquation = True

    'Number format for accuracy
    t.DataLabel.NumberFormat = "0.0000E+00"

    ' Get equation
    e = t.DataLabel.Text

    ' Create equation for use in cell
    e = Replace(e, "y =", "")
    e = Replace(e, "x6", "x^6")
    e = Replace(e, "x5", "x^5")
    e = Replace(e, "x4", "x^4")
    e = Replace(e, "x3", "x^3")
    e = Replace(e, "x2", "x^2")
    e = Replace(e, "x", " * " & x & " ")

    ' Evaluate
    TrendLineValue = Evaluate(e)
End Function

不要使用 ActiveSheet。通过循环(For each ws in ThisWorkbook.Worksheets // ws.ChartObjects(1).Chart ...do whatever... // end With)或者直接使用Worksheets("SheetName").ChartObjects()...来指定具体的工作表。如果没有 [mcve] 的话,很难更加具体地说明。 - BruceWayne
BruceWayne 谢谢,但我觉得这两个都不是理想的选择。理想情况下,我只想在一个单元格中输入函数,并让它计算该特定工作表上图表的值。 我将更新帖子,包括完整的代码。 - JDugdale
1个回答

9
似乎您可以使用 Application.Caller。由于这是在单元格中输入的自定义函数,Application.Caller 返回“指定该单元格的 Range 对象”。该 RangeParent 是涉及到的工作表。
Set c = ActiveSheet.ChartObjects(1).Chart

to

Set c = Application.Caller.Parent.ChartObjects(1).Chart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接