VBA函数不存储字符串

时间:2017-07-06 15:17:36

标签: excel vba excel-vba

我正在转发这个问题,因为我没有得到答案,我仍然无法弄清楚我做错了什么。我自己最近解决问题的努力详见代码。

原帖: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为空(“”)。

1 个答案:

答案 0 :(得分:0)

是的,当然你会在你指出的那一行上收到错误。您正在调用spl(0),就好像它是它自己的函数一样,尽管您没有在此代码中的任何位置将spl()定义为子(函数)。或者,或者(更有可能)你将它称为数组,这也会抛出一些标志。

确保在代码中定义spl。你永远不会这样做。添加行:

Dim spl(1 to 3) As String

然后你会发现spl(1)spl(2)spl(3)是你想要的。