【问题标题】:Excel VBA: Beta retrieve function not working in my subExcel VBA:Beta 检索功能在我的子程序中不起作用
【发布时间】:2016-12-27 11:11:03
【问题描述】:

我修改了一段现有代码,以便从 reuters.com 检索法国股票的 Beta 值。当我在电子表格中使用该功能时(例如 =getbeta(A3) 和单元格 A3 中的 EDF.PA),该功能似乎正在工作。

'Beta Function. Posted by mybeam on http://www.mrexcel.com/forum/excel-questions/780746-excel-how-pull-beta-stock-yahoo-finance.html
Function GetBeta(ByVal trange As Range) As Single

  Dim xHttp As Object
  Dim t, Ticker  As String

  Set xHttp = CreateObject("Microsoft.XMLHTTP")

  Ticker = trange.Text

  xHttp.Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=" & Ticker, False
  xHttp.Send
  t = xHttp.responseText

  t = Mid(t, InStr(t, ">Beta:<") + 1)
  t = Mid(t, InStr(t, ">") + 1)
  t = Mid(t, InStr(t, ">") + 1)
  t = Mid(t, InStr(t, ">") + 1)

  GetBeta = Val(Left(t, InStr(t, "<") - 1))

End Function

但是,我现在想将该函数用作 sub 的一部分。不幸的是,下面的代码不起作用。看来我对变量/对象有问题。

Private Sub CommandButton4_Click()
  Dim Beta As Double
  Dim Ticker_A As Range

  Select Case Userform1.ComboBox_D.Value
  Case "ACCOR"
    Ticker_A = "AC.PA"
  Case "ELECTRICITE DE FRANCE"
    Ticker_A = "EDF.PA"

  Beta = GetBeta(Range(Ticker_A))

  MsgBox Beta

End Sub

【问题讨论】:

  • 您收到的错误是什么?
  • 嘿,队长,谢谢你看这个。我收到运行时错误 91 对象变量或未设置块变量
  • 您的代码放在哪里? Userform1 是在你执行你的子程序时初始化的吗?
  • 该函数被放置在一个模块中。 CommandButton4 是 userform1 的一部分,单击按钮时将启动整个 sub。因此,我认为 userform1 已初始化。

标签: excel vba


【解决方案1】:

我有一些疯狂的变化。而不是范围,您可能希望将其设置为字符串并放置 end select

Private Sub CommandButton4_Click()

   Dim Beta As Double
   Dim Ticker_A As String

   Select Case UserForm1.ComboBox_D.Value
   Case "ACCOR"
       Ticker_A = "AC.PA"
   Case "ELECTRICITE DE FRANCE"
       Ticker_A = "EDF.PA"
   End Select

   Beta = GetBeta(Ticker_A)
   MsgBox Beta

End Sub


Public Function GetBeta(trange As String) As Single

    Dim xHttp As Object
    Dim t, Ticker  As String

    Set xHttp = CreateObject("Microsoft.XMLHTTP")

    Ticker = trange

    xHttp.Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=" & Ticker, False
    xHttp.Send
    t = xHttp.responseText

    t = Mid(t, InStr(t, ">Beta:<") + 1)
    t = Mid(t, InStr(t, ">") + 1)
    t = Mid(t, InStr(t, ">") + 1)
    t = Mid(t, InStr(t, ">") + 1)

    GetBeta = Val(Left(t, InStr(t, "<") - 1))

End Function

【讨论】:

  • 很好地发现了丢失的End Select ... +1
【解决方案2】:

我发现您对变量类型有疑问。在您最初的情况下,trange 显然是一个范围。转换为 Sub 后,您将文本加载到 Ticker_A 中,您在调用 GetBeta 函数时将其用作范围地址。

只要我怀疑您的工作表中有命名范围“AC.PA”和“EDF.PA”,这将起作用。因此,您可能需要将 GetBeta 函数的参数类型更改为字符串,而不是局部变量 Ticker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2022-01-24
    • 2015-02-27
    • 2012-06-28
    • 1970-01-01
    相关资源
    最近更新 更多