Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
880to884
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Formelkontrollmöglichkeit gesucht

VBA Formelkontrollmöglichkeit gesucht
24.06.2007 11:57:39
Jürgen Kanuft


Hallo Leute,
ich das prinzipielles Problem mit Excel das mal versehentlich und unbemerkt die Berechnungsformel einer Zelle überschrieben wird.
So ein Fehler ist bei tausenden von Zellen schlecht und nur eher zufällig zu finden.
Gibt es eine Funktion oder VBA-Programm um automatisch zu überprüfen, ob alle Zellen einer Spalte (ggf. bis zu einer definierten Endezeile oder- Zelle) die gleiche Berechnungsformel innerhalb einer Spalte nach der Z1S1- Bezugsart beinhalten?
Beispiel: soll-Formel für Spalte : C=A-B
A B C
4 =ZS(-2)-ZS(-1)
5 =ZS(-2)-ZS(-1)
6 =ZS(-3)-ZS(-2)
7 =ZS(-2)-ZS(-1)
die Formel in Zeile 6 entspricht nicht der Formel der Vorgängerzeile und sollte in irgendeiner Form gemeldet werden.
solche Fehler passieren z.B. wenn man irgendwo eine Zeile oder Spalte einfügt oder wenn man ein falsches Undo macht usw.
Was gibt es überhaupt sonst noch an Fehlerüberprüfungs-Tools für Excel?
Gruss
Jürgen

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 12:02:10
schauan
Hallo Jürgen,
wenn Du so was vermeiden willst dann arbeite mit dem Zellschutz.
Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003


AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 12:51:06
Jürgen Kanuft
Hallo schauan,
danke für den Hinweis.
der Zellschutz ist eigentlich nur anwendbar wenn die Mappe fertig ist.
da ich dauernd am Ändern bin ist das praktisch nicht verwendbar.
ich habe gerade den Formelüberwachungsmodus gefunden der primär schon mal solche Zellen markiert deren Formeln sich von umgebenden Zellen unterscheidet und die gefundenen Zellen markiert.
damit ist schon mal der komplizierte Teil des Problems Excel-intern erledigt.
nur muss man sich mit dieser Methode alles genau anschauen um nach möglichen Fehlern zu suchen, was bei umfangreichen Mappen mühlsahm und Fehleranfällig ist.
gibt es eventuell ein Tool das automatisch alle Blätter einer Mappe nach derart markieren Zellen durchsucht und einen Report gefundener Zellen schreibt?
Gruss
Jürgen

Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 13:05:06
schauan
Hallo Jürgen,
eine Liste aller Formeln bekommst Du z.B. mit diesem Tool:
http://www.excel-jeanie-html.de/html/down.php
Einfach alle Zellen markieren in denen Formeln sind. Die Liste kannst Du Dir dann im Browser anschauen.
Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003


AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 13:01:43
Gerd L
Hallo Jürgen!


Sub test()
Dim ersteZeile As Long, letzteZeile As Long, ersteSpalte As Integer, letzteSpalte As Integer
Dim i As Long, spalte As Integer, x As String
ersteZeile = 2
letzteZeile = 6
ersteSpalte = 3
letzteSpalte = 4
For spalte = ersteSpalte To letzteSpalte
x = Cells(ersteZeile, spalte).FormulaR1C1
For i = ersteZeile + 1 To letzteZeile
If Cells(i, spalte).FormulaR1C1 <> x Then
Cells(i, spalte).Interior.Color = vbYellow
End If
Next
Next
End Sub


Gruß Gerd

Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 14:25:13
Jürgen Kanuft
Hallo Gerd,
danke für die Routine.
könntest du mir noch eine Schleife über alle Blätter der gesammte Mappe drumrum legen?
ich danke dir schon im Voraus.
Gruss
Jürgen

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 14:39:32
Gerd L
Hallo Jürgen,
ungetestet. Guck dann mal ins Direktfenster im VBA-Editor.


