zylo. Creative Commons License 2012.07.06 0 0 18211

Ü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: