ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-4 17:04 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他编程应用
我公司的的局域网是域管理的,我怎么才能用VBA取得局域网上的活动的计算机名,并把它放在EXCEL的指定单元格(每个一格)
能否可用DOS命令去取得结果,再把结果放到单元格中。我记得论坛上有人能做到把DOS命令的结果取出来,5楼有批处理代码。

谢谢灰袍法师的热心回答,本问题答案在6楼、61楼、69楼。
答案后还有法师关于主机名+IP+MAC 更深入的研究,还有很多值得学习的知识!


[ 本帖最后由 ming668 于 2011-7-19 10:41 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-5 13:34 | 显示全部楼层
高手出来帮忙啊!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-6 09:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
还没有人出手吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-7 11:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-7 17:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
追加思路
下列批处理可以做到,能否利用到VBA中呢?
  1. ::原理介绍:先通过net view命令获取局域网的所有计算机
  2. ::(无法查询没有安装netbios协议的计算机);再ping这些计算机(ping不通也没关系)
  3. ::然后查arp缓存。
  4. ::code by youxi01@bbs.bathome.net 2008-1-7
  5. @echo off &setlocal enabledelayedexpansion
  6. title 局域网空闲IP查询@bbs.bathome.net
  7. Rem '/*========获取本机的IP地址(局域网)=========*/
  8. echo 正在获取本机的IP地址,请稍等...
  9. for /f "tokens=3 skip=2 delims=: " %%i in ('nbtstat -n') do (
  10.      set "IP_addr=%%i"
  11.      set IP_addr=!IP_addr:~1,-1!
  12.      echo 本机IP为:!IP_addr!
  13.      goto :next
  14. )

  15. :next
  16. for /f "delims=. tokens=1,2,3,4" %%i in ("%IP_addr%") do set IP_fd=%%i.%%j.%%k
  17. Rem '/*========获取计算机名============*/
  18. echo.&echo 正在获取局域网内计算机名,请稍等...
  19. echo 处于网段 %IP_fd%.* 的计算机有:&echo.
  20. for /f "delims=" %%i in ('net view') do (
  21.      set "var=%%i"
  22.      rem ----------获取计算机名称------------
  23.      if "!var:~0,2!"=="\" (
  24.           set "var=!var:~2!"
  25.           echo !var!
  26.           Rem ----------ping计算机名--------------
  27.           ping -n 1 !var!>nul
  28.     )
  29. )
  30. echo.&echo -----------------------------
  31. Rem '/*========提取arp缓存=========*/
  32. echo.&echo 正在获取局域网内计算机IP,请稍等...& echo.
  33. for /f "skip=3 tokens=1,* delims= " %%i in ('arp -a') do echo IP: %%i 已经使用

  34. echo.&echo -----------------------------
  35. echo 程序完成,谢谢使用!
  36. pause>nul
复制代码
下面代码也能实现
  1. @echo off
  2. @echo 中小网络在线IP分布情况>1.txt

  3. setlocal ENABLEDELAYEDEXPANSION

  4. @FOR /F "usebackq delims=, " %%J IN (`net view /domain ^|find "命令執行成功" /v ^|find "The command completed successfully." /v ^|find "命令成功完成" /v ^|find "--" /v ^|find "Domain" /v ^|find "" /v ^|find "コマンドは正常に終了しました" /v /i`) do (

  5. @echo =====domain:%%J========>>1.txt
  6. @echo =====domain:%%J========

  7. @FOR /F "usebackq eol=; delims=, " %%i in (`net view /domain:%%J ^|findstr "\"`) DO (

  8. @FOR /F "usebackq eol=; tokens=1,2,3* delims=\" %%a in (`echo %%i`) do (

  9. @FOR /F "tokens=1,2,3,4* usebackq delims=: " %%K IN (`@ping -a -n 1 -w 100 %%a ^|findstr "Pinging"`) do (

  10. @echo \\%%L %%M>>1.txt
  11. @echo \\%%L %%M

  12. )

  13. )

  14. )

  15. )

  16. echo %0
  17. pause "按任意键退出"
复制代码
我记得论坛上有人能把DOS命令的结果取出放到VBA中

注:以上代码来自批处理之家

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

TA的精华主题

TA的得分主题

发表于 2011-7-7 23:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如附件,需要.xls和.bat两个文件

原附件没有考虑延时等待 .bat 的运行结果,附件已修改

再次根据楼主在18楼的提示,增加改变命令行当前工作路径的VBA代码,防止找不到BAT生成的TXT文件

再次根据28楼的技巧,VBA监测BAT的运行,这样就不需要等10秒了

更强的方法在28楼。

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

列出局域网的计算机名 - 监测BAT结束并防止目录空格.rar

11.43 KB, 下载次数: 526

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-8 09:23 | 显示全部楼层
原帖由 灰袍法师 于 2011-7-7 23:18 发表
如附件,需要.xls和.bat两个文件


这一句出错:文件未找到
Open ThisWorkbook.Path & "\" & mytxt For Input As #1
好象是批处理未运行,先执行一下批处理,再执行VBA就可以了。
还有,能否处理掉右边的空格。(不要去掉所有空格,因为计算机名有可能中间有空格)

[ 本帖最后由 ming668 于 2011-7-8 09:38 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-8 18:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
已更正并加入去空格,请重新下载

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-10 11:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 灰袍法师 于 2011-7-8 18:21 发表
已更正并加入去空格,请重新下载

谢谢!空格的问题解决了!
但还是这一句出错:文件未找到
Open ThisWorkbook.Path & "\" & mytxt For Input As #1
貌似Shell执行批处理的路径问题,TXT文件还是不能生成,直接执行批处理能得到TXT文件。
下面有相关参考,我试了还不行,给楼上的参考一下。
http://hi.baidu.com/xiaonan33309 ... ca3c4efaf2c0ee.html
http://club.excelhome.net/redire ... amp;goto=nextoldset
http://www.officefans.net/cdb/viewthread.php?tid=87252

[ 本帖最后由 ming668 于 2011-7-10 15:21 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-7-10 16:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你把 delay(10000) 增加为 delay(30000)

也就是延时30秒吧

也许你的局域网机器多,bat文件需要运行较长时间

你自己估计一下单独运行.bat要多长时间,然后把VBA的延时改为大于这个时间。

[ 本帖最后由 灰袍法师 于 2011-7-10 16:38 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 02:45 , Processed in 0.056397 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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