Keresés

Új hozzászólás Aktív témák

  • Mutt

    senior tag

    válasz DasBoot #54438 üzenetére

    Szia,

    Nem hinném hogy tud segíteni, de ez a makró megnézi a képleteket tartalmazó cellákat és próbál bennük hibát találni. Az eredményt az immediate ablakba írja ki.
    A CheckFormula függvényben 4 általános hiba ellenőrzés van:
    1) a képlet nem megfelelően kezdődik
    2) zárójelek nincsenek párban
    3) körkörös hivatkozás van a cellában
    4) a fájl hívatkozás érvénytelen

    Sub ListFormulas()
        Dim wsCurrent As Worksheet
        Dim rngFormula As Range
        
        For Each wsCurrent In ThisWorkbook.Worksheets
            With wsCurrent
                'nézzük elöször hogy van-e hibát tartalmazó cellát
                On Error Resume Next
                Set rngFormula = .Cells.SpecialCells(xlCellTypeFormulas, 16)
                On Error GoTo 0
                
                If Not rngFormula Is Nothing Then
                    Call PrintFormulas(rngFormula, 100)
                End If
                
                'nézzük a nem hibát tartalamazó cellákat
                On Error Resume Next
                Set rngFormula = .Cells.SpecialCells(xlCellTypeFormulas, 7)
                On Error GoTo 0
                
                If Not rngFormula Is Nothing Then
                    Call PrintFormulas(rngFormula, 100)
                End If
            End With
        Next wsCurrent
    End Sub

    Sub PrintFormulas(rng As Range, counter As Long)
        Dim r As Range, c As Long
        Dim keplet As String, hiba As String
        c = 1
        For Each r In rng
            keplet = r.Formula2
            hiba = CheckFormula(keplet, r.Address)
            
            If hiba <> "" Then
                Debug.Print "Hely: " & r.Parent.Name & r.Address & ", Hiba: " & hiba & ", Képlet: " & keplet
            End If
            c = c + 1
            
            If c > counter Then Exit For
        Next r
    End Sub

    Function CheckFormula(str As String, loc As String) As String
        CheckFormula = ""
        'nézzük hogy mivel kezdõdik a képlet
        If InStr(1, "=+-@", Left(str, 1)) = 0 Then CheckFormula = "Elsõ karakter hibás"
        
        'képletben párosával kell lennie a zárójeleknek
        Dim leftBracket
        leftBracket = Len(str) - Len(Replace(str, "(", ""))
        If Len(str) - Len(Replace(str, ")", "")) <> leftBracket Then CheckFormula = "Zárójel nincs párban"
        
        'körkörös hivatkozás: képletben saját cella hivatkozás nem lehet
        'hivatkozás lehet: A1, $A$1 formátumban, töröljük a $ jeleket az ellenõrzéshez
        If InStr(1, Replace(str, "$", ""), Replace(loc, "$", "")) > 0 Then CheckFormula = "Körkörös hivatkozás"
        
        'keressünk fájl hivatkozást a képletben
        Dim filePath As String
        If InStr(1, str, "[") > 0 Then
            filePath = Mid(str, 2, InStr(1, str, "]") - 1)
            
            'töröljük a [ ] ' jeleket
            filePath = Replace(Replace(Replace(filePath, "[", ""), "]", ""), "'", "")
                    
            'létezik a fájl?
            If Len(filePath) > 0 Then
                If (Dir(filePath) = "") Then CheckFormula = "Fájl nem létezik"
            End If
        End If
    End Function

  • Fferi50

    Topikgazda

    válasz DasBoot #54438 üzenetére

    Szia!
    Mi történik akkor, ha feloldod annak a cellának a rögzítését? (Apropó, hogyan rögzítetted?)
    Azt a képletet kellene megnézni, amiben ez a rögzített cella szerepel.
    Üdv.

Új hozzászólás Aktív témák