似乎为IE的最大的URL长度是2083个字符:
https://support.microsoft.com/en-us/kb/208427
要构建查询,我会使用字符串构建器(“System.Text.StringBuilder”)。 您还需要对所有参数进行URL编码。
下面是一个例子从范围内建设有名称/值的网址[A1:B10]:
Sub BuildURL
' Read the names/values from a sheet
Dim names_values()
names_values = [A1:B10].Value2
' Create a string builder
Dim sb As Object
Set sb = CreateObject("System.Text.StringBuilder")
sb.Append_3 "http://localhost/excelmaps/maps.php"
' Build the query
Dim i&, name$, value$
For i = 1 To UBound(names_values)
name = names_values(i, 1)
value = names_values(i, 2)
If i = 1 Then sb.Append_3 ("?") Else sb.Append_3 ("&")
sb.Append_3 URLEncode(name) ' Adds the name
sb.Append_3 "="
sb.Append_3 URLEncode(value) ' Adds the value
Next
' Print the result
Debug.Print sb.ToString()
End Sub
Public Function URLEncode(url As String, Optional space_to_plus As Boolean) As String
Static ToHex(15), IsLiteral%(127), buffer() As Byte, bufferCapacity&
Dim urlBytes() As Byte, bufferLength&, i&, u&, b&, space&
If space_to_plus Then space = 32 Else space = -1
If bufferCapacity = 0 Then GoSub InitializeOnce
urlBytes = url
For i = 0 To UBound(urlBytes) Step 2
If bufferLength >= bufferCapacity Then GoSub IncreaseBuffer
u = urlBytes(i) + urlBytes(i + 1) * 256&
If u And -128 Then ' U+0080 to U+1FFFFF '
If u And -2048 Then ' U+0800 to U+1FFFFF '
If (u And 64512) - 55296 Then ' U+0800 to U+FFFF '
b = 224 + (u \ 4096): GoSub WriteByte
b = 128 + (u \ 64 And 63&): GoSub WriteByte
b = 128 + (u And 63&): GoSub WriteByte
Else ' surrogate U+10000 to U+1FFFFF '
i = i + 2
u = ((urlBytes(i) + urlBytes(i + 1) * 256&) And 1023&) _
+ &H10000 + (u And 1023&) * 1024&
b = 240 + (u \ 262144): GoSub WriteByte
b = 128 + (u \ 4096 And 63&): GoSub WriteByte
b = 128 + (u \ 64 And 63&): GoSub WriteByte
b = 128 + (u And 63&): GoSub WriteByte
End If
Else ' U+0080 to U+07FF '
b = 192 + (u \ 64): GoSub WriteByte
b = 128 + (u And 63&): GoSub WriteByte
End If
ElseIf IsLiteral(u) Then ' unreserved ascii character '
buffer(bufferLength) = u
bufferLength = bufferLength + 2
ElseIf u - space Then ' reserved ascii character '
b = u: GoSub WriteByte
Else ' space character '
buffer(bufferLength) = 43 ' convert space to + '
bufferLength = bufferLength + 2
End If
Next
URLEncode = LeftB$(buffer, bufferLength)
Exit Function
WriteByte:
buffer(bufferLength) = 37 '%
buffer(bufferLength + 2) = ToHex(b \ 16)
buffer(bufferLength + 4) = ToHex(b And 15&)
bufferLength = bufferLength + 6
Return
IncreaseBuffer:
bufferCapacity = UBound(buffer) * 2
ReDim Preserve buffer(bufferCapacity + 25)
Return
InitializeOnce:
bufferCapacity = 2048
ReDim buffer(bufferCapacity + 25)
For i = 0 To 9: ToHex(i) = CByte(48 + i): Next '[0-9]'
For i = 10 To 15: ToHex(i) = CByte(55 + i): Next '[A-F]'
For i = 48 To 57: IsLiteral(i) = True: Next '[0-9]'
For i = 65 To 90: IsLiteral(i) = True: Next '[A-Z]'
For i = 97 To 122: IsLiteral(i) = True: Next '[a-z]'
IsLiteral(45) = True ' - '
IsLiteral(46) = True ' . '
IsLiteral(95) = True ' _ '
IsLiteral(126) = True ' ~ '
Return
End Function
感谢您的时间florentbr。! Wiil尝试你的代码! – balu