ET疑难千寻千解丛书之EXCEL2010编程与实践 罗刚君 章兰新 黄朝阳 编著
疑难18
如何优化过程“获取外网IP地址” 以下代码可以获取本机的外网地址,如何对其简化、提速?
- Sub 查询外网IP()
- Dim xmlhttp As Object, strURL As String, i As Integer, j As Integer, IPStr
- As String
- '指定网址,该网具有获取IP的功能,本程序通过读取网页的数据来获取IP地址
- strURL = "http://www.ip138.com/ip2city.asp"
- Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
- '利用XMLHTTP对象获取网页数据
- xmlhttp.Open "GET", strURL, False '打开网页
- xmlhttp.send '获取信息
- IPStr = xmlhttp.responsetext '取得包括IP地址的网页代码
- '[a1] = IPStr
- If xmlhttp.Status = 200 Then
- i = InStr(IPStr, "[") '对
- j = InStr(IPStr, "]")
- [a1] = Mid$(IPStr, i + 1, j - i - 1)
- Else
- [a1] = xmlhttp.Status & IPStr
- End If
- Set xmlhttp = Nothing
- End Sub
复制代码è解决方案 以上过程中有过多的仅用一次的变量,可以进行简化。同时对字符中提取字符的算法过于繁杂,可以改用数组函数Split来取字符串。 í操作方法 步骤1
通过删除变量,以及借用Split代替Mid$取字符串,完整代码如下:
- Sub 查询外网IP2() '减少变量,改用 Split来取字符,从而简化代码,也可以提速
- With CreateObject("Microsoft.XMLHTTP")
- .Open "GET", "http://www.ip138.com/ip2city.asp", False
- .send
- If .Status = 200 Then
- '利用Split提取[之后的字符,再用Split取]之前的字符
- [a1] = Split(Split(.responsetext, "["](1), ")")(0)
- Else
- [a1] = .Status & .StatusText
- End If
- End With
- End Sub
复制代码步骤2
分别执行两段代码,可以获取本机外网IP地址。但第二个过程在书写和执行速度上均占优势。
============================= 以上摘自《EXCEL2010编程与实践》 |