我正在转发这个问题,因为我没有得到答案,我仍然无法弄清楚我做错了什么。我自己最近解决问题的努力详见代码。
原帖:VBA Function not storing variable
我已经包含了我的功能代码。我大部分时间都是从网上找到的东西中删除的,因为我非常喜欢编码。我试图采用图表的趋势线并将其用于数学计算。当我单步执行此代码时,它运行良好。但是,当我从另一个sub调用该函数时,它会给我一个错误。错误9:下标超出范围。当我调试时,它向我显示a = spl(0)行。真正的问题是变量“s”仍然是空的。为什么呢?
Function TrendLineLog() As Double
Dim ch As Chart
Dim t As Trendline
Dim s As String
Dim Value As Double
' Get the trend line object
Set ch = ActiveSheet.ChartObjects(1).Chart
Set t = ch.SeriesCollection(1).Trendlines(1)
' make sure equation is displayed
t.DisplayRSquared = False
t.DisplayEquation = True
' set number format to ensure accuracy
t.DataLabel.NumberFormat = "0.000000E+00"
' get the equation
s = t.DataLabel.Text '<--------- ACTUAL PROBLEM HERE
' massage the equation string into form that will evaluate
s = Replace(s, "y = ", "")
s = Replace(s, "ln", " *LOG")
s = Replace(s, " +", "")
s = Replace(s, " - ", " -")
spl = Split(s, " ")
a = spl(0) '<----------- DEBUG SAYS HERE
b = spl(1)
c = spl(2)
y = 0.5
..... Math stuff
End Function
我尝试将图表的创建添加到函数中以避免“Active Sheet”出错。我也尝试将此代码粘贴到我的子代码中,而不是调用单独的函数。依然没有。当我调试并突出显示t.DataLabel.Text时,它会显示正确的值,但由于某种原因,s不保存该值。在“局部”窗口中,t具有值,但s为空(“”)。
答案 0 :(得分:0)
是的,当然你会在你指出的那一行上收到错误。您正在调用spl(0)
,就好像它是它自己的函数一样,尽管您没有在此代码中的任何位置将spl()
定义为子(函数)。或者,或者(更有可能)你将它称为数组,这也会抛出一些标志。
确保在代码中定义spl。你永远不会这样做。添加行:
Dim spl(1 to 3) As String
然后你会发现spl(1)
,spl(2)
和spl(3)
是你想要的。