Sub test2()
Dim ersteZeile As Long, letzteZeile As Long, ersteSpalte As Integer, letzteSpalte As Integer
Dim i As Long, spalte As Integer, x As String
Dim ws As Worksheet
ersteZeile = 2
letzteZeile = 6
ersteSpalte = 3
letzteSpalte = 4
For Each ws In ActiveWorkbook  '# oder ThisWorkbook
With ws
For spalte = ersteSpalte To letzteSpalte
x = .Cells(ersteZeile, spalte).FormulaR1C1
For i = ersteZeile + 1 To letzteZeile
If .Cells(i, spalte).FormulaR1C1 <> x Then
.Cells(i, spalte).Interior.Color = vbYellow
Debug.Print ws.Name & ":  " &  .Cells(i, spalte).Address
End If
Next
Next
End With
Next
End Sub


Gruß Gerd

Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 15:53:59
Jürgen Kanuft
Hallo Gerd
danke für die Anpassung.
der Debugger bleibt mit eine Fehlermeldung in der Zeile:
For Each ws In ActiveWorkbook '# oder ThisWorkbook
stehen, egal ob ActiveWorkbook oder ThisWorkbook.
Fehler:
Objekt unterstützt die Eigenschaft oder Methode nicht.
was muss ich ändern?
Gruss
Jürgen

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 16:21:25
Gerd L
Hui, sorry, das Fehlerteufelchen,
schreibe mal statt "ActiveWorkbook" "ActiveWorkbook.Worksheets"
Gruß Gerd :-)

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 16:55:40
Jürgen Kanuft
Hallo Gerd,
jetzt läuft es ohne Compiler-Murren.
nach welchen Kriterium aber die Zellen markiert werden ist auf den ersten Blick nicht klar ersichtlich.
ausserdem habe ich bemerkt das die starre Definition des Zellrechteckes bei meinen verschiedenen unterschiedlichen Seiten so nicht brauchbar ist.
wenn man in Excel des Formelüberwachungsmodus einschaltet markiert Excel in Frage kommende Zellen links oben mit einem kleinen grünen Dreieck; ist aber schlecht zu erkennen.
vielleicht könntest du die Routine so modifizieren das sie die Hintergrundfarbe solcher Zellen ändert die von Excel bereits markiert sind.
optimal wäre es zudem wenn die Routine eine Datei schreiben würde die für jede Zelle Blattnamen und Zellnamen in eine Zeile schreibt damit man die zweifelhaften Zellpositionen alle zusammen aufgelistet hat.
ich habe Blätter die je über 50 und mehr Bildschirmseiten gross sind,
und ich müsste sonst wie wild Blättern und Scrollen um nach markierten Zellen zu suchen.
Gruss
Jürgen

Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 17:45:55
ransi
HAllo Jürgen
Teste mal diesen Code:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Public Sub test()
Dim arr
Dim weg
Dim Blatt As Worksheet
Dim spalte As Range
Dim Zelle As Range
Dim Log
Dim SCR
Dim i As Integer
Dim A
Dim B
Set arr = CreateObject("Scripting.dictionary")
Set SCR = CreateObject("Scripting.filesystemobject")
Set Log = SCR.CreateTextFile("c:\testfile.log", True)
For Each Blatt In Worksheets
    For Each spalte In Blatt.Columns
        On Error Resume Next
        weg = arr.removeall
        For Each Zelle In spalte.SpecialCells(xlCellTypeFormulas)
            arr.Add Zelle.FormulaR1C1Local, Zelle.Address(External:=True)
        Next
        A = arr.keys
        B = arr.items
        For i = 0 To arr.Count
            Log.writeline A(i) & vbTab & B(i)
        Next
        On Error GoTo 0
    Next
Next
Log.Close
End Sub

Unterschiedliche Formeln in Spalten werden hier
c:\testfile.log
mit Adresse gelistet.
ransi

