Microsoft Excel

Herbers Excel/VBA-Archiv

Wieso wird der 2.Teil nicht ausgeführt

Betrifft: Wieso wird der 2.Teil nicht ausgeführt von: walter mb
Geschrieben am: 28.08.2014 18:35:35

Hallo zusammen,
wieso wird der 2. Teil des Makros nicht ausgeführt.
Das Makro "löschen" klappt nicht.

mfg walter mb

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim vntNewValue As Variant
Dim lrgRange As Range
On Error GoTo ERR_Handler
Set lrgRange = Range("B3:B65000")
If Intersect(Target, lrgRange) Is Nothing Then Exit Sub
With Target
    If .Count = 1 Then
    Select Case .Value
            Case "best": vntNewValue = "Bestandskunde"
            Case "bes": vntNewValue = "Besuch"
            Case "gs": vntNewValue = "Gelbe Seiten"
            Case "gsb": vntNewValue = "Gelbe Seiten Buch"
            Case "gsi": vntNewValue = "Gelbe Seiten Internet"
            Case "go": vntNewValue = "Google"
            Case "gom": vntNewValue = "Google S-Markisen"
            Case "gos": vntNewValue = "Google S-Sonnenschutz"
            Case "i": vntNewValue = "Internet"
            Case "ver": vntNewValue = "Vermittlung"
            Case "vorb": vntNewValue = "Vorbeifahrt"
            Case "wei": vntNewValue = "Weiterempfehlung"
            Case "wu": vntNewValue = "Wohnt Umkreis"
            Case "z": vntNewValue = "Zeitung"
    Case Else: vntNewValue = .Value
        End Select
        Application.EnableEvents = False
        .Value = vntNewValue
    End If
End With
ERR_Handler:
Application.EnableEvents = True
'End Sub

'
Private Sub wWorksheet_Change(ByVal Target As Excel.Range)
  If Target.Count > 1 Then Exit Sub
   If Target.Column = 13 Then
 On Error GoTo ErrHandler
 Application.EnableEvents = False
    Call löschen
End If
ErrHandler:
Application.EnableEvents = True

End Sub

  

Betrifft: AW: Wieso wird der 2.Teil nicht ausgeführt von: Daniel
Geschrieben am: 28.08.2014 19:04:01

Hi

warum sollte das Makor "löschen" ausgeführt werden ???
dazu müsstest du es aufrufen.

der Befehl "Call löschen" steht im Makro "wWorksheet_Change" und dieses ist, aufgrund des geänderten Namens, kein automatisch ausgeführtes Event-Makro, sondern nur ein ganz normales Makro auch, welches untätig rumliegt, bis es von einem andern Makro mit Call und Parameterübergabe gestartet wird.
Da das nicht vorkommt, wird auch löschen nicht gestartet.

Gruß Daniel


  

Betrifft: AW: Wieso wird der 2.Teil nicht ausgeführt von: walter mb
Geschrieben am: 28.08.2014 19:09:34

Hallo Daniel,
ich habe beide in ein Makro:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
gesetzt und dachte das es abgearbeitet wird.

So sieht es aus:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim vntNewValue As Variant
Dim lrgRange As Range
On Error GoTo ERR_Handler
Set lrgRange = Range("B3:B65000")
If Intersect(Target, lrgRange) Is Nothing Then Exit Sub
With Target
    If .Count = 1 Then
    Select Case .Value
            Case "best": vntNewValue = "Bestandskunde"
            Case "bes": vntNewValue = "Besuch"
            Case "gs": vntNewValue = "Gelbe Seiten"
            Case "gsb": vntNewValue = "Gelbe Seiten Buch"
            Case "gsi": vntNewValue = "Gelbe Seiten Internet"
            Case "go": vntNewValue = "Google"
            Case "gom": vntNewValue = "Google S-Markisen"
            Case "gos": vntNewValue = "Google S-Sonnenschutz"
            Case "i": vntNewValue = "Internet"
            Case "ver": vntNewValue = "Vermittlung"
            Case "vorb": vntNewValue = "Vorbeifahrt"
            Case "wei": vntNewValue = "Weiterempfehlung"
            Case "wu": vntNewValue = "Wohnt Umkreis"
            Case "z": vntNewValue = "Zeitung"
    Case Else: vntNewValue = .Value
        End Select
        Application.EnableEvents = False
        .Value = vntNewValue
    End If
End With
ERR_Handler:
Application.EnableEvents = True
'---------------------------------------
  If Target.Count > 1 Then Exit Sub
   If Target.Column = 13 Then
 On Error GoTo ErrHandler
 Application.EnableEvents = False
    Call löschen
End If
ErrHandler:
Application.EnableEvents = True
End Sub
gruß walter mb


  

Betrifft: Na weeßte, so ist das LöschMakro Teil der ... von: Luc:-?
Geschrieben am: 28.08.2014 19:22:15

…FehlerBehandlung, Walter!
Gruß, Luc :-?


  

