ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ming668

[已解决] 如何用VBA取得局域网上的计算机名[有新探讨]

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-15 23:03 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他编程应用
原帖由 120HYH 于 2011-7-15 22:57 发表
也没产生BAT,TXT啊


啊,我想你的 ipconfig 应该也跟我的不同,也许连 myLAN 这个变量都拿不到,所以后面的全部命令都错了。
你在VBA的这两句
myLAN = Mid(myIP, 1, Len(myIP) - i) & "."
'MsgBox myIP & " - " & myLAN
下面加上
myLAN = "192.168.0."
试一下。

你要把VBA所有 fileobj.deletefile 开头的行注释掉

不然VBA会自动删除所有的.BAT .TXT

其实既然程序没有报错“拒绝访问”,那么就是已经生成了.TXT了

你要做的是看一下这些.TXT是不是保存了ping命令的结果

然后在VBA代码的读入所有TXT并提取IP,主机名的那一段调试修改了。

要么你把所有的 .BAT .TXT 打包上传我也可以帮你调试。

我自己两台电脑都可以用这个附件,不过都是中文版windows7。。。。。。

[ 本帖最后由 灰袍法师 于 2011-7-15 23:16 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-15 23:21 | 显示全部楼层
我是XP+EXCEL2003

TA的精华主题

TA的得分主题

发表于 2011-7-15 23:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大师看下,谢谢
QQ截图未命名.png

160秒获取局域网全部 主机名+IP+MAC - 兼容中英双语ping - 监测BAT运行结束.rar

118.28 KB, 下载次数: 53

TA的精华主题

TA的得分主题

发表于 2011-7-15 23:56 | 显示全部楼层
原帖由 120HYH 于 2011-7-15 23:27 发表
大师看下,谢谢


此附件已删除。

你也可以试一下28楼更新的附件,28楼附件不管是否截取了IP,都会把ping的关键行输出到D列。哪怕IP,主机名截取错了,你还可以看到整行。

[ 本帖最后由 灰袍法师 于 2011-7-24 00:08 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-16 08:38 | 显示全部楼层
测试结果:WINDOWS XP 中文
28楼附件:显示255个IP ,主机名称不对(显示:ing 0.2.168.192.in-addr.arpa),MAC有,关键行结果:"Pinging 0.2.168.192.in-addr.arpa [192.168.2.0] with 32 bytes of data:"

54楼附件:显示255个IP ,主机名称不对(显示:ing 0.0.168.192.in-addr.arpa),没有MAC。

[ 本帖最后由 ming668 于 2011-7-16 14:39 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-16 14:03 | 显示全部楼层
原帖由 ljw990485 于 2011-7-15 20:50 发表
以上讨论的方法有缺陷
1) 关闭本机某些服务,程序只能得到本机的IP
2) 目标机器有防火墙,拦击某些数据包,则这个程序无法发现目标机器
3)即使能用,但处理一个C类网段非常慢,无法忍受,象这样任务不重,但又要重复很多 ...


jw990485能否帮我看看18楼的问题和解答31楼的想法。
法师现在心思都放在"主机名+IP+MAC "上啦。

TA的精华主题

TA的得分主题

发表于 2011-7-16 16:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 ming668 于 2011-7-16 08:38 发表
测试结果:WINDOWS XP 中文
28楼附件:显示255个IP ,主机名称不对(显示:ing 0.2.168.192.in-addr.arpa),MAC有,关键行结果:"Pinging 0.2.168.192.in-addr.arpa [192.168.2.0] with 32 bytes of data:"

54楼附 ...


我的天,这个版本的 ping 输出结果也太怪异了吧,主机名前面为毛要有一串反过来的IP地址吖,而且带了域名arpa。。。。。。

算了,每个人自己根据自己的ping输出结果来修改VBA的截取代码吧,或者自己用公截取关键行吧,不可能兼容全部了。

我现在发现用批处理的最大缺点就是格式太多。。。。。。VBA的截取代码几乎不可能穷举这一切组合

而用API去ping的话,VBA又不支持多线程,ping 255个IP的速度会非常慢。

貌似用一个DLL去处理比较合理,不过又象牛刀杀鸡,批处理就能完成的事情,为毛要DLL吖。

1、我只想要得到计算机名,不要网络解释名,批处理要怎么改?
11楼的批处理改
echo !mac:~0,-1! !ip! !pcname! >>netnames.txt

echo !mac:~0,-1! !ip!>>netnames.txt

2,下拉框搜索一下论坛应该有好多了吧。