Anzeige
Kosmetik für die Log-Datei...
24.06.2007 18:24:06
ransi
Hallo
...kann nicht schaden:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Public Sub test()
Dim arr
Dim weg
Dim Blatt As Worksheet
Dim spalte As Range
Dim Zelle As Range
Dim Log
Dim SCR
Dim i As Integer
Dim A
Dim B
Set arr = CreateObject("Scripting.dictionary")
Set SCR = CreateObject("Scripting.filesystemobject")
Set Log = SCR.opentextfile("c:\testfile.log", 8, True)
Log.writeline vbCrLf & Format(Now, "DD.MM.YY hh:mm:ss")
For Each Blatt In Worksheets
    For Each spalte In Blatt.Columns
        On Error Resume Next
        weg = arr.removeall
        For Each Zelle In spalte.SpecialCells(xlCellTypeFormulas)
            arr.Add Zelle.FormulaR1C1Local, Zelle.Address(External:=True)
        Next
        A = arr.keys
        B = arr.items
        For i = 0 To arr.Count
            Log.writeline B(i) & vbTab & A(i)
        Next
        On Error GoTo 0
    Next
Next
Log.Close
End Sub

ransi

Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 18:26:46
Jürgen Kanuft
Hallo ransi,
sieht prinzipiell gut aus, nur habe ich die Funktionalität nicht zuende gedacht wie ich an hand der Logdatei sehe, die riesig gross ist:
es werden überwiegend Zellen angemeckert die eigentlich nicht gesucht sind.
die Routine müsste deshalb folgendermassen modifiziert werden damit eine für mich übersichtliche Logdatei entsteht:
1. statt der ZS Schreibweise im Ausdruck sollte doch besser die normale Schreibweise verwendet werden da mir diese Schreibweise ungewohnt ist um den Fehler zu erkennen;
2. der Ausdruck sollte nur für diejenigen Zeilen erfolgen, die im Bereich zwischen einem ">" und einem "<" in Spalte A liegen;
3. der Ausdruck sollte auch die Formeln der vorhergehenden und der nachfolgenden Zelle mit Ausdrucken
und diese 3-er Blöcke durch eine Leerzeile trennen,
damit man den Unterschied der Formel zu ihrer Umgebung besser enträtseln kann;
4. damit nicht in jeder Logdatei auch immer wieder gewollte und kontrollierte Formeländerungen aufgelistet werden, werde ich den Zellen, bei denen dies so richtig ist, eine andere Hinterfrundfarbe geben.
wenn also eine Zelle einer Spalte mit gewollten Formelunterschieden gefunden wird, die aber eine andere Hintergrundfarbe hat als ihre Vorgängerzelle,
dann soll sie NICHT mit in das Protokoll aufgenommenen werden.
Ich danke dir für deine Hilfe schon im Voraus.
Gruss
Jürgen

Anzeige
Beispieldateien ??
24.06.2007 19:39:19
ransi
Hallo Jürgen
Das sind zuviele Eventualitäten um das selber nachzubauen.
Da brauch man ja länger für als den Code zuschreiben.
Lade doch mal bitte eine xls-Beispieldatei und eine Textdatei hoch.
In der xls:
4-5 Blätter mit Formeln.
Die Zellen die nicht korrekt sind, bzw. welche in die Logdatei sollen markierst du in einer anderen Farbe.
In der Textdatei trägst du die fehlerhaften Zellen ein.
Dann wirds erheblich einfacher.
ransi

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 19:53:57
Jürgen Kanuft
Hallo ransi,
das ist mit meinen Mappen gar nicht nicht so einfach da sie untereinander verknüpft sind und ihre Daten verlieren wenn nicht alle Blätter zusammen sind.
ich versuche aber mal ein paar so zu modifizieren das sie laufen.
wie das mit dem Hochladen geht weiss ich aber nicht mehr.
gib mir mal einen Tipp wo das beschrieben ist.
Gruss
Jürgen

Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 20:33:57
Jürgen Kanuft
Hallo ransi,
ei ei ei ... 300kb ist aber arg wenig zu hochladen.
musste alles drastisch kürzen.
schau mal unter
https://www.herber.de/bbs/user/43527.xls
nach ob du damit etwas anfangen kannst.
ich habe in Blatt G_Disagio F in Zeile 53
und in Blatt E_Zinssätze-Naspa F inn Zeile 66
einige Fehler und Besonderheiten eingebaut.
Gruss
Jürgen

