Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1428to1432
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
Inhaltsverzeichnis

If-Bedingungen mit Or verknüpfen: Fehler

If-Bedingungen mit Or verknüpfen: Fehler
04.06.2015 12:42:01
Martin
Liebe Helfer,
- eine Excel-Datei mit mehreren Arbeitsblättern
- drei dieser Arbeitsblätter sind "besonders" (Eingabe, Muster, Übersicht)
- die anderen Arbeitsblätter sind "einfach"
- bei Änderung von "C3" im "besonderen" Arbeitsblatt 'Eingabe' sollen bestimmte Bereiche der "einfachen" Arbeitsblätter gelöscht werden.
Das funktioniert aber nicht. Ich bin total am Ende habe alles versucht ... liegt es daran, dass 'sht' nicht richtig definiert ist?
Könnt ihr mir bitte helfen ? Vielen Dank schon mal im voraus,
Martin
Hier der Code (ist eher: Kot):
Private Sub Worksheet_Change(ByVal Target As Range)
Const KW = "C3"
Dim Sht As Worksheet
If Intersect(Target, Me.Range(KW)) Is Nothing Then Exit Sub
'Wenn der Schnittpunkt von Target (also: Worksheet) und KW (C3) nicht geändert wird: machnichts
'also: bei Änderung von C3 den folgenden Code starten
For Each Sht In Worksheets
If Sht.Name = Eingabe Or Muster Or Übersicht Then
'Wenn das gerade bearbeitete Sheet nicht heisst: Eingabe oder Muster oder Übersicht, dann:
GoTo Weiter
Else
Sht.Range("C10:D16").ClearContents
'Lösche den Inhalt in diesem Bereich
End If
Weiter:
Next Sht
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If-Bedingungen mit Or verknüpfen: Fehler
04.06.2015 12:48:39
Nepumuk
Hallo,
so?
Private Sub Worksheet_Change(ByVal Target As Range)
    
    Const KW = "C3"
    
    Dim Sht As Worksheet
    
    'bei Änderung von C3 den folgenden Code starten
    If Not Intersect(Target, Range(KW)) Is Nothing Then
        
        For Each Sht In Worksheets
            
            'Wenn das gerade bearbeitete Sheet nicht heisst: Eingabe oder Muster oder Übersicht, dann:
            If Sht.Name <> "Eingabe" And Sht.Name <> "Muster" Or Sht.Name <> "Übersicht" Then
                
                'Lösche den Inhalt in diesem Bereich
                Sht.Range("C10:D16").ClearContents
                
            End If
        Next Sht
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: If-Bedingungen mit Or verknüpfen: Fehler
04.06.2015 12:57:48
r2d2
Super! Danke.

AW: If-Bedingungen mit Or verknüpfen: Fehler
04.06.2015 13:13:12
Martin
Hallo Nepumuk,
erstmal: vielen Dank, dass du mir hilfst !
Jetzt funktioniert es, weil in der IF-Zeile überall das "AND" verwendet wird.
"OR" darf man nicht verwenden! Super: VIELEN DANK !!!
Grüße aus Mannheim,
Martin

Typische AnfängerFehler, ...
04.06.2015 13:20:32
Luc:-?
…Martin;
Eingabe Or Muster Or Übersicht ergibt wohl einen Fehler, weil TextKennzeichner für die Namen fehlen, sonst gelten sie als Variable. "Eingabe" Or "Muster" Or "Übersicht" ergibt idR True bzw ggf False und so wird dein Blatt ja wohl nicht heißen! ;-)
Richtig wäre: If Sht.Name = "Eingabe" Or Sht.Name = "Muster" Or Sht.Name = "Übersicht" Then
Außerdem ist dein If-Konstrukt ziemlich umständlich.
    For Each Sht In Me.Parent.Worksheets
If Sht.Name = "Eingabe" Or Sht.Name = "Muster" Or Sht.Name = "Übersicht" Then GoTo nx
'Wenn das gerade bearbeitete Sheet nicht so heisst, Eingabe, Muster, Übersicht, dann:
Sht.Range("C10:D16").ClearContents
'Lösche den Inhalt in diesem Bereich
nx: Next Sht
Oder:
    For Each Sht In Me.Parent.Worksheets
If Sht.Name  "Eingabe" And Sht.Name  "Muster" And Sht.Name  "Übersicht" Then
'Wenn d.gerade bearbeitete Sheet nicht so heisst, Eingabe, Muster, Übersicht, dann:
Sht.Range("C10:D16").ClearContents
'Lösche den Inhalt in diesem Bereich
End If
Next Sht
Oder:
    Dim vgl As Long
On Error Resume Next
For Each Sht In Me.Parent.Worksheets
vgl = 0
vgl = WorksheetFunction.Match(Sht.Name, Array("Eingabe", "Muster", "Übersicht"), 0)
If vgl = 0 Then
'Wenn d.gerade bearbeitete Sheet nicht so heisst, Eingabe, Muster, Übersicht, dann:
Sht.Range("C10:D16").ClearContents
'Lösche den Inhalt in diesem Bereich
End If
Next Sht
Oder:
    Dim vgl As Long
On Error Resume Next
For Each Sht In Me.Parent.Worksheets
vgl = 0
vgl = WorksheetFunction.Match(Sht.Name, Array("Eingabe", "Muster", "Übersicht"), 0)
On Sgn(vgl) GoTo nx
'Wenn das gerade bearbeitete Sheet nicht so heisst, Eingabe, Muster, Übersicht, dann:
Sht.Range("C10:D16").ClearContents
'Lösche den Inhalt in diesem Bereich
nx: Next Sht
Gruß, Luc :-?

Anzeige
AW: Alternative Select Case
04.06.2015 17:41:06
Daniel
Hi
Um Befehle nur bei bestimmten Bediungen ausführen zu lassen, gibt es in VBA nicht das IF..THEN, sondern auch das SELECT CASE - Konstrukt.
Dies ist besonders gut für die Darstellungen von mit ODER verknüpften Bediungen geeignet und daher genau das Richtige für deinen Fall:
Private Sub Worksheet_Change(ByVal Target As Range)
Const KW = "C3"
Dim Sht As Worksheet
If Intersect(Target, Me.Range(KW)) Is Nothing Then Exit Sub
For Each Sht In Worksheets
Select Case Sht.Name
Case "Eingabe", "Muster", "Übersicht"
Case Else
Sht.Range("C10:D16").ClearContents
end Select
Next Sht
End Sub
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige