Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA函数不存储字符串_Vba_Excel - Fatal编程技术网

VBA函数不存储字符串

VBA函数不存储字符串,vba,excel,Vba,Excel,我正在转载这个问题,因为我还没有得到答案,我仍然无法找出我做错了什么。代码下面详细介绍了我自己解决问题的最新努力 原职: 我已经包含了我函数的代码。我基本上是从网上找到的东西中把它拼凑起来的,因为我是一个非常业余的程序员。我试着取一张图表的趋势线,并用它进行数学计算。当我逐步完成这段代码时,它工作得非常好。但是,当我从另一个子系统调用函数时,它会给我一个错误。错误9:下标超出范围。当我调试时,它向我显示a=spl(0)行。真正的问题是变量“s”仍然为空。为什么? Function TrendLi

我正在转载这个问题,因为我还没有得到答案,我仍然无法找出我做错了什么。代码下面详细介绍了我自己解决问题的最新努力

原职:

我已经包含了我函数的代码。我基本上是从网上找到的东西中把它拼凑起来的,因为我是一个非常业余的程序员。我试着取一张图表的趋势线,并用它进行数学计算。当我逐步完成这段代码时,它工作得非常好。但是,当我从另一个子系统调用函数时,它会给我一个错误。错误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
函数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我不得不对你的答案投赞成票,因为它是正确的,有人显然不明白为什么它实际上是正确的。