Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

2 worksheet_change verbinden
#1
Hallo liebe Leser des Forums...
ich bin Anfänger,was das mit dem Exceln angeht...
ich habe ein Problem,ich möchte zwei "befehle" in einem arbeitsblatt nutzen....komme aber nicht weiter,weil immer wieder eine andere Fehlermeldung kommt.der erste sperrt beschriebene Zellen,der 2. soll das datum von heute bei einer änderung eintragen.
einzeln auf verschiedenenBlättern funktioenieren die Befehle wunderbar,hier die befehle:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim objCell As Range
    If Not Intersect(Target, Range("A1:L20")) Is Nothing Then
        Me.Protect Password:="platini77", UserInterfaceOnly:=True
        For Each objCell In Target
            If Not Intersect(objCell, Range("C8:W8")) Is Nothing Then _
                objCell.Locked = objCell.Text <> ""
        Next
    End If
End Sub


und der 2.

Option Explicit                                     ' Variablendefinition erforderlich

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
    Dim RaBereich As Range                          ' Variable fü überwachten Bereich
    Dim RaZelle As Range                            ' Variable für Zelle die zur Zeit bearbeitet wird
    Set RaBereich = Range("G3:G32")       ' Bereich der Wirksamkeit
    '
    Set RaBereich = Intersect(RaBereich, Range(Target.Address))
    If Not RaBereich Is Nothing Then
        Application.ScreenUpdating = False          ' Bildschirm abschalten
        Application.EnableEvents = False            ' Reaktion auf Eingabe abschalten
        For Each RaZelle In RaBereich               ' Schleife über alle veränderten Zellen im überwachten Bereich
            RaZelle.Offset(0, 1) = Date             ' Datum eintragen
        Next RaZelle
        'ActiveSheet.protect "Passwort"
        Application.ScreenUpdating = True           ' Bildschirm einschalten
        Application.EnableEvents = True             ' Reaktion auf Eingabe eindschalten
    End If
    Set RaBereich = Nothing                         ' Variable leeren
End Sub


Vielleicht kann mir ja jemand helfen,danke im vorraus
Antworten Top
#2
Hallo,

bin mir nicht sicher, ob es so paßt

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim objCell As Range
    Dim RaBereich As Range                          ' Variable fü überwachten Bereich
    Dim RaZelle As Range                            ' Variable für Zelle die zur Zeit bearbeitet wird
    Set RaBereich = Range("G3:G32")       ' Bereich der Wirksamkeit
    '
    If Not Intersect(Target, Range("A1:L20")) Is Nothing Then
        Me.Unprotect Password:="platini77"
        Set RaBereich = Intersect(RaBereich, Range(Target.Address))
        If Not RaBereich Is Nothing Then
            Application.ScreenUpdating = False          ' Bildschirm abschalten
            Application.EnableEvents = False            ' Reaktion auf Eingabe abschalten
            For Each RaZelle In RaBereich               ' Schleife über alle veränderten Zellen im überwachten Bereich
                RaZelle.Offset(0, 1) = Date             ' Datum eintragen
            Next RaZelle
            'ActiveSheet.protect "Passwort"
            Application.ScreenUpdating = True           ' Bildschirm einschalten
            Application.EnableEvents = True             ' Reaktion auf Eingabe eindschalten
        End If
        Set RaBereich = Nothing
        For Each objCell In Target
            If Not Intersect(objCell, Range("C8:W8")) Is Nothing Then _
                objCell.Locked = objCell.Text <> ""
        Next
        Me.Protect Password:="platini77", UserInterfaceOnly:=True
    End If
End Sub
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • tpunkt
Antworten Top
#3
Hallo tpunkt,

mal noch was grundsätzliches dazu.

Die Ereignismakros eines Moduls kannst Du jeweils nur 1x nutzen, also zB. 1x SelectionChange und 1x Change und 1x Calculate und was es noch so alles gibt. Du musst dann in Deinem Ereignismakro Fallunterscheidungen treffen, z.B. in Abhängigkeit der betroffenen Zelle(n).

Eventuell reicht es schon, beide Makros zusammenzufassen, jetzt mal unabhängig von irgendwelchen Aufhübschungen usw. (ungetestet):

Code:
Option Explicit                                     ' Variablendefinition erforderlich

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim objCell As Range
    If Not Intersect(Target, Range("A1:L20")) Is Nothing Then
        Me.Protect Password:="platini77", UserInterfaceOnly:=True
        For Each objCell In Target
            If Not Intersect(objCell, Range("C8:W8")) Is Nothing Then _
                objCell.Locked = objCell.Text <> ""
        Next
    End If

    Dim RaBereich As Range                          ' Variable fü überwachten Bereich
    Dim RaZelle As Range                            ' Variable für Zelle die zur Zeit bearbeitet wird
    Set RaBereich = Range("G3:G32")       ' Bereich der Wirksamkeit
    '
    Set RaBereich = Intersect(RaBereich, Range(Target.Address))
    If Not RaBereich Is Nothing Then
        Application.ScreenUpdating = False          ' Bildschirm abschalten
        Application.EnableEvents = False            ' Reaktion auf Eingabe abschalten
        For Each RaZelle In RaBereich               ' Schleife über alle veränderten Zellen im überwachten Bereich
            RaZelle.Offset(0, 1) = Date             ' Datum eintragen
        Next RaZelle
        'ActiveSheet.protect "Passwort"
        Application.ScreenUpdating = True           ' Bildschirm einschalten
        Application.EnableEvents = True             ' Reaktion auf Eingabe eindschalten
    End If
    Set RaBereich = Nothing                         ' Variable leeren
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • tpunkt
Antworten Top
#4
:100:
super danke.....so geht es
Antworten Top
#5
Hallo,

nur interessehalber: Welcher Vorschlag hat geholfen?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#6
ich hatte den ersten geneommen
Antworten Top


Gehe zu:


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