3,LANsee之类的网络扫描软件也可以获取IP,主机名,MAC,速度要比批处理快,问题是你还要人手导入EXCEL,或者加上AutoHotKey这样的自动点击软件,这又象牛刀杀鸡了。。。。。。

btw: 6楼附件已经更新。

其实我现在盘算的是:有无可能直接从路由器获取一切网络信息。。。。。。
如登录我自己的路由器,就可以获得

DHCP客户端表
主机名称 IP地址 MAC地址 终止时间  
iPhone-137 192.168.0.101 18:E7:F4:EB:0F:88 2 日 21 小时 5 分钟 10 秒  
Pan-PC 192.168.0.100 00:21:5D:59:82:48 从不
Shirley-PC 192.168.0.102 2C:81:58:E3:11:8E 从不

这只不过是从路由器的管理网页获取已知数据而已,比多线程扫描整个网络都要快多了!!!

[ 本帖最后由 灰袍法师 于 2011-7-16 17:22 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-16 17:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 灰袍法师 于 2011-7-16 16:35 发表


我的天,这个版本的 ping 输出结果也太怪异了吧,主机名前面为毛要有一串反过来的IP地址吖,而且带了域名arpa。。。。。。

算了,每个人自己根据自己的ping输出结果来修改VBA的截取代码吧,或者自己用公截取关 ...


法师说的是改(11楼)18楼的代码吧,18楼代码可以得到主机名+IP+MAC ,但太慢了要160秒,如果改了只要计算机名,应该还是很慢。

我只想要计算机名,用了法师前面所说方法,只用一句批处理net view>netnames.txt,再直接用法师6楼的VBA,只增加了去除“\\”
  1. Sub 按钮1_Click()
  2. Dim mybat, mytxt, myline, i As Long, j As Long, k As Long, arr
  3. mybat = "getnetname.bat"
  4. mytxt = "netnames.txt"
  5. ChDir ThisWorkbook.Path   '强制改变默认的工作目录
  6. Shell """" & ThisWorkbook.Path & "" & mybat & """"
  7. delay (6000) '延迟6秒
  8. Open ThisWorkbook.Path & "" & mytxt For Input As #1
  9. Range("a2:a" & Rows.Count).ClearContents
  10. i = 2
  11. Do While Not EOF(1)
  12.     Line Input #1, myline
  13.      myline = Replace(Trim(myline), "\", "")   '再加上去除"\"
  14.     arr = Split(myline, " ")
  15.     k = 0
  16.     For j = 0 To UBound(arr)
  17.         If Len(arr(j)) > 0 Then
  18.             k = k + 1
  19.             Cells(i, k).Value = arr(j)
  20.         End If
  21.     Next
  22.     i = i + 1
  23. Loop
  24. Close #1
  25. End Sub
复制代码
6秒钟可得到全部计算机名,
但多了前边三行和最后一行“命令成功完成。”,还有网络解释名。这个我不会去除,能给再改一下吗?

[ 本帖最后由 ming668 于 2011-7-16 17:18 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-16 17:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 ming668 于 2011-7-16 17:16 发表


法师说的是改(11楼)18楼的代码吧,18楼代码可以得到主机名+IP+MAC ,但太慢了要160秒,如果改了只要计算机名,应该还是很慢。

我只想要计算机名,用了法师前面所说方法,只用一句批处理net view>netnames ...


我说错了,是六楼

六楼现在的更新速度快(不用等6秒,直接检测BAT运行结束)

而且你按VBA的注释,就可以改为不要网络解释名。

[ 本帖最后由 灰袍法师 于 2011-7-16 17:23 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-16 17:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 灰袍法师 于 2011-7-16 17:20 发表


我说错了,是六楼

六楼现在的更新速度快(不用等6秒,直接检测BAT运行结束)

而且你按VBA的注释,就可以改为不要网络解释名。


我测了时间
6楼附件超快的,只要0.34375秒。完全符合我的要求。
从技术角度看,法师是否可试下一句的批处理net view>netnames.txt, 只要0.09375秒,就是多了前边三行和最后一行“命令成功完成。”,还有网络解释名,这个我不会处理。
另一个思路:只有一句DOS命令,是否可以直接Shell运行后将结果赋给一个数组,再从数组第三个数据取数,不取最后一行,不取网络解释名,再将数据赋给一个下拉框,嘿嘿!!只会想,不懂做
此贴9楼答案供法师参考:用SHELL调用DOS命令,如何得到DOS命令的返回值http://club.excelhome.net/thread-185905-1-1.html

[ 本帖最后由 ming668 于 2011-7-16 18:11 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-5 03:35 , Processed in 0.057055 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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