Betrifft: AW: Na weeßte, so ist das LöschMakro Teil der ... von: Daniel
Geschrieben am: 28.08.2014 19:39:35

Hi Luc
das ist hier nicht die Ursache.
ausserdem, vielleicht ist es ja sinnvoll, wenn bei einem Fehler im ersten Teil des Codes der zweite Teil trotzdem ausgeführt wird?
Gruß Daniel


  

Betrifft: Das ist zwar richtig, weil er den üblichen ... von: Luc:-?
Geschrieben am: 29.08.2014 01:00:17

…Sprungbefehl (bzw eine entsprd Abfrage) weggelassen hat, Daniel,
aber so etwas macht man 1. nicht und 2. ist es trotzdem falsch, weil hierin eine (sinnlose) 2.Fehlerbehandlung enthalten ist.
Gruß, Luc :-?


  

Betrifft: AW: Das ist zwar richtig, weil er den üblichen ... von: Daniel
Geschrieben am: 29.08.2014 01:48:16

Sehe ich anders.
Der Sprungbefehl bei Fehler ist mit On Error GoTo ERR_Handler doch vorhanden, ebenso die Sprungmarke, das passt alles soweit

Wenn ein Fehler in bezug auf Fehlerbehandlung vorliegt, dann derjenige, dass er vergessen hat, nach dem Fehlersprung des ersten Makroteils den Fehlerbehandlungsmodus zu deaktivieren, damit der Fehlersprung für den zweiten Teil aktiv werden kann.
Denn solange man sich im Fehlerbehandlungsmodus befindet, kann kein weiter
Fehlersprung ausgeführt werden.

Gruß Daniel


  

Betrifft: Eben! Was ist da anders, ... von: Luc:-?
Geschrieben am: 29.08.2014 02:29:08

…Daniel?
Wäre der Code von dir, würde ich wohl auch „vergessen“ vermuten, aber so ist es doch nur schlicht Unkenntnis!
Luc :-?


  

Betrifft: AW: Eben! Was ist da anders, ... von: Daniel
Geschrieben am: 29.08.2014 02:42:29

Egal wie es ist, die Fehlerbehandlung ist nicht die Ursache dafür,dass der zweite Teil des Codes nicht ausgeführt wird, das hat andere grunde.


  

Betrifft: Bei so etwas gibt's gern mehrere Gründe! von: Luc:-?
Geschrieben am: 29.08.2014 04:02:17

Deshalb empfehle ich auch immer, eine EventProc als Verteiler zu benutzen, falls mehrere Aktionen durchgeführt wdn sollen.
Luc :-?


  

Betrifft: AW: EventProc??? what's that? von: Daniel
Geschrieben am: 29.08.2014 07:46:04

Empfiehlt du das immer?
Hier hast du es bisher nicht getan.

Braucht man auch nicht, eine vernünftige Bedigungsprüfung mit vollständigen If - End If -Blöcken ohne Exit Subs reicht aus, wenn man im selben Event unterschiedliche Aktionen ausführen will.

Gruß Daniel


  

Betrifft: Es wird immer klarer, warum Isi auf dich ... von: Luc:-?
Geschrieben am: 29.08.2014 12:32:35

…so allergisch reagiert, Slowboarder!
Luc :-?


  

Betrifft: AW: Durchaus möglich... von: Daniel
Geschrieben am: 29.08.2014 13:36:50

... ihr seid euch in machen Punkten ziemlich ähnlich.
trotzem würde ich mich das mit den EventProcs nochmal interessieren, was das genau ist und wie das bei diesem Problem helfen würde.
Schließlich will ich ja was dazu lernen ;-)
Gruß Daniel


  

Betrifft: AW: Wieso wird der 2.Teil nicht ausgeführt von: Daniel
Geschrieben am: 28.08.2014 19:27:36

Hi
naja, einfach zwei Makros die einzeln für sich funktionieren, zusammenzu kopieren klappt selten, dass muss man schon ein bisschen überarbeiten, vorallem wenn man mit Abbruchbedingungen arbeitet.

im ersten Teil des Makros schreibst du ja:

If Intersect(Target,  Range("B3:B65000")) Is Nothing Then Exit Sub

dh bei einer Änderung ausserhalb von Spalte B wird der Code sofort beendet!
damit kann dann in der Folge
   If Target.Column = 13 Then

auch nie WAHR werden, weil diese Codezeile wird ja nur erreicht, wenn eine Änderung in Spalte B (2) stattfand.

Wenn du ein Event-Makro mit mehrern unterschiedlichen Aktionen für mehrere Bereiche hast, dann solltest du das einfache IF ... THEN EXIT SUB unterlassen und besser mit vollständigen IF-THEN-ENDIF-Blöcken arbeiten (hier mal der Prinzipelle Code, die weiteren benötigten Bestandteile bitte ergänzen):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
...
If Target.Column = 2 And Target.Row > 3 Then
   If Target.CountLarge = 1 then
        Select Case Target.Value
           Case:...
           Case:...
       End Select
   Else
      ....
   End IF
End If

If Target.CountLarge = 1 then
    If Target.Columns = 13 Then
        Call löschen
    end if
End if

End Sub
Gruß Daniel


  

Betrifft: Das ist ja... von: walter mb
Geschrieben am: 29.08.2014 19:33:25

Hallo Luc und Daniel,
bin gerade erst wiedergekommen.
DANKE
für die Lehrreichen Infos aber versteh nur Bahnhof...

Habe mal so abgeändert, jetzt funktioniert nichts mehr,
vielleicht habt IHR nochmal erbarmen und helft mir.

mfg
walter mb

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim vntNewValue As Variant
Dim lrgRange As Range

If Intersect(Target, Range("B3:B65000")) Is Nothing Then Exit Sub

If Target.Column = 2 And Target.Row > 3 Then
   If Target.CountLarge = 1 Then

With Target
   ' If .Count = 1 Then
    Select Case Target.Value
    'Select Case .Value
            Case "best": vntNewValue = "Bestandskunde"
            Case "bes": vntNewValue = "Besuch"
            Case "gs": vntNewValue = "Gelbe Seiten"
            Case "gsb": vntNewValue = "Gelbe Seiten Buch"
            Case "gsi": vntNewValue = "Gelbe Seiten Internet"
            Case "go": vntNewValue = "Google"
            Case "gogs": vntNewValue = "Google Gelbe Seiten"
            Case "gom": vntNewValue = "Google S-Markisen"
            Case "gos": vntNewValue = "Google S-Sonnenschutz"
            Case "i": vntNewValue = "Internet"
            Case "ver": vntNewValue = "Vermittlung"
            Case "vorb": vntNewValue = "Vorbeifahrt"
            Case "wei": vntNewValue = "Weiterempfehlung"
            Case "wu": vntNewValue = "Wohnt Umkreis"
            Case "z": vntNewValue = "Zeitung"
    Case Else: vntNewValue = .Value
        End Select
        Application.EnableEvents = False
        .Value = vntNewValue

End With
End If
    End If
     End If
'-------------------------------------------
  If Target.CountLarge = 1 Then
    If Target.Columns = 13 Then
    
    Call löschen

End If
End If

End Sub



  

Betrifft: AW: dann nochmal für dich das wichtigste:. von: Daniel
Geschrieben am: 29.08.2014 22:22:40

Wenn in deinem Eventmakro mehrere Zellbereiche mit unterschiedlichen Aktionen bearbeiten willst, dann darfst du nicht bei der ersten Prüfung mit EXIT SUB abbrechen, wenn diese nicht erfüllt ist.
Klaro?

Gruß Daniel


  

Betrifft: AW: dann nochmal für dich das wichtigste:. von: Ewald
Geschrieben am: 29.08.2014 23:36:23

Hallo,

teste mal so

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim vntNewValue As Variant
               Dim lrgRange As Range
               On Error GoTo ERR_Handler
               If Target.Count > 1 Then Exit Sub
               If Target.Column = 2 And Target.Row > 2 Then
               With Target
                   Select Case .Value
                           Case "best": vntNewValue = "Bestandskunde"
                           Case "bes": vntNewValue = "Besuch"
                           Case "gs": vntNewValue = "Gelbe Seiten"
                           Case "gsb": vntNewValue = "Gelbe Seiten Buch"
                           Case "gsi": vntNewValue = "Gelbe Seiten Internet"
                           Case "go": vntNewValue = "Google"
                           Case "gom": vntNewValue = "Google S-Markisen"
                           Case "gos": vntNewValue = "Google S-Sonnenschutz"
                           Case "i": vntNewValue = "Internet"
                           Case "ver": vntNewValue = "Vermittlung"
                           Case "vorb": vntNewValue = "Vorbeifahrt"
                           Case "wei": vntNewValue = "Weiterempfehlung"
                           Case "wu": vntNewValue = "Wohnt Umkreis"
                           Case "z": vntNewValue = "Zeitung"
                   Case Else: vntNewValue = .Value
                    End Select
                       Application.EnableEvents = False
                       .Value = vntNewValue
               End With
            End If
               
            If Target.Column = 13 Then
                   Call löschen
            End If
ERR_Handler:
               Application.EnableEvents = True
End Sub
Gruß Ewald


  

Betrifft: DANKE Ewald klappt !!! -) von: walter mb
Geschrieben am: 30.08.2014 11:23:41

Guten Morgen Ewald,
kllappt bestens !
DANKE
mfg
walter mb


  

Betrifft: Daniel Danke -) von: walter mb
Geschrieben am: 30.08.2014 11:22:35

Guten Morgen Daniel,
das habe ich jetzt verstanden !!!

mfg
walter mb


 

Beiträge aus den Excel-Beispielen zum Thema "Wieso wird der 2.Teil nicht ausgeführt"