Üdv,
Írtam egy Excel makrót, ami azt csinálja, hogy kiválasztható txt fájlokban (tk. az ipconfig parancsok kimenetei több gépről) megkeresi és egy Excel munkafüzetbe illeszti az IP és MAC címeket. Van egy kis keresgélés, mert több kártya is lehet, de néhány közülük "disconnected". Ha megvan az elsődleges kártya, további kettőt is meg kell nézni, hogy léteznek-e. Az egész ciklusban van.
A makró kicsit kezdetleges, de (majdnem) működik: az első fájlt jól feldolgozza, de a másodiknál "Run-time error 91, Object variable or With block variable not set" hibával kiakad az első keresés parancson, még mielőtt bármit is keresne.
Ez mitől lehet? Mit csináljak, hogy 0-ról kezdje másodjára is?
Itt a kód részlet: (azért hosszú, hogy érthetőbb legyen, bocs)
mdata = Array( "IP Address. . . . . . . . . . . . :", _
"Physical Address. . . . . . . . .:”, _
"IP Address. . . . . . . . . . . . :", _
"Physical Address. . . . . . . . .:”, _
"IP Address. . . . . . . . . . . . :", _
"Physical Address. . . . . . . . .:”)
ipdata = Array("Local Area Connection:", _
"Local Area Connection 2:", _
"Local Area Connection 3:", _
"Local Area Connection 4:", _
"Local Area Connection", _
"Ethernet adapter Prod", _
"Ethernet adapter OOB", _
"Ethernet adapter")
' *** Az ip file-ok megnyitása
Dim sFname As Variant
Dim i As Long
sFname = Application.GetOpenFilename(FileFilter:="Text Files (*.txt), *.txt", MultiSelect:=True)
If IsArray(sFname) Then
For i = LBound(sFname) To UBound(sFname)
Workbooks.Open sFname(i)
n = ActiveWorkbook.Name
v = 0
For h = 0 To 5
On Error GoTo nemtalalt
Range("A1").Select
ipkeres:
Cells.Find(What:=ipdata(v), After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
rr = ActiveCell.Row
On Error GoTo disconnect
Range("A" & rr).Select
Cells.Find(What:="Media disconnected", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
rrmd = ActiveCell.Row
On Error GoTo hiba
If rrmd < rr Or rrmd > rr + 5 Then ' Ha nem a megtalált kártyára vonatkozik a disconnected
Range("A" & rr).Select ' Vissza a megtalálthoz
Else ' Ha a megtalált kártya disconnected
Range("A" & rr + 1).Select ' Új keresés egy sorral lentebbről.
If v < 7 Then
v = v + 1
End If
GoTo ipkeres
End If
Cells.Find(What:=mdata(h), After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Replace What:=mdata(h), Replacement:="", LookAt:=xlPart _
, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
beir(h) = ActiveCell.Value
beir(h) = LTrim(RTrim(beir(h)))
If (h = 2 or h = 4 or h = 6) And v < 7 Then ' Amikor az IP-t és a MAC-t is kiolvastuk
v = v + 1
Range("A" & rr).Select
ActiveCell.ClearContents
End If
Next h
feltolt:
Windows(n).Activate
ActiveWorkbook.Close False
’*******************************************
’ Itt van a beíró rész…
’*******************************************
Next i
End If
GoTo vege
hiba:
'MsgBox "Valami hiba van! "
Resume Next
nemtalalt:
'MsgBox "idejött h: " & h & " v: " & v & ipdata(v)
If v < 7 Then
v = v + 1
Else
beir(h) = ""
GoTo feltolt
End If
Resume
disconnect:
Range("A" & rr + 6).Select
Resume Next
vege: