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.

Worksheet_Change(ByVal Target As Range) fehler beheben
#1
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


Angehängte Dateien
.xlsm   Datenkorrekturen nach Quelldaten kopieren.xlsm (Größe: 85,77 KB / Downloads: 17)
Antworten Top
#2
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
Antworten Top
#3
Code:
Columns(74).numberformat = "TT.mm.jjjj"
Columns(74).replace " JAN ",".01."
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
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
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
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
Antworten Top
#6
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
Antworten Top
#7
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
Antworten Top
#8
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


Angehängte Dateien
.xlsm   Datenkorrekturen nach Quelldaten kopieren.xlsm (Größe: 84,93 KB / Downloads: 12)
Antworten Top
#9
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
Antworten Top
#10
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
Antworten Top


Gehe zu:


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