ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-16 18:40 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他编程应用
原帖由 ming668 于 2011-7-16 17:37 发表
我测了时间
6楼附件超快的,只要0.34375秒。完全符合我的要求。
从技术角度看,法师是否可试下一句的批处理net view>netnames.txt, 只要0.09375秒,就是多了前边三行和最后一行“命令成功完成。”,还有网络解 ...


那个BAT也可以改为
@echo off &setlocal enabledelayedexpansion
echo. > netnames.txt
for /f "tokens=1" %%1 in ('net view') do  (
      set "var=%%1"
      if "!var:~0,2!"=="\\" (
           set "var=!var:~2!"
           echo !var! >>netnames.txt
     )
)
这样它的输出结果就去掉网络解释名了,关键是 tokens=1 ,意思是只保留每行的第一段字符串,默认为被空格分割。

用你给的链接 figfig 所用的 wsscript.shell方法去调用BAT是可以的,而且比较方便,可以直接把输出结果给VBA的字符串变量

应该节约内存,但也还是要自己去截取IP,主机名。

而且.Exec方法虽然可以返回一个VBA可以访问的对象,但是不能同时执行255个 ping,所以没用

.Run方法倒是可以同时执行 255个 ping,不过没法把结果传递给VBA

奇怪的是,.Exec方法也不能调用 net view 命令,只能间接执行BAT去调用。

不知道附件是不是你要的东东。

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

用Wscript.Shell对象调用getnetname..rar

9.03 KB, 下载次数: 153

TA的精华主题

TA的得分主题

发表于 2011-7-17 18:27 | 显示全部楼层
原帖由 灰袍法师 于 2011-7-16 16:35 发表


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

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


那是dns服务器访反解的结果

TA的精华主题

TA的得分主题

发表于 2011-7-17 23:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 ljw990485 于 2011-7-17 18:27 发表
那是dns服务器访反解的结果


哦,thank you

看来靠ping命令要面对的格式问题太多了。

TA的精华主题

TA的得分主题

发表于 2011-7-18 06:35 | 显示全部楼层
法师的又一大作品么。。 真不错。
感谢分享作品了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-18 09:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 灰袍法师 于 2011-7-16 18:40 发表
那个BAT也可以改为
@echo off &setlocal enabledelayedexpansion
echo. > netnames.txt
for /f "tokens=1" %%1 in ('net view') do  (
      set "var=%%1"
      if "!var:~0,2!"=="\\" (
           set ...

1、法师6楼和61楼的附件都符合我最初问题的愿意,速度也很快,我最初也是想通过数据有效性做下拉框,后来我是想能否做到直接赋值给一个下拉框控件(应该叫复合框吧),可能是我没说清楚,不过做学生的也不能什么都问,我还是先找一找,思考思考不行再问老师,再次谢谢法师。
2、我用figfig所用的方法能够直接调用net view ,不用批处理,并且能够用MSGBOX得到结果。只是结果好象没有全部显示出来。
代码如下:
  1. Sub Sample1()
  2.     Dim WSH, wExec, sCmd As String, Result As String
  3.     Set WSH = CreateObject("WScript.Shell")
  4.     Set wExec = WSH.Exec("net view")
  5.     Result = wExec.StdOut.ReadAll
  6.     MsgBox Result
  7.     Set wExec = Nothing
  8.     Set WSH = Nothing
  9. End Sub
复制代码

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

TA的精华主题

TA的得分主题

发表于 2011-7-18 15:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 ming668 于 2011-7-18 09:45 发表
Result = wExec.StdOut.ReadAll
MsgBox Result


显示不全是什么意思???

你在 MsgBox Result 这一行按F9,程序就会在这一句暂停,把result这个单词高亮并拖拉入监视窗口,就可以看到result里面的内容

用监视窗口可以很方便地调试你的程序。

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-18 17:50 | 显示全部楼层
原帖由 灰袍法师 于 2011-7-18 15:37 发表


显示不全是什么意思???

你在 MsgBox Result 这一行按F9,程序就会在这一句暂停,把result这个单词高亮并拖拉入监视窗口,就可以看到result里面的内容

用监视窗口可以很方便地调试你的程序。


按照法师的指导,套用了apollokk 的函数,我成功的把计算机名放入了复合框控件,但还有点问题没能解决。
代码如下:
  1. Private Sub UserForm_Initialize()
  2. Dim WSH, wExec, sCmd As String, Result  As String
  3.     Dim Upper
  4.     Set WSH = CreateObject("WScript.Shell")
  5.     Set wExec = WSH.Exec("net view")
  6.     'delay (7000)
  7.     Result = wExec.StdOut.ReadAll
  8. Upper = myReplace(Result)               '先用正则表达式把多个空白符处理成一个,再Split
  9. Upper = Split(Upper)
  10. Set wExec = Nothing
  11. Set WSH = Nothing
  12. ComboBox1.List = Upper
  13. End Sub
复制代码

  1. Function myReplace(ByVal s As String) As String
  2.      'apollokk写的函数
  3.     '将字符串中的多个连续空白符成一个
  4.     '调用:str=myReplace(ostr)
  5.     myReplace = ""
  6.     With CreateObject("VBSCRIPT.REGEXP")
  7.         .Global = True
  8.         .IgnoreCase = True
  9.         .Pattern = "\s+"           '查找空白字符,空格、制表符什么的
  10.         myReplace = .Replace(s, " ")
  11.     End With
  12. End Function
复制代码
最后的结果就是数组中下列多余的数据不知怎么去掉。
1、服务器名称
2、注释
3、-----------------------
4、网络解释名(有多个)
5、\\
6、命令成功完成
能否再帮忙解决下吗?

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

TA的精华主题

TA的得分主题

发表于 2011-7-18 18:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-7-18 18:44 | 显示全部楼层
这个附件直接运行 net view ,不再需要bat了

但是要自己写代码处理 提取主机名 的工作。

Wscript.Shell对象调用外部程序 net view 获得主机名..rar

10.07 KB, 下载次数: 233

TA的精华主题

TA的得分主题

发表于 2011-7-18 20:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
要是能得到IP,MAC最好了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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