使用VBA处理网络信息
Posted dawn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用VBA处理网络信息相关的知识,希望对你有一定的参考价值。
在日常的网络管理中,经常遇到IP所属地(位置)的判断,比如出现了某些IP地址出现了问题,需要通知具体单位去找到该IP然后处理。
这样需要规划好具体的网络,划好VLAN,然后根据IP地址(或者网关地址)和子网掩码的运算找到这个IP所属的单位。
1、根据IP地址(子网掩码)和网关地址获取网络地址
Sub GeTNetInfo()
Dim SrcTable As String
Dim iFor As Integer
Dim K As Integer
Dim AllRecord As Integer
Dim SubnetMask As String
Dim SubnetMaskArr() As String
Dim GatewayAddress As String
Dim GatewayAddressArr() As String
Dim NetInfo(3) As String
Dim NetAddress As String
SrcTable = "sheet1"
AllRecord = 43
For iFor = 2 To AllRecord
Sheets(SrcTable).Activate
Range("C" + Trim(Str(iFor))).Select
GatewayAddress = Selection.FormulaR1C1
GatewayAddressArr = Split(GatewayAddress, ".")
Range("D" + Trim(Str(iFor))).Select
GatewayAddress = UCase(Selection.FormulaR1C1)
SubnetMask = Selection.FormulaR1C1
SubnetMaskArr = Split(SubnetMask, ".")
If SubnetMask <> "" Then
For K = 0 To 3
NetInfo(K) = Str(CInt(GatewayAddressArr(K)) And CInt(SubnetMaskArr(K)))
Next K
NetAddress = Join(NetInfo, ".")
'NetAddress = Str(NetInfo(0)) & "." & Str(NetInfo(1)) & "." & Str(NetInfo(2)) & "." & Str(NetInfo(3))
Range("B" + Trim(Str(iFor))).Select
Selection.FormulaR1C1 = NetAddress
End If
Next iFor
End Sub
实际的运用中,网络信息(网络地址和所属单位)可以放在另外一个Sheet中,然后通过对比就可以快速找到这个IP地址属于哪个单位了。
写一个函数就更方便了。
2、通过正则表达式获取子网掩码和网关信息
VRV中提取了网卡信息,是一个字符串,现在需要提取其中的子网掩码和网关信息,可以使用VBA的正则表达式来快速获取。
Public Function GetNetInfo(StrNetInfo As String) As Variant
Dim regex As Object
Dim matches As Object
'创建正则表达式对象
Set regex = CreateObject("VBScript.RegExp")
'设置正则表达式模式
regex.Pattern = "子网掩码:(\\d1,3\\.\\d1,3\\.\\d1,3\\.\\d1,3),默认网关:(\\d1,3\\.\\d1,3\\.\\d1,3\\.\\d1,3)"
'执行匹配操作
Set matches = regex.Execute(StrNetInfo)
'输出匹配结果
If matches.Count > 0 Then
GetNetInfo = Array(matches(0).SubMatches(0), matches(0).SubMatches(1))
Else
GetNetInfo = Array(0, 0)
End If
End Function
测试代码:
Sub test()
Dim str As String
Dim tt As Variant
str = "网卡信息:MAC地址:F12F34A566D9,IP地址:13.92.120.123,子网掩码:255.255.255.224,默认网关:13.92.120.254,首选DNS:13.92.120..11,备用DNS:13.92.120..12"
tt = GetNetInfo(str)
MsgBox "子网掩码:" & tt(0) & "|""默认网关:" & tt(1)
End Sub
Word VBA查找某种颜色的文本并在其前面插入一个空格
我是MS Word中的VBA新手,对Excel中的VBA只有一点感觉。
我正在尝试处理一个Word文件,其中包含许多单词附加的特殊信息。通过改变文本的颜色,大小和位置来传达信息,但是在单词和信息之间没有空格。
为了进行其他处理,我需要在信息文本和实际单词之间添加一个空格:
使用VBA我能够通过颜色找到信息文本,使用here描述的方法略有不同。我可以用“Test”替换它。但我想要做的是用空格和信息文本替换它。或者也许只是在信息文本之前神奇地插入一个空格。
想法?
这段代码:
Sub ChangeColorWithReplace()
Selection.Find.ClearFormatting
Selection.Find.Font.Color = RGB(120, 48, 191)
Selection.Find.Replacement.ClearFormatting
'Selection.Find.Replacement.Font.Color = wdColorRed
With Selection.Find
.Text = ""
.Replacement.Text = "test"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
产生这个结果:
Word的查找/替换功能的一个巧妙之处在于您可以使用特殊字符来执行此类操作。单击“更多”按钮,“特殊”查看列表。
在这种情况下,您想要的是保留替换中的“查找文本”,即字符集:^&我已添加到您的示例代码中,如下所示。
Sub ChangeColorWithReplace()
Selection.Find.ClearFormatting
Selection.Find.Font.Color = RGB(120, 48, 191)
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = "^&test"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
以上是关于使用VBA处理网络信息的主要内容,如果未能解决你的问题,请参考以下文章