Inhalte löschen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Excel-Version: 9.0 (Office 2000)
nach unten

Betrifft: Inhalte löschen
von: Rolf ST
Geschrieben am: 29.06.2002 - 07:53:14

Hallo Excel Experten!
Ich möchte die Inhalte in Spalte D löschen.
Ist es möglich, das mir jemand folgendes Makro so ändert, das
nicht bei jeder, gelöschten Zelle die Meldung "falscher Wert kommt" ?

Option Compare Text ' Bei Vergleichen Groß-/Kleinschreibung nicht beachten
Option Explicit

Dim busy As Boolean

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Bereich1 As Range, Bereich2 As Range, Bereich3 As Range
Dim c As Range
Dim col As Integer
Dim AK As String
Application.EnableEvents = False
Application.Calculation = xlCalculationAutomatic
If busy Then Exit Sub ' zum Verhindern des Selbstaufrufens durch VBA-geänderte Zellen

Set Bereich1 = Range("D2:D1000")
Set Bereich2 = Range("E2:E1000")
Set Bereich3 = Range("I2:I1000")

If Intersect(Target, Bereich1) Is Nothing And Intersect(Target, Bereich2) Is Nothing _
And Intersect(Target, Bereich3) Is Nothing Then Exit Sub

busy = True
Application.ScreenUpdating = False

For Each c In Target

If Not (Intersect(c, Bereich1) Is Nothing) Then

If c.Value = "m" Then
col = 2
ElseIf c.Value = "w" Then
col = 3
Else
c.Select
Application.ScreenUpdating = True
MsgBox "Falscher Wert"
Application.ScreenUpdating = False
col = 0
End If

ElseIf Not (Intersect(c, Bereich2) Is Nothing) Then

If Cells(c.Row, 4) = "m" Then
col = 2
ElseIf Cells(c.Row, 4) = "w" Then
col = 3
Else
col = 0
End If

ElseIf Not (Intersect(c, Bereich3) Is Nothing) Then

If (Len(c) > 6 Or InStr(c, " ") <> 0 Or InStr(c, ".") <> 0) Then
c.Select
Application.ScreenUpdating = True
MsgBox "Unzulässiger Wert"
Application.ScreenUpdating = False
End If
col = -1 ' Verhindern des Beschreibens der "AK"-Spalte

End If

If col > 0 Then
AK = ""
On Error Resume Next
AK = Application.WorksheetFunction.VLookup(Cells(c.Row, 5), _
Worksheets("Klasseneinteilung").Range("B2:D150"), col, False)
On Error GoTo 0
Cells(c.Row, 6) = AK
ElseIf col = 0 Then
Cells(c.Row, 6) = ""
End If

Next c
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

busy = False

End Sub

Vielen Dank für eure Hilfe!

Tschüß
Rolf

nach oben   nach unten

Re: Inhalte löschen
von: Hajo_Zi
Geschrieben am: 29.06.2002 - 09:35:28

Hallo Rolf

ich vermute mal Dein Problem kann mann schlecht Nachvollziehen. Du möchtest bestimmt das bei Deiner Zeile
"AK = Application.WorksheetFunction.VLookup(Cells(c.Row, 5), _
Worksheets("Klasseneinteilung").Range("B2:D150"), col, False)"
nicht "falscher Wert kommt" aber da wir alle nicht Deine Verweiswerte haben.

Grundsätzlich hätte ich Deinen Code ein wenig umgestellt. Ein zweites Problem in Deinem Code ist falls mehr als eine Zelle miteinmal ausgefüllt wird, um dieses Problem habe ich mich jetzt nicht gekümmert.


Option Compare Text ' Bei Vergleichen Groß-/Kleinschreibung nicht beachten
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Bereich1 As Range, Bereich2 As Range, Bereich3 As Range
    Dim As Range
    Dim col As Integer
    Dim AK As String
    Application.EnableEvents = False
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = False
'   Ist erledigt durch     Application.EnableEvents = False
'    If busy Then GoTo Ende ' zum Verhindern des Selbstaufrufens durch VBA-geänderte Zellen
    Set Bereich1 = Range("D2:D1000")
    Set Bereich2 = Range("E2:E1000")
    Set Bereich3 = Range("I2:I1000")
    If Intersect(Target, Bereich1) Is Nothing And Intersect(Target, Bereich2) Is Nothing _
        And Intersect(Target, Bereich3) Is Nothing Then GoTo Ende
'    busy = True
    
    For Each c In Target
        If Not (Intersect(c, Bereich1) Is Nothing) Then
            If c.Value = "m" Then
                col = 2
            ElseIf c.Value = "w" Then
                col = 3
            Else
'                c.Select
'                Application.ScreenUpdating = True
                MsgBox "Falscher Wert"
'                Application.ScreenUpdating = False
                col = 0
            End If
        ElseIf Not (Intersect(c, Bereich2) Is Nothing) Then
            If Cells(c.Row, 4) = "m" Then
                col = 2
            ElseIf Cells(c.Row, 4) = "w" Then
                col = 3
            Else
                col = 0
            End If
        ElseIf Not (Intersect(c, Bereich3) Is Nothing) Then
            If (Len(c) > 6 Or InStr(c, " ") <> 0 Or InStr(c, ".") <> 0) Then
'                c.Select
'                Application.ScreenUpdating = True
                MsgBox "Unzulässiger Wert"
'                Application.ScreenUpdating = False
            End If
            col = -1 ' Verhindern des Beschreibens der "AK"-Spalte
        End If
        If col > 0 Then
            AK = ""
            On Error Resume Next
            AK = Application.WorksheetFunction.VLookup(Cells(c.Row, 5), _
            Worksheets("Klasseneinteilung").Range("B2:D150"), col, False)
            On Error GoTo 0
            Cells(c.Row, 6) = AK
        ElseIf col = 0 Then
            Cells(c.Row, 6) = ""
        End If
    Next c
Ende:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub

Gruß Hajo

nach oben   nach unten

Re: Inhalte löschen
von: Rolf St
Geschrieben am: 29.06.2002 - 12:08:22

Hallo Hajo!
Vielen Dank für deine Hilfe!

In Spalte D Tabellenblatt Stammdaten, dürfen nur die Werte, m oder w eingegeben werden.
Es können bis zu 1000 Werte untereinanderstehen.
Die Erste Zeile ist eine Überschrift.
Wenn ich nun zum Beispiel 100 Werte untereinander in Spalte D eingegeben habe und diese für den Beginn einer neuen Abwicklung löschen möche, kommt 100 mal die Meldung: "falscher Wert"

Wäre es möglich, das diese Meldung nicht kommt, wenn ich die Zellen-Inhalte in Spalte D 2:1000 lösche.

Ich hoffe du kannst damit etwas anfangen.

Tschüß
Rolf

nach oben   nach unten

Re: Inhalte löschen
von: Martin Beck
Geschrieben am: 29.06.2002 - 12:20:33

Hallo Rolf,

ohne Deinen Code im einzelnen nachvollziehen zu wollen folgender Lösungsvorschlag. Schreibe ganz an den Anfang des Codes die Zeile

If IsEmpty(Target) Then Exit Sub

Wenn Du nun den Inhalt irgendeiner(!) Zelle, die natürlich auch im Bereich D2:D1000 liegen kann, löschst, wird die Ereignisprozedur verlassen und der restliche Code nicht ausgeführt. Dadurch entfällt dann auch die von dem Code generierte Fehlermeldung.

Gruß
Martin Beck

nach oben   nach unten

Re: Inhalte löschen
von: Rolf St
Geschrieben am: 29.06.2002 - 14:18:01

Hallo Martin!
Vielen Dank für deine Hilfe, funktioniert leider nicht
Die Meldung kommt immer noch.

Tschüß

rolf


nach oben   nach unten

Re: Inhalte löschen
von: Martin Beck
Geschrieben am: 29.06.2002 - 19:30:08

Hallo Rolf,

bei meinen Tests mit einem einfachen Beispiel ging's. Hast Du die Zeile vor

Application.EnableEvents = False

eingefügt? Der Sinn dieser Zeile ist mir auch nicht so klar, da Du ja damit die Ereignisse ausschaltest.

Gruß
Martin Beck


nach oben   nach unten

Re: Inhalte löschen
von: Rolf St
Geschrieben am: 30.06.2002 - 00:08:59

Hallo Martin,
leider funktioniert es bei meinem Makro nicht.

Tschüß
Rolf


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Inhalte löschen"