Anzeige
AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 21:33:20
Horst
Hi,
gehen die Geschäfte von jkSoft so schlecht, dass du das Forum zweckentfremdend
für dich ausbeuten musst?
Beauftrage einen Profi.
mfg Horst

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 21:36:11
Jürgen Kanuft
Hallo Horst,
was soll das jetzt?

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 21:59:11
Horst
Hi,
das Forum ist nicht dazu da, dir Lösungen zu bieten, mit denen du Geld verdienst.
Ich finde das peinlich.
mfg Horst

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 22:28:38
Jürgen Kanuft
ich finde das bekloppt !

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 22:43:10
Gerd L
Hallo!
Und ich fühle mich verarscht!
(Danke Horst! Gruß Gerd)

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 17:50:38
Gerd L
Hi Jürgen
nach welchen Kriterium aber die Zellen markiert werden ist auf den ersten Blick nicht klar ersichtlich.
Danach, ob die Formel mit der Formel der ersten Zelle des Spaltenbereichs (erstezeile) nicht übereinstimmt.
ausserdem habe ich bemerkt das die starre Definition des Zellrechteckes bei meinen verschiedenen unterschiedlichen Seiten so nicht brauchbar ist.
Es gibt Möglichkeiten, die erste relevante u. letzte relevante Zelle pro Spalte per Code zu ermitteln. Dies unterliegen allerdings bestimmten Anforderungen, d.h. Abgrenzungskriterien müssen eindeutig sein, z.B. bis zur letzten gefüllten Zelle der Spalte.
Wie kannst Du in deinem Fall unabhängig von der Zeilenzahl die erste u. letzte relevante Zelle u. erste u. letzte Spalte bestimmen? Kämst Du damit hin, dass z.B. entweder immer in Zeile 2 eine Formel steht oder
falls nein, in der jeweiligen Spalte keine Formel?
wenn man in Excel des Formelüberwachungsmodus einschaltet markiert Excel in Frage kommende Zellen links oben mit einem kleinen grünen Dreieck; ist aber schlecht zu erkennen. vielleicht könntest du die Routine so modifizieren das sie die Hintergrundfarbe solcher Zellen ändert die von Excel bereits markiert sind.
Leider ich nicht, da ich eine niedrigere Excel-Version habe, die dieses Feature nicht enthält.
Wie gedenkst Du dann Zellen „zwischendrin“ zu finden, bei denen die Formel irrtümlich gelöscht worden ist?
optimal wäre es zudem wenn die Routine eine Datei schreiben würde die für jede Zelle Blattnamen und Zellnamen in eine Zeile schreibt damit man die zweifelhaften Zellpositionen alle zusammen aufgelistet hat.
Ist machbar. Du müsstest noch mitteilen, wie viele „Formelfehler“ maximal angezeigt werden können sollen.Aber hast Du ins Direktfenster im Visual-Basic-Editor geschaut? Dort stehen solche Welche jetzt drin.
Reicht dies nicht ?
ich habe Blätter die je über 50 und mehr Bildschirmseiten gross sind,
und ich müsste sonst wie wild Blättern und Scrollen um nach markierten Zellen zu suchen.
Verstehe. Doch in Verbindung mit der "Liste", zur Zeit im Direktfenster des Editors, könnte die
Einfärbung ggf. als Ergänzung hilfreich sein.
Gruß Gerd

AW: VBA Formelkontrollmöglichkeit gesucht
24.06.2007 19:01:06
Jürgen Kanuft
Hallo Gerd
Hi Jürgen
nach welchen Kriterium aber die Zellen markiert werden ist auf den ersten Blick nicht klar ersichtlich.
Danach, ob die Formel mit der Formel der ersten Zelle des Spaltenbereichs (erstezeile) nicht übereinstimmt.

