vba 编译错误:需要常量表达式

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27590606/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-12 05:36:03  来源:igfitidea点击:

Compile error: Constant expression required

vbaexcel-vbaexcel

提问by uncool

I've stumbled upon a compile error, but don't get what can be of the issue. When trying to chagne the symbol to an input variable ( TickerID ) I get the error, works perfectly fine otherwise when inputting e.g "yhoo" for the yahoo ticker name.

我偶然发现了一个编译错误,但不知道是什么问题。当尝试将符号更改为输入变量( TickerID )时,出现错误,否则在输入例如“yhoo”作为雅虎股票代码名称时工作正常。

Code

代码

Private Sub CmdBtn_Add_Click()
'---------------------------------------------------------------------------------------'
' Checks that inputted ticker name is correct and calls import class after confirmation
'---------------------------------------------------------------------------------------'

' General Variables---------'
  Dim TickerID As String: TickerID = UCase(Add_Instrument.TxtBox_Instrument.Value)
'--------------------------'

    'Check if input field is not empty
    If TickerID = "" Or Application.WorksheetFunction.IsText(TickerID) = False Then
        MsgBox "Please provide a valid ticker ID"
        Exit Sub
    End If

    Debug.Print TickerID

    'Check Ticker name exists through YQLBuilder class
    Dim YQLBuilder As YQLBuilder: Set YQLBuilder = New YQLBuilder
    Call YQLBuilder.TickerCheck(TickerID)


'        Call ImportData(TickerID)

'        MsgBox "Please check the ticker name. It is in the wrong format"

End Sub
Public Sub TickerCheck(TickerID As String)
'---------------------------------------------------------------------------------------'
' Built 2014-11-05 Allows parsing of XML data through YAHOO API YQL
' 2014-12-21: Not fully built yet, see where it can be of use
'---------------------------------------------------------------------------------------'

' General Variables---------'
Const ConnStringStart As String = "http://query.yahooapis.com/v1/public/yql?q="
Const ConnStringLast As String = "&diagnostics=true&env=store://datatables.org/alltableswithkeys"
'---------------------------'


 Const ConnStringInput As String = "select * from yahoo.finance.stocks where symbol='" _
 & TickerID & "'" **<----- Error here!**

    Debug.Print ConnStringStart & ConnStringInput & ConnStringLast

    Dim YQLNodes As MSXML2.IXMLDOMNodeList
    Dim YQLReq As MSXML2.DOMDocument60

    Set YQLReq = New MSXML2.DOMDocument60

        YQLReq.async = False
        YQLReq.Load ConnStringStart & ConnStringInput & ConnStringLast

    YQLReq.setProperty "SelectionNamespaces", "xmlns:f='http://www.yahooapis.com/v1/base.rng'"
    Set YQLNodes = YQLReq.SelectNodes("//CompanyName")

    Dim xNode As MSXML2.IXMLDOMNode

    For Each xNode In YQLNodes

        Debug.Print xNode.Text

    Next xNode

     Debug.Print YQLNodes.Length

End Sub

回答by GolezTrol

The message is clear. When you declare a constant, the value you give it must be constant too. In this case, part of it is the parameter TickerId, which is variable. You cannot declare a constant with a variable value.

消息很明确。当你声明一个常量时,你给它的值也必须是常量。在这种情况下,它的一部分是参数 TickerId,它是可变的。您不能声明具有变量值的常量。

To solve this, I think you could just use Diminstead of Constand not make ConnStringInput a constant at all.

为了解决这个问题,我认为你可以只使用DimConst不是让 ConnStringInput 成为一个常量。