Ваш код сложен без видимой причины.Например, почему макрос открывает книгу «C: \ Server-List-by-Switch.xlsx», а не сидит внутри?
Я не знаю, что Wscript.Echo
делает, так что использовал Debug.Printдля вывода в Immediate Window.Я не фанат наличия трехсимвольного идентификатора в начале каждой переменной.Но если они используются, они должны быть правильными.Поэтому я думаю, objFile
в порядке, потому что это объект, но objHostName
неверен, потому что это строка.
Я упростил ваш код, но сохранил структуру.Это означает, что этот код не может создать строку вывода server4-foo.fqdn.com Unknown interface type: Other.
, поскольку ваш код проверяет таблицу Excel, а не текстовый файл.Код может быть повторно упорядочен, но вам необходимо уточнить характер данных.
У меня есть рабочая таблица «Сервер-список-за-коммутатором» в рабочей книге.Он содержит:
| A | B |
1 | Name | Intf type |
2 | Switch-1 | |
3 | SERVER1 | Production|
4 | SERVER2 | OOB |
5 | Switch-2 | |
6 | SERVER3 | Production|
7 | SERVER4 | Other |
Вывод макроса:
Switch Name: Switch-1
Interface name: server1-prod.fqdn.com - IP Address: 192.168.0.10
Interface name: server2-oob.fqdn.com - IP Address: 192.168.0.13
Switch Name: Switch-2
Interface name: server3-prod.fqdn.com - IP Address: 192.168.0.14
SERVER4 has an unknown interface type: Other
, который настолько близок, насколько я могу получить без повторного упорядочения кода.
Option Explicit
Sub GenIPAddressReport()
Dim arrList() As String
Dim FQDN As String
Dim FQDNPart() As String
Dim HostName As String
Dim IntfType As String
Dim intRow As Long
Dim IPAddress As String
Dim Line As Variant
Dim LinePart() As String
Dim objFile As Object
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(ActiveWorkbook.Path & "\FQDN-and-IP.txt")
arrList = Split(objFile.ReadAll(), vbCrLf)
objFile.Close
Set objFile = Nothing
'For Each Line In arrList
' Debug.Print Line
'Next
intRow = 2
With Worksheets("Server-List-by-Switch")
Do Until .Cells(intRow, 1).Value = ""
HostName = .Cells(intRow, 1).Value
IntfType = .Cells(intRow, 2).Value
If InStr(1, HostName, "Switch-") > 0 Then
Debug.Print "Switch Name: " & HostName
ElseIf InStr(1, HostName, "Switch-") = 0 And _
InStr(1, IntfType, "Production") > 0 Then
For Each Line In arrList
FQDN = LCase(HostName & "-prod.fqdn.com")
LinePart = Split(LCase(Line), " ")
If FQDN = LinePart(0) Then
Debug.Print "Interface name: " & LinePart(0) & _
" - IP Address: " & LinePart(UBound(LinePart))
Exit For
End If
Next
ElseIf InStr(1, HostName, "Switch-") = 0 And _
InStr(1, IntfType, "OOB") > 0 Then
For Each Line In arrList
FQDN = LCase(HostName & "-oob.fqdn.com")
LinePart = Split(LCase(Line), " ")
If FQDN = LinePart(0) Then
Debug.Print "Interface name: " & LinePart(0) & _
" - IP Address: " & LinePart(UBound(LinePart))
Exit For
End If
Next
Else
Debug.Print HostName & " has an unknown interface type: " & IntfType
End If
intRow = intRow + 1
Loop
End With
End Sub