You have two options: either get the weather data as XML, parse it yourself and construct your own design, or manipulate the raw HTML string itself, replacing desired images according to the image name with your own images.
I will give code sample for the second option. First of all, check the names of all possible icons (e.g. get weather for different cities with different weather until you got it all) and keep it. Then for each icon, get your own and save it in your server with the same name.
Having this, the following code should do the trick:
Sub ReplaceIcons(ByRef rawHTML)
Const imagesFolder = "images/"
Dim arrImageNames, arrTemp, x
Dim curSrc, y, curImageName
arrImageNames = Array("black_low_cloud.png", "cloudy_with_light_snow.png")
arrTemp = GetBetween(rawHTML, "src=", " ")
For x=0 To UBound(arrTemp)
curSrc = LCase(arrTemp(x))
If Right(curSrc, 3)="png" Then
For y=0 To UBound(arrImageNames)
curImageName = arrImageNames(y)
If InStr(curSrc, curImageName)>0 Then
rawHTML = Replace(rawHTML, "src=" & curSrc & " ", "src=""" & imagesFolder & curImageName & """ ")
End If
Next
End If
Next
Erase arrTemp
End Sub
Function GetBetween(str, leftDelimeter, rightDelimeter)
Dim tmpArr, result(), x
tmpArr=Split(str, leftDelimeter)
If UBound(tmpArr) < 1 Then
GetBetween=Array() : Exit Function
End If
ReDim result(UBound(tmpArr)-1)
For x=1 To UBound(tmpArr)
result(x-1)=(Split(tmpArr(x), rightDelimeter))(0)
Next
Erase tmpArr
GetBetween=result
End Function
This is just an example replacing two of the icons. In case the images on your server sit in a sub folder put that in imagesFolder
constant otherwise leave it empty. In arrImageNames
put all possible icons.
To use the above, just call it before returning the HTML:
'...
set objXML = nothing
set xmlhttp = nothing
Call ReplaceIcons(retStr)
getweather = retStr