VBA - Laufzeitfehler 5 - Ungültiger Prozeduraufruf oder ungültiges Argument
#1
Hallo,

da sich ja die Zellbereiche für "wird angewendet auf" bei den bedingten Formatierungen, immer wieder aufblähen, habe ich die Bedingten Formatierungen unserers Abteilungskalenders in VBA-Makros gepackt. Dies auch 2-sprachig für die Anzeigesprachen "Deutsch" und "Englisch",da bei uns die meisten Kollegen mit der Anzeigesparache "Englisch" arbeiten.

Das Makro wird immer automatisch ausgeführt, wenn beim sichern der Mappe festgestellt wird, dass es Änderungen (Workbook - BeforeSave Abfrage: If ThisWorkbook.Saved = "False" Then ...) gab.

Bei den meisten der Kollegen, wir haben alle Office365 installiert, läuft das, bzw. diese Makros auch problemlos.

Aber bei einem Kollegen trat der im Betreff genannte Fehler bei der Abfrage:

'--------------------------------------------------- Spalte mit eigenen Namen markieren

    On Error GoTo Format_Urlaub
    
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=WENNFEHLER(UND(LINKS(A$12;FINDEN("","";A$12)-1)='Benutzer-Namen'!$J$1;ZEILE()>1;ZEILE()<>10;ZEILE()<379);UND(A$12='Benutzer-Namen'!$J$1;ZEILE()>1;ZEILE()<>10;ZEILE()<379))"
    
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Borders(xlLeft)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.FormatConditions(1).Borders(xlRight)
        .LineStyle = xlContinuous
        .Color = -16776961
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0.599963377788629
    End With

     On Error GoTo 0 
'------------------------------------------------------------------ Urlaub & 1/2 Urlaub
Format_Urlaub:
    
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=ODER(A1=""Urlaub"";A1=""1/2 Urlaub"")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority ....

auf Deshalb habe ich diesen Fehler mittels einer "On Error-Abfrage" abgefangen und zur nächsten Formatierung geschickt, da ich dachte , dass dieses Problem nur bei der Ersten Abfrage auftritt.

Aber genau der gleiche Fehler tritt nun auch auf, wenn bei dem betrefenden Kollegen die bedingte Formatierung für den Urlaub aktiviert werden soll.

IWäre schön, wenn jemand die Ursache kennt und dazu eine Lösung hat.
VG, wisch
Wer Hilfe nimmt, sollte auch Hilfe geben! Auch wenn dies auf einem ganz anderem Gebiet geschieht.
Top
#2
Ich kann Deinen Code leider nicht in Excel überprüfen, da Du keine Mappe zur Verfügung stellst, in dem das Problem nachvollzogen werden kann.
Allerdings fällt mir auf, dass der Code sich gleich ein SELECTION-Objekt nutzt und dann etwas hinzufügen möchte.
Kann es evtl. sein, dass bei dem Kollegen, wenn dieses Script aufgerufen wird, keine SELECTION vorhanden ist und dadurch der Code sich auf ein nicht vorhandenes Objekt bezieht?
Top
#3
Hallo JereMaia,

ich habe den Kalender nun soweit abgespeckt und anonymisiert, dass ich ihn nun hochladen kann. Auf dem Tabellenblatt "2019" habe ich auch noch eine Schaltfläche (Form) eingefügt, die ich mit dem Makro "BF" verknüpft habe.

Ich hoffe, damit wird es klarer.


Angehängte Dateien
.xlsm   CEF - VBA Laufzeitfehler 5.xlsm (Größe: 115,98 KB / Downloads: 8)
VG, wisch
Wer Hilfe nimmt, sollte auch Hilfe geben! Auch wenn dies auf einem ganz anderem Gebiet geschieht.
Top
#4
Bei mir wird an keiner Stelle ein Fehler angezeigt.  Wenn kein Fehler angezeigt wird funktioniert bei mir alles. Was mir dazu noch einfällt ist folgendes. Das ist zwar etwas aufwendig, aber sonst habe ich im Moment keine Idee: Evtl. differieren die Excel-Einstellungen (Optionen)  bei diesem Kollegen. Vergleiche mal ALLE Deine Excel-Einstellungen mit denen von deinem Kollegen. Evtl. gibt es irgendwo Unterschiede, die diese Fehlermeldung evtl. verursacht. Ist aber nur eine Idee.

Du hast im übrigen noch einen Fehler (meiner Meinung nach) in den Makros:
Du solltest folgenden Code

PHP-Code:
If ActiveSheet.Name "2013" Or ActiveSheet.Name "2055" Then
       
Exit Sub
End 
If 

mit dem hier ersetzen:

PHP-Code:
If (CLng(ActiveSheet.Name) < 2013) Or (CLng(ActiveSheet.Name) > 2053Then
        Exit Sub
End 
If 

Du vergleichst einen Tabellennamen (String) zwar mit einem String "2013" und wendest einen "kleiner" Operator bzw "größer" Operator an, der aber normalerweise nur auf Zahlen angewendet werden kann. Keine Ahnung was hier mathematisch als Ergebnis geliefert wird.
Wenn Du, wie ich vermute, den Tabellennamen als Zahl haben und dann abfragen willst, ob diese kleiner als die Zahl 2013 ist, musst Du vorher den String des Tabellennamens in eine Zahl umwandeln und auf diese mit einer Zahl (z.B. 2013) und dem Operator z.B. < anwenden. Zudem sollten die Operationen noch geklammert werden. Zur Sicherheit und um den Code besser lesen zu können. Keine Ahnung wie die OR und > und < Hierarchie bei der Auswertung ist.
Top
#5
Hallöchen,

Vergleichsoperatoren können auf Zahlen und Texte, auch kombiniert, angewendet werden. Das kann man z.B. auch zur alphabetischen Sortierung verwenden …

Code:
Sub test()
Dim a$, b%, c$, d$, e$, f$
a = "1": b = 1: c = "3": d = "O": e = "o": f = "N"
If a < c Then MsgBox "1 <3" Else MsgBox "1 nicht <3"
If b < c Then MsgBox "1 <3" Else MsgBox "1 nicht <3"
If d < e Then MsgBox "O <o" Else MsgBox "O nicht <o"
If e < f Then MsgBox "O <N" Else MsgBox "O nicht <N"
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#6
Super! Danke für den Hinweis.
Top
#7
Hallo,

ich bin kein Excel Profi. Mir fällt aber sofort auf, dass Kein "Option Explicit " oben steht. Das habe ich eingefügt und es kam sofort die Meldung, Dass Variablen nicht definiert wurden.

Lg
Marcus


Angehängte Dateien Thumbnail(s)
   

Wissen ist Macht - es ist aber nicht schlimm nicht alles zu wissen.
Man muss nicht alles wissen - man muss nur wissen wo es steht, oder wo man Hilfe bekommt.
Top
#8
Hallo Marcus,

die vorherige Definition von Variablen ist auf jeden Fall sinnvoll, aber nciht zwingend notwendig. Dies kann auch nicht der Grund sein, dass der Laufzeitfehler nur bei sehr wenigen (bisher einer bekannt) Kollegen auftritt.

Mir geht es ja bei der Programmierung nur darum, dass die Gültigkeitsbereiche der bedingten Formatierungen nicht ständig aufgeteilt und dubliziert werden. Insofern ist es nicht so tragisch, wenn es bei einzelnen Kollegen nicht läuft.

Dehalb habe ich nun folgenden Workaround realisert.

Zu Beginn, bevor ich alle aktiven bedingten Formatierungen lösche, setze ich eine Wennfehler-Bedingung, um im Falle eines Fehlers das Makro zu verlassen. Danach setzte ich die Erste bedingte Formatierung, also immer noch , bevor alle gelöscht werden, und verlasse nun das Makro, wenn ein/der Fehler auftritt, oder es wird vollständig durchlaufen, wenn kein Fehler auftritt.

Ich habe also zwar immer noch keine Ahnung, warum der Fehler bei einigen wenigen auftritt, die alle O365 installiert haben, aber die negative Auswirkung, dass bei diesen Kollegen der Laufzeitfehler auftritt und alle bedingten Formatierungen solange verloren gegangen sind, bis wieder ein Kollege eine Änderung durchführt, bei dem der Fehler nicht auftritt, die habe ich damit beseitigt.
VG, wisch
Wer Hilfe nimmt, sollte auch Hilfe geben! Auch wenn dies auf einem ganz anderem Gebiet geschieht.
Top
#9
Hallöchen Wisch,

mal noch ein Hinweis. Bei einer nicht definierten Variable wird die Variable markiert und nicht die ganze codezeile.
Wenn ich hier

Type:=xlExpression,
einen Buchstaben vergesse, z.B.
Type:=xlExpresson,

dann kommt besagter Fehler 5 und das Wort xlExpresson ist blau hinterlegt.

Ohne Option Explicit würde an der Stelle ein anderer Fehler kommen, Ungültiges Argument oder ungültiger Prozeduraufruf. Gleiches kommt übrigens auch bei einem fehlenden Blatt bzw. falschen Blattnamen.
Beim Fehlenden Objekt kommt z.B. ein Fehler 424. Und falls jemand vorsichtig war und einen Blattschutz reingenommen hat, kommt der Fehler 1004 ...

Bis auf die nicht definierte Variable werden übrigens alle jetzt genannten Fehler mit On Error … übersprungen.

Leider gibt es zum Problem noch keine konkrete Fehlermeldung …
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#10
Hallo Andre,

velen Dank für den Hinweis! Aber in meinem konkrekten Fall würde dies aber bedeuten, dass der Fehler gennerell und immer bei allen Anwendern auftreten würde, die nach einer Änderung die Mappe sichern. Aber bei den meisten Kollegen läuft ja das Makro völlig ohne Problem.

Um aber noch genauer zu erfahren, ob das Problem auch bei anderen Kollegen auftritt, werde ich in die OnError-Behandlung noch eine Protokollierung einbauen. Da kann ich dann nach einiger Zeit sehen, ob da auch andere Namen gelistet werden.

weiterhin, werde auch noch die Nachlässigkeiten beseitigen.
VG, wisch
Wer Hilfe nimmt, sollte auch Hilfe geben! Auch wenn dies auf einem ganz anderem Gebiet geschieht.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste