EXCEL - VBA . Getting the cell values as Key Value Pairs -
i trying address values excel cells of column 'i' , pass query string url using vba. have embedded 'microsoft object browser' inside excel load page.
is possible? because worried amount of data passed query string high (1000 rows approximate).
the code not working though, there way same passing query string array?
also need vba syntax parse dictionary values.
i new vba. please help.
dim arr() variant ' declare unallocated array. arr = range("i:i") ' arr allocated array set dict = createobject("scripting.dictionary") dim irow integer irow = 1 dim parms variant dim rg range each rg in sheet1.range("i:i") ' print address of cells negative 'msgbox (rg.value) 'result = result & rg.value dict.add rg.value irow = (irow + 1) next msgbox (dict.item(1)) set dict = nothing 'webbrowser1.navigate2 "http://localhost/excelmaps/maps.php?adr=" & parms end sub
it seems maximum url length ie 2083 characters:
https://support.microsoft.com/en-us/kb/208427
to build query use string builder ("system.text.stringbuilder"). need url encode arguments.
here example building url names/values range [a1:b10] :
sub buildurl ' read names/values sheet dim names_values() names_values = [a1:b10].value2 ' create string builder dim sb object set sb = createobject("system.text.stringbuilder") sb.append_3 "http://localhost/excelmaps/maps.php" ' build query dim i&, name$, value$ = 1 ubound(names_values) name = names_values(i, 1) value = names_values(i, 2) if = 1 sb.append_3 ("?") else sb.append_3 ("&") sb.append_3 urlencode(name) ' adds name sb.append_3 "=" sb.append_3 urlencode(value) ' adds value next ' print result debug.print sb.tostring() end sub public function urlencode(url string, optional space_to_plus boolean) string static tohex(15), isliteral%(127), buffer() byte, buffercapacity& dim urlbytes() byte, bufferlength&, i&, u&, b&, space& if space_to_plus space = 32 else space = -1 if buffercapacity = 0 gosub initializeonce urlbytes = url = 0 ubound(urlbytes) step 2 if bufferlength >= buffercapacity gosub increasebuffer u = urlbytes(i) + urlbytes(i + 1) * 256& if u , -128 ' u+0080 u+1fffff ' if u , -2048 ' u+0800 u+1fffff ' if (u , 64512) - 55296 ' u+0800 u+ffff ' b = 224 + (u \ 4096): gosub writebyte b = 128 + (u \ 64 , 63&): gosub writebyte b = 128 + (u , 63&): gosub writebyte else ' surrogate u+10000 u+1fffff ' = + 2 u = ((urlbytes(i) + urlbytes(i + 1) * 256&) , 1023&) _ + &h10000 + (u , 1023&) * 1024& b = 240 + (u \ 262144): gosub writebyte b = 128 + (u \ 4096 , 63&): gosub writebyte b = 128 + (u \ 64 , 63&): gosub writebyte b = 128 + (u , 63&): gosub writebyte end if else ' u+0080 u+07ff ' b = 192 + (u \ 64): gosub writebyte b = 128 + (u , 63&): gosub writebyte end if elseif isliteral(u) ' unreserved ascii character ' buffer(bufferlength) = u bufferlength = bufferlength + 2 elseif u - space ' reserved ascii character ' b = u: gosub writebyte else ' space character ' buffer(bufferlength) = 43 ' convert space + ' 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 , 15&) bufferlength = bufferlength + 6 return increasebuffer: buffercapacity = ubound(buffer) * 2 redim preserve buffer(buffercapacity + 25) return initializeonce: buffercapacity = 2048 redim buffer(buffercapacity + 25) = 0 9: tohex(i) = cbyte(48 + i): next '[0-9]' = 10 15: tohex(i) = cbyte(55 + i): next '[a-f]' = 48 57: isliteral(i) = true: next '[0-9]' = 65 90: isliteral(i) = true: next '[a-z]' = 97 122: isliteral(i) = true: next '[a-z]' isliteral(45) = true ' - ' isliteral(46) = true ' . ' isliteral(95) = true ' _ ' isliteral(126) = true ' ~ ' return end function
Comments
Post a Comment