VBA:我的程序正在抛出编译错误ByRef
我正在运行一个正在运行的程序。 我做了一个副本,以testing使我的代码更模块化。 下面是一个循环内部的一个子运行,通过调用第一个运行变为两个子运行。
Sub Trendline() Dim eqn, name As String Dim cht As ChartObject Dim i As Integer For Each cht in Worksheets(1).ChartObjects If cht.Chart.SeriesCollection(1).Trendlines.Count > 0 Then cht.Activate name = Split(ActiveChart.name)(1) i = Worksheets(name).Range("Z2").Value 'indicates what kind of trendline eqn = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text 'the trendline has both R-square and Equation displayed eqn = Split(eqn, Chr(10))(0) Worksheets(name).Range("AA1").Value = MakeEqn(i, eqn) End If Next cht End Sub Function MakeEqn(i As Integer, eqn As String) As String '1 is linear, 2 polynomial, 3 polynomial order 3 '4 is power, 5 exponential, 6 logarithmic eqn = Replace(eqn, "y = ", "") If i = 6 Then ' removes 6 from options eqn = Replace(eqn, "ln", "*LN") 'Break Else eqn = Replace(eqn, "x", "*x") If i = 1 Then ' removes 1 from options 'Break ElseIf i = 5 Then ' removes 5 from options eqn = Replace(eqn, "e", "*EXP(") eqn = eqn & ")" ' add ")" to end of string ' Break ElseIf i = 4 Then ' removes 4 from options eqn = Replace(eqn, "x", "x^") 'Break Else ' for both 2 and 3 eqn = Replace(eqn, "x2", "x^2") ' 2 is now done If i = 3 Then eqn = Replace(eqn, "x3", "x^3") End If End If End If MakeEqn = eqn End Function
在这里,MakeEqn调用中的“eqn”突出显示,并引发以下编译错误。
我感到沮丧,因为我传递一个string到函数调用一个string,但编译器声称有一个types不匹配。 我应该在这里做什么?
在你的TrendLine
子程序中,你已经声明eqn
是一个Variant
:
Dim eqn, name As String
在您的MakeEqn
函数中,您期望接收(通过引用)一个String
:
Function MakeEqn(i As Integer, eqn As String) As String
您不能将Variant
传递给ByRef
String
。 (它会生成一个“ByRef参数types不匹配”错误。)
最简单的解决方法是在TrendLine
声明eqn
是一个String
,即
Dim eqn As String, name As String
或者,您可以传递variablesByVal
,这将强制从Variant
转换为String
:
Function MakeEqn(i As Integer, ByVal eqn As String) As String
当然有一个问题,因为variableseqn
在你的例子的第二行被隐式声明为一个Varianttypes: Dim eqn, name As String
。 在VBA中,即使在同一行(除非它是一个Variant),您也需要显式声明每个variables,如下所示:
Dim eqn As String, name As String