Clever-Excel-Forum

Normale Version: Worksheet_Change(ByVal Target As Range) fehler beheben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo ihr fleissigen Helfer,
ich habe eine Tabelle, da stehen rechts "Quelldaten". Daraus werden für mich wichtige Daten nach links kopiert nach (Zieldaten).
Werden in den "Zieldaten" Korrekturen gemacht, so werden sie per "Worksheet_Change(ByVal Target As Range)" wieder nach
rechts in die Quelldaten kopiert. Das funktioniert bis auf kleine  Ausnahmen recht gut.

Ausnahmen:
1. Wenn ich links bei den "Zieldaten" ein Eintrag in einer Zelle lösche, sollt dieser auch in der "Quelldatei" rechts gelöscht werden.
  zB:    in "H7" (Peter) löschen, dann sollte (Peter) auch in "AA7" , "BF7" und "BR7"  gelöscht werden.
  oder: in "AB7" (Meier) löschen, dann auch in "BS7" (Meier) löschen usw.

2. In der "Quelldatei" sollten bei den Datum die Tage 01 bis 09 durch 1 bis 9 ersetzt werden, also einstellig.

Da ich das nicht hinkriege bitte ich um Eure Hilfe, diese Probleme zu lösen.
Mit dankbaren Grüssen
Martin
Hallo Martin,



Änderungen zu 2. Beispielhaft (Geburtsdatum)

Code:
Sub Datum1()
              ' Geburtsdatum
    Dim i As Long
    i = ActiveCell.Row
    If Mid(Range("AD" & i), 4, 2) = "01" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " JAN " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "02" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " FEB " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "03" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " MRZ " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "04" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " APR " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "05" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " MAI " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "06" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " JUN " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "07" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " JUL " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "08" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " AUG " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "09" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " SEPT " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "10" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " OKT " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "11" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " NOV " & Right(Range("AD" & i), 4)
    End If
    If Mid(Range("AD" & i), 4, 2) = "12" Then
        Range("BV" & i) = Left(Range("AD" & i), 2) & " DEZ " & Right(Range("AD" & i), 4)
    End If
'  hier die notwendige Anpassung
    If Left(Range("BV" & i), 1) = "0" Then Range("BV" & i) = Mid(Range("BV" & i), 2, 20)
End Sub

den Rest musst du entsprechend diesem Schema in den anderen Prozeduren falls so gewollt entsprechend anpassen.


Gruß Uwe
Code:
Columns(74).numberformat = "TT.mm.jjjj"
Columns(74).replace " JAN ",".01."
Hi,

ich würde das so machen:

Code:
Option Explicit

Sub Datum1()
Dim loLetzte As Long
Dim loRow As Long
Dim loMonat As Long

              ' Geburtsdatum
    With Sheets("Tabelle1")
   
        loLetzte = .Cells(Rows.Count, 27).End(xlUp).Row
        For loRow = 7 To loLetzte
            loMonat = Mid(.Cells(loRow, 30), 4, 2) * 1
            .Range("BV" & loRow) = Left(.Cells(loRow, 30), 2) & "." & Mid("JANFEBMRZAPRMAiJUNJULAUGSEPOKTNOVDEZ", (loMonat - 1) * 3 + 1, 3) & "." & Right(.Cells(loRow, 30), 4)
        Next
    End With
End Sub

Sub Datum2()
  Dim loLetzte As Long
Dim loRow As Long
Dim loMonat As Long
              ' Heirat
             
    With Sheets("Tabelle1")
        loLetzte = .Cells(Rows.Count, 27).End(xlUp).Row
        For loRow = 7 To loLetzte
            loMonat = Mid(.Cells(loRow, 32), 4, 2) * 1
            .Range("CD" & loRow) = Left(.Cells(loRow, 32), 2) & "." & Mid("JANFEBMRZAPRMAiJUNJULAUGSEPOKTNOVDEZ", (loMonat - 1) * 3 + 1, 3) & "." & Right(.Cells(loRow, 32), 4)
        Next
End With
End Sub

Sub Datum3()
              ' Todesdatum
      Dim loLetzte As Long
Dim loRow As Long
Dim loMonat As Long
With Sheets("Tabelle1")
             
   
        loLetzte = .Cells(Rows.Count, 27).End(xlUp).Row
        For loRow = 7 To loLetzte
            loMonat = Mid(.Cells(loRow, 34), 4, 2) * 1
            .Range("BX" & loRow) = Left(.Cells(loRow, 34), 2) & "." & Mid("JANFEBMRZAPRMAiJUNJULAUGSEPOKTNOVDEZ", (loMonat - 1) * 3 + 1, 3) & "." & Right(.Cells(loRow, 34), 4)
        Next
  End With
