Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3502|回复: 4

[VBA] 018-优化“获得外网IP”-疑难千寻千解丛书(VBA)

[复制链接]
发表于 2011-1-28 14:59 | 显示全部楼层 |阅读模式
ET疑难千寻千解丛书之EXCEL2010编程与实践
罗刚君 章兰新 黄朝阳 编著

疑难18
如何优化过程“获取外网IP地址”
以下代码可以获取本机的外网地址,如何对其简化、提速?

  1. Sub 查询外网IP()
  2.   Dim xmlhttp As Object, strURL As String, i As Integer, j As Integer, IPStr
  3.   As String
  4.   '指定网址,该网具有获取IP的功能,本程序通过读取网页的数据来获取IP地址
  5.   strURL = "http://www.ip138.com/ip2city.asp"
  6.   Set xmlhttp = CreateObject("Microsoft.XMLHTTP")  
  7.   '利用XMLHTTP对象获取网页数据
  8.   xmlhttp.Open "GET", strURL, False  '打开网页
  9.   xmlhttp.send    '获取信息
  10.   IPStr = xmlhttp.responsetext  '取得包括IP地址的网页代码
  11.   '[a1] = IPStr
  12.   If xmlhttp.Status = 200 Then
  13.     i = InStr(IPStr, "[")  '对
  14.     j = InStr(IPStr, "]")
  15.     [a1] = Mid$(IPStr, i + 1, j - i - 1)
  16.   Else
  17.     [a1] = xmlhttp.Status & IPStr
  18.   End If
  19.   Set xmlhttp = Nothing
  20. End Sub
复制代码
è解决方案
以上过程中有过多的仅用一次的变量,可以进行简化。同时对字符中提取字符的算法过于繁杂,可以改用数组函数Split来取字符串。
í操作方法
步骤1
通过删除变量,以及借用Split代替Mid$取字符串,完整代码如下:

  1. Sub 查询外网IP2() '减少变量,改用 Split来取字符,从而简化代码,也可以提速
  2.   With CreateObject("Microsoft.XMLHTTP")
  3.     .Open "GET", "http://www.ip138.com/ip2city.asp", False
  4.     .send
  5.     If .Status = 200 Then
  6.       '利用Split提取[之后的字符,再用Split取]之前的字符
  7.       [a1] = Split(Split(.responsetext, "["](1), ")")(0)
  8.     Else
  9.       [a1] = .Status & .StatusText
  10.     End If
  11.   End With
  12. End Sub
复制代码
步骤2
分别执行两段代码,可以获取本机外网IP地址。但第二个过程在书写和执行速度上均占优势。

=============================
上摘自《EXCEL2010编程与实践》
 楼主| 发表于 2011-1-28 14:59 | 显示全部楼层
回复

使用道具 举报

发表于 2011-1-28 15:43 | 显示全部楼层
回复

使用道具 举报

发表于 2011-1-28 16:27 | 显示全部楼层
太复杂了 收藏慢慢学
回复

使用道具 举报

发表于 2011-4-9 21:24 | 显示全部楼层
{:011:}{:011:}{:011:}{:011:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-1 18:34 , Processed in 0.181083 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表