Dann habe ich mich falsch ausgedrückt:
ich meinte immer die jeweilige Relation zur Formel in der Vorgängerzelle der Spalte.
ausserdem habe ich bemerkt das die starre Definition des Zellrechteckes bei meinen verschiedenen unterschiedlichen Seiten so nicht brauchbar ist.
Es gibt Möglichkeiten, die erste relevante u. letzte relevante Zelle pro Spalte per Code zu ermitteln. Dies unterliegen allerdings bestimmten Anforderungen, d.h. Abgrenzungskriterien müssen eindeutig sein, z.B. bis zur letzten gefüllten Zelle der Spalte. Wie kannst Du in deinem Fall unabhängig von der Zeilenzahl die erste u. letzte relevante Zelle u. erste u. letzte Spalte bestimmen? Kämst Du damit hin, dass z.B. entweder immer in Zeile 2 eine Formel steht oder falls nein, in der jeweiligen Spalte keine Formel?

zum Eingrenzen der zu kontrollierenden Zeilen habe ich mich für Zeichen in Spalte A entschieden:
">" für den Beginn ab der übernächsten Zeile
(die erste Zeile danach enthält die erste Formel und ist damit immer anders als die vorhergehende Zeile!)
"<" für das Ende der Kontrolle
es können aber mehrere zu kontrollierende Zeilenblöcke auf einer Seite vorhanden sein!
wenn man in Excel des Formelüberwachungsmodus einschaltet markiert Excel in Frage kommende Zellen links oben mit einem kleinen grünen Dreieck; ist aber schlecht zu erkennen. vielleicht könntest du die Routine so modifizieren das sie die Hintergrundfarbe solcher Zellen ändert die von Excel bereits markiert sind.
Leider ich nicht, da ich eine niedrigere Excel-Version habe, die dieses Feature nicht enthält.

vielleicht findest du oder jemand mit einer höheren Excelversion ja eine Möglichkeit ich ich dann mei mir ausprobieren könnte.
wäre aber optimal wenn das Programm alternativ beide Kontrollmöglichkeiten realisieren könnte.
Wie gedenkst Du dann Zellen „zwischendrin“ zu finden, bei denen die Formel irrtümlich gelöscht worden ist?
indem sie keine Formel enthält obwohl ihr Vorgänger und ihr Nachfolger gleiche Formeln enthalten.
Das Problem dürfte sich aber durch die > < Abgrenzung erübrigen.
optimal wäre es zudem wenn die Routine eine Datei schreiben würde die für jede Zelle Blattnamen und Zellnamen in eine Zeile schreibt damit man die zweifelhaften Zellpositionen alle zusammen aufgelistet hat.
Ist machbar. Du müsstest noch mitteilen, wie viele „Formelfehler“ maximal angezeigt werden können sollen.

alle. Die Datei kann endlos gross sein.
Aber hast Du ins Direktfenster im Visual-Basic-Editor geschaut? Dort stehen solche Welche jetzt drin.
Reicht dies nicht ?

ich kenne VBA zu wenig um zu wissen was du damit meinst.
ich habe Blätter die je über 50 und mehr Bildschirmseiten gross sind,
und ich müsste sonst wie wild Blättern und Scrollen um nach markierten Zellen zu suchen.

Verstehe. Doch in Verbindung mit der "Liste", zur Zeit im Direktfenster des Editors, könnte die Einfärbung ggf. als Ergänzung hilfreich sein.

ransi hat unter diesem Thread mittlerweile auch eine Routine geschrieben die das mit dem Schreiben in eine Datei macht, allerdings noch nicht ganz optimal für mich wie erst der 1. Versuch gezeigt hat
und ohne die Zellen in den Blättern durch Änderung der Hintergrundfarbe zu markieren.
diese Möglichkeit möchte ich mir als Option im Programm offen halten,
macht aber letztlich eventuell zusätzliche Arbeit um bei diesen Zellen danach wieder manuell die Hintergrundfarbe zurück geändert werden muss.
Da die Routine von ransi prinzipiell funktioniert wäre es vielleicht vorteilhafter dessen Routine ggf. so zu ändern das sie für mich optimal ist statt eine weitere Routine neu zu entwickeln; ich habe dort auch noch weitere Änderungswünsche und Nebenbedingungen beschrieben um bei mehreren Kontrollen hintereinander nicht immer wieder die gleichen, aber doch richtigen Zellpositionen gemeldet zu bekommen.
Gruss
Jürgen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige