Excel VBA ссылается на локальное имя листа - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть функция 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

1 Ответ

0 голосов
/ 28 ноября 2018

Похоже, вы могли бы использовать Application.Caller.Поскольку это пользовательская функция, введенная в ячейку, Application.Caller возвращает «объект Range, указывающий эту ячейку».Parent этого Range - это рассматриваемый лист.

Изменить

Set c = ActiveSheet.ChartObjects(1).Chart

на

Set c = Application.Caller.Parent.ChartObjects(1).Chart
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...