Excel VBA:dynamicvariables名称

注意:我仅限于PHP < – > VBA。 请不要build议任何需要Excel插件或任何其他语言/方法的东西。

我有一个函数连接到指定的URL,提交数据,然后检索其他数据。 这很好。 我试图写它,所以我可以使用它作为一个通用的函数,我可以使用连接到任何文件,我需要连接到 – 每个将返回不同的数据(可能是用户数据,可能是复杂的计算等)。

当它从PHP获取数据时,是否有办法根据收到的数据dynamic设置variables – 即使我不知道接收到的是什么。

我可以让PHP以任何格式返回到VBA的string,所以我使用下面的例子:

在vba中收到的string:

myValue1=Dave&someOtherValue=Hockey&HockeyDate=Yesterday 

如果我在PHP中parsing这个,我可以做类似的事情(不准确,只是为了举例)。

 $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中做类似的事情。 我收到的string是从一个PHP文件,所以我可以任何格式(JSON等),我只是基本上希望能够在从PHP输出string时定义VARIABLES。 这在VBA中可能吗?

我有这个function的现在状态很适合连接,如下所示:

 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") 

没关系,如果你没有正确的序列…

我不知道这是否可以帮助你,但据我的理解你的问题,你希望能够根据查询string参数dynamic地创buildvariables。 如果是这样,那么这里是例子如何dynamic地添加这个variables。 代码需要名称为“QueryStringVariables”的标准模块。 在这个模块中,查询string将被parsing,并且每个查询string参数将被添加为get-property。 如果您希望能够更改值,那么您还需要添加let-property。

在这里输入图像说明

添加对Microsoft Visual Basic应用程序扩展性的引用

 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