[英]Excel VBA: Dynamic Variable Name
注意:我僅限於 PHP <-> VBA。 請不要建議任何需要 Excel 插件或任何其他語言/方法的內容。
我有一個函數可以連接到指定的 URL,提交數據,然后檢索其他數據。 這很好用。 我正在嘗試編寫它,以便我可以將它用作通用函數,我可以使用它來連接到我需要連接的任何文件 - 每個文件都會返回不同的數據(一個可能是用戶數據,一個可能是復雜的計算等)。
當它從 PHP 檢索數據時,有沒有辦法根據收到的內容動態設置變量 - 即使我不知道收到了什么。
我可以讓 PHP 以任何格式將字符串返回給 VBA,因此我使用下面的示例:
在 vba 中收到的字符串:
myValue1=Dave&someOtherValue=Hockey&HockeyDate=Yesterday
如果我要在 PHP 中解析它,我可以做類似的事情(不准確,只是為了示例目的而寫的);
$myData = "myValue1=Dave&someOtherValue=Hockey&HockeyDate=Yesterday"
$myArr = explode("&",$myData)
foreach($myArr as $key => $value){
${$key} = $value;
}
echo $someOtherValue; //Would output to the screen 'Hockey';
我想在 VBA 中做類似的事情。 我收到的字符串來自 PHP 文件,因此我可以以任何方式對其進行格式化(json 等),我只是希望能夠在從 PHP 輸出字符串時定義 VARIABLES。 這在 VBA 中可能嗎?
我所擁有的對連接非常有用的功能的當前狀態如下:-
Function kick_connect(url As String, formdata)
'On Error GoTo connectError
Dim http
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.send (formdata)
kick_connect = http.responseText
Exit Function
connectError:
kick_connect = False
End Function
最終,我希望能夠做類似的事情
sub mySub
myData = "getId=" & Range("A1").Value
myValue = kick_connect("http://path-to-my-php-file.php",myData)
if myValue = False then
'Handle connection error here
exit sub
end if
'do something snazzy here to split "myValue" string (eg "myValue1=Dave&someOtherValue=Hockey&HockeyDate=Yesterday") into own variables
msgbox(myValue1) 'Should output "Dave"
end sub
顯然,我可以將這些值放入一個數組中,並引用它,但是我特別想知道這是否可能,以便靈活地處理已經存在的腳本。
我希望這是有道理的,非常感謝我得到的任何答復。
謝謝你。
您可以使用集合:
Dim Tmp As String
Dim s As String
Dim i As Integer
Dim colVariabili As New Collection
Tmp = "myValue1=Dave&someOtherValue=Hockey&HockeyDate=Yesterday"
Dim FieldStr() As String
Dim FieldSplitStr() As String
FieldStr = Split(Tmp, "&")
For Each xx In FieldStr
FieldSplitStr = Split(xx, "=")
colVariabili.Add FieldSplitStr(1), FieldSplitStr(0)
Next
Debug.Print colVariabili("myValue1")
Debug.Print colVariabili("someOtherValue")
Debug.Print colVariabili("HockeyDate")
如果您沒有正確的 var 序列也沒關系...
我不確定這是否可以幫助您,但據我了解您的問題,您希望能夠根據查詢字符串參數動態創建變量。 如果是這樣,那么這里是如何動態添加此變量的示例。 代碼需要名為“QueryStringVariables”的標准模塊。 在此模塊中,將解析查詢字符串,並將每個查詢字符串參數添加為 get-property。 如果您也希望能夠更改該值,那么您還需要添加 let-property。
添加對 Microsoft Visual Basic For Applications Extensibility 的引用
Option Explicit
Private Const SourceQueryString As String = "myValue1=Dave&someOtherValue=Hockey&HockeyDate=Yesterday"
Sub Test()
Dim queryStringVariablesComponent As VBIDE.vbComponent
Dim queryStringVariablesModule As VBIDE.CodeModule
Dim codeText As String
Dim lineNum As Long: lineNum = 1
Dim lineCount As Long
Set queryStringVariablesComponent = ThisWorkbook.VBProject.VBComponents("QueryStringVariables")
Set queryStringVariablesModule = queryStringVariablesComponent.CodeModule
queryStringVariablesModule.DeleteLines 1, queryStringVariablesModule.CountOfLines
Dim parts
parts = Split(SourceQueryString, "&")
Dim part, variableName, variableValue
For Each part In parts
variableName = Split(part, "=")(0)
variableValue = Split(part, "=")(1)
codeText = "Public Property Get " & variableName & "() As String"
queryStringVariablesModule.InsertLines lineNum, codeText
lineNum = lineNum + 1
codeText = variableName & " = """ & variableValue & ""
queryStringVariablesModule.InsertLines lineNum, codeText
lineNum = lineNum + 1
codeText = "End Property"
queryStringVariablesModule.InsertLines lineNum, codeText
lineNum = lineNum + 1
Next
DisplayIt
End Sub
Sub DisplayIt()
MsgBox myValue1 'Should output "Dave"
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.