【发布时间】:2015-11-17 09:50:08
【问题描述】:
我正在尝试在另一个子例程中调用一个子例程并希望返回一些值。但是它似乎没有返回任何值。我将如何将其编写为函数?代码如下:
Sub tickersymbolchange()
Dim RSTA_ISIN, RSTA_Currency, RSTA_Ticker As String
For Each rng In r
ticker_wo_equity = Replace(rng.Value, " Equity", "")
Exchangecode = Right(ticker_wo_equity, 2)
Select Case Exchangecode
Case "PO", "L3", "B3", "S2", "TQ", "SS"
'MsgBox "I am in PO"
Call getRSTA_POL3B3S2TQSSIXEB(ticker_wo_equity, RSTA_ISIN, RSTA_Currency, RSTA_Ticker)
'Get ISIN from Rsta
If IsEmpty(RSTA_ISIN) Then
rng.Offset(0, 11) = "N/A"
Else
rng.Offset(0, 11) = RSTA_ISIN
End If
'Get Currency from Rsta
If IsEmpty(RSTA_Currency) Then
rng.Offset(0, 12) = "N/A"
Else
rng.Offset(0, 12) = RSTA_Currency
End If
End select
End Sub
Sub getRSTA_POL3B3S2TQSSIXEB(ticker, Optional ByVal getISIN As String, Optional ByVal getCurrency As String, Optional ByVal getTicker As String, Optional ByVal getUS As String, Optional ByVal getTickerTicker_IBEX As String, Optional ByVal getPriceCode_GR As String)
BBs.Send ticker & "<Equity> RSTA"
BBs.Go
'Application.Wait (Now + TimeValue("0:00:01"))
'Sleep 1000
BBs.CopyScreen
getISIN = BBs.GetTextField(7, 2, 13)
getCurrency = BBs.GetTextField(7, 15, 4)
getTicker = BBs.GetTextField(7, 20, 6)
getUS = BBs.GetTextField(7, 11, 9)
getTickerTicker_IBEX = BBs.GetTextField(7, 2, 7)
getPriceCode_GR = BBs.GetTextField(7, 2, 7)
End Sub
所以在这里我试图将 RSTA_ISIN 赋予函数 getRSTA_POL... 然后该函数应将 RSTA_ISIN 分配给 getISIN 的值,但是 RSTA_ISIN 和所有其他参数始终为空。
【问题讨论】:
-
如果你想改变传入sub的参数值,使用
byRef,而不是byVal。在您更改了值并退出 sub 后,传入的原始 var 将保留新值。
标签: vba excel function subroutine