VBA函数不存储字符串
我正在转载这个问题,因为我还没有得到答案,我仍然无法找出我做错了什么。代码下面详细介绍了我自己解决问题的最新努力 原职: 我已经包含了我函数的代码。我基本上是从网上找到的东西中把它拼凑起来的,因为我是一个非常业余的程序员。我试着取一张图表的趋势线,并用它进行数学计算。当我逐步完成这段代码时,它工作得非常好。但是,当我从另一个子系统调用函数时,它会给我一个错误。错误9:下标超出范围。当我调试时,它向我显示a=spl(0)行。真正的问题是变量“s”仍然为空。为什么?VBA函数不存储字符串,vba,excel,Vba,Excel,我正在转载这个问题,因为我还没有得到答案,我仍然无法找出我做错了什么。代码下面详细介绍了我自己解决问题的最新努力 原职: 我已经包含了我函数的代码。我基本上是从网上找到的东西中把它拼凑起来的,因为我是一个非常业余的程序员。我试着取一张图表的趋势线,并用它进行数学计算。当我逐步完成这段代码时,它工作得非常好。但是,当我从另一个子系统调用函数时,它会给我一个错误。错误9:下标超出范围。当我调试时,它向我显示a=spl(0)行。真正的问题是变量“s”仍然为空。为什么? Function TrendLi
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
函数TrendLineLog()为双精度
模糊查斯图
将t作为趋势线
像线一样变暗
双精度模糊值
'获取趋势线对象
Set ch=ActiveSheet.ChartObjects(1.Chart)
集合t=ch.SeriesCollection(1)。趋势线(1)
'确保已显示公式
t、 DisplayRSquared=False
t、 DisplayEquation=True
'设置数字格式以确保准确性
t、 DataLabel.NumberFormat=“0.000000E+00”
“得到这个等式
s=t.DataLabel.Text'是的,您指出的行当然会出错。您正在调用spl(0)
,就好像它是它自己的函数一样,尽管您没有将spl()
定义为此代码中的任何子(函数)。或者,或者(更可能)将其称为数组,这也会抛出一些标志
确保在代码中定义spl。你从来没有这样做过。添加行:
Dim spl(1 to 3) As String
然后你会发现spl(1)
,spl(2)
,和spl(3)
都是你想要的。在你做所有替换语句之前,s
的价值是什么?-1因为之前的帖子没有引起注意,所以发布了一个完全重复的内容,这不是这个网站的工作方式。一个简单的回答会把问题推回到头版。你也收到了关于原始帖子的评论,要求澄清并向你指出解决方案——你至少可以回复这些评论,而不是发布重复的评论。嘿@Mat'sMug,我编辑了旧帖子(没有新评论)并回复了评论(也没有回应)。我很抱歉违反了礼仪,但我是这个网站的新手。另外,我非常清楚地提到了这是一个副本。@问题是它在s=t.DataLabel.Text行保持空白。所以在所有替换过程中它也是空白的spl=Split(s,”)
。即使未声明,它也显然是一个数组,并且基于0。这个答案是错误的,如果指定了选项Explicit
,您描述的错误将是编译时错误,而这显然不是(如果是这样,OP甚至无法运行其代码).有趣的是,原始/链接的问题有一个删除的答案,该答案几乎与此答案所说的完全一致。OP为什么不想指定spl
呢?这在大多数语言中不是普遍接受的做法吗?当然。我是说这与手头的问题无关,也不会解决问题也可以。那么,如何补救呢?现在我很感兴趣。你显然有VBA方面的经验,你会怎么做?@E.Trauger我不得不对你的答案投赞成票,因为它是正确的,有人显然不明白为什么它实际上是正确的。