End Sub
Code:
Sub NamenBereinigen()
    Dim loA As Long, loB  As Long
   Dim loLetzte As Long
    With Tabelle1
    loLetzte = .Cells(Rows.Count, 27).End(xlUp).Row
     For loA = 7 To 26
     
        For loB = 7 To loLetzte
            If Len(.Cells(loA, loB)) > 2 Then
                If Left(.Cells(loA, loB), 2) = "+ " Or UCase(Left(.Cells(loA, loB), 2)) = "M " Or UCase(Left(.Cells(loA, loB), 2)) = "V " Then
                    .Cells(loA, "AA") = Mid(.Cells(loA, loB), 3, 99)
                    .Cells(loA, "BR") = Mid(.Cells(loA, loB), 3, 99)
                Else
                    .Cells(loA, 27) = .Cells(loA, loB)
                    .Cells(loA, 70) = .Cells(loA, loB)
                End If
            End If
        Next
     Next
    End With
   
End Sub
Guten Abend Uwe
78 das ist  35 .
Das bereinigen der Datum hat funktioniert.
98 für deine Hilfe. Ein Problem gelöst.

Gruss Martin

Guten Abend Edgar,
98 für dein Makro.
Werde es testen und melde mich wieder.
Wünsche noch ein schöner Abend.
Gruss Martin

Guten Abend sbb
98   für dein Vorschlag.
So wie ich das interpretiere, wird dabei der Monat geändert,
oder liege ich da falsch? Wenn ja, wo muss ich den einfügen ?

Gruss Martin
Hallo Martin,

zum 1. Thema stellt sich wahrscheinlich jedem die Frage des Bezuges der Spalten zueinander.

Wenn ich es richtig verstanden habe, kommt das leeren der Zellen als auslösendes Ereignis nur in den Spalten H und AB in Frage.
Wenn in Spalte H eine Zelle in Zeile 7 gelöscht wird, sollen dazu in dieser Zeile 7 die Werte in den Zellen der Spalte AA , BF und BR entfernt werden.

Gruß Uwe
Guten Abend Uwe
Wenn Daten im Tabellenteil links in den Spalten "G" bis Spalte "AH" etwas gelöscht wird, sollte im Tabellenteil rechts in den Spalten
                   (Überschriften)   "BC" bis "DG"  auch die analogen Zelleninhalte gelöscht werden.

Beispiele:    "H7" Eintrag löschen, dann sollte auch in "AA7" ,  "#Gen 2" ("BE7") , "Vorname" ("BR7") der Wert gelöscht werden.
                            (Hier glaube ich, dass es mit der Überschrift "#Gen 2" Probleme gibt.)
                "B7" lEintrag löschen, dann sollte auch in "Nachname" ("BS7")  der Wert gelöscht werden.
                "AC7" Eintrag löschen, dann sollte auch in "Rufname" ("BT7") der Wert gelöscht werden.

     Wenn ich ein Wert lösche, ein Leerzeichen eingebe und dann die Zelle verlasse,
     werden teilweise die korrespondierenden Zelleinträge auch gelöscht.

Hoffe, das ich es einigermassen verständlich geschildert habe.
Gruss Martin
Hallo Martin,

anbei eine mögliche Lösung.
Es ist allerdings schon problematisch, da ich nicht einschätzen kann, ob es infolge dieses Eingriffes Probleme mit mir nicht bekannten Prozeduren gibt. Teste erst mal ob dass deinen Vorstellungen entspricht.
Vorgehenseiweise:

Zu löschende Zelle (kein Zellbereich!) anklicken - Entf. Taste drücken - Wert wird an relevanter Stelle aus rechtem Bereich entfernt.

Es gibt ein paar auf Public gesetzte Variablen. Falls es erforderlich werden sollte, kann man Diese nach Ablauf der Prozedur noch entleeren.

Gruß Uwe
Guten Abend Uwe
danke für deine Hilfe. Werde die Erweiterung mal testen.
Erster Eindruck ist Vielversprechen. Es sind noch einige Spalten
in welchem die Einträge nicht gelöscht werden.
Aber Vorest mal ein Heart liches 98 . Melde mich wieder.
Gruss und eine schöne Woche wünscht
Martin
Guten Tag Uwe
Es funktioniert genauso, wie ich es mir vorgestellt habe.
Eine kleine Änderung (wenn möglich), hätte ich noch gerne.
Da in den Spalten ab "56"  die Daten nicht immer in der gleichen
Spalte eingetragen sind, sollten an Stelle der Spaltenbezeichnungen
die Überschriften angesprochen werden.

z.B anstelle der "72" der "'Name - _RUFName"

Danke und Gruss Martin
Seiten: 1 2 3