我正在尝试修改一些参数,并将其附加到一部分网址以使其成为合格的网址。我在字典中使用了这些参数,然后使用IIf
函数对其进行了简化。该脚本运行良好,除了第一个&我无法摆脱。看看下面的图片,以确保我的意思是“&”号。
我尝试过:
Sub UseParams()
Const Url$ = "https://www.morningstar.com/api/v1/search/entities?"
Dim MyDict As Object, DictKey As Variant, mystring$
Set MyDict = CreateObject("Scripting.Dictionary")
MyDict("q") = "BE0974256852"
MyDict("limit") = "1"
MyDict("id") = ""
MyDict("autocomplete") = "false"
For Each DictKey In MyDict
mystring = IIf(Len(DictKey) = 0, WorksheetFunction.EncodeURL(DictKey) & "=" & WorksheetFunction.EncodeURL(MyDict(DictKey)), _
mystring & "&" & WorksheetFunction.EncodeURL(DictKey) & "=" & WorksheetFunction.EncodeURL(MyDict(DictKey)))
Next DictKey
Debug.Print Url & mystring
End Sub
输出产生:
https://www.morningstar.com/api/v1/search/entities?&q=BE0974256852&limit=1&id=&autocomplete=false
我希望得到的输出:
https://www.morningstar.com/api/v1/search/entities?q=BE0974256852&limit=1&id=&autocomplete=false
我如何产生所需的输出来修改条件语句,使现有设计保持原样?
在这种情况下,您可能想使用For...Next
循环而不是For Each...Next
循环。这样,您可以通过循环来评估您要使用的密钥。
类似:
For DictKey = 0 to myDict.Count
mystring = IIf(DictKey = 0, WorksheetFunction.EncodeURL(myDict.Item(DictKey)) & "=" & WorksheetFunction.EncodeURL(MyDict.Item(DictKey)), _
mystring & "&" & WorksheetFunction.EncodeURL(myDict,Item(DictKey)) & "=" & WorksheetFunction.EncodeURL(MyDict.Item(DictKey)))
Next DictKey
当前正在循环中,它正在评估Dictionary.Item
的长度是否为0(用于返回第一个项目的位置),如果是,则不包含与号,否则会包含。
未经测试,但我敢肯定,它将解决您的问题。 (iif
的语法可能会稍微关闭,因为我从不使用该函数)