我有一个VBA函数,可从ActiveSheet
中的图表输出趋势线方程。不过,我将此功能用作跨多个工作表的加载项。为了获得要计算的函数,当我第一次打开工作簿时,我按了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
答案 0 :(得分:5)
听起来像您可以使用Application.Caller
。由于这是在单元格中输入的自定义函数,因此Application.Caller
返回“指定该单元格的Range
对象”。 Parent
中的Range
是有问题的工作表。
更改
Set c = ActiveSheet.ChartObjects(1).Chart
到
Set c = Application.Caller.Parent.ChartObjects(1).Chart