Here, try this:
Code:
Private Declare Function UrlUnescapeW Lib "shlwapi.dll" (ByVal pszURL As Long, ByVal pszUnescaped As Long, ByRef pcchUnescaped As Long, ByVal dwFlags As Long) As Long
Public Function URLDecode(ByRef sURL As String) As String
Const INTERNET_MAX_URL_LENGTH = 2083&, E_POINTER = &H80004003
Dim ChrCnt As Long
ChrCnt = INTERNET_MAX_URL_LENGTH + 1&
Do: URLDecode = Space$(ChrCnt - 1&)
Loop While UrlUnescapeW(StrPtr(sURL), StrPtr(URLDecode), ChrCnt, 0&) = E_POINTER
If ChrCnt < Len(URLDecode) Then URLDecode = Left$(URLDecode, ChrCnt)
ChrCnt = InStr(URLDecode, "+")
While ChrCnt
Mid$(URLDecode, ChrCnt) = " "
ChrCnt = InStr(ChrCnt, URLDecode, "+")
Wend
End Function
Note:
MSDN says "input strings cannot be longer than INTERNET_MAX_URL_LENGTH".