Guten Morgen ihr alle,
ich traue mich mittlerweile etwas mehr an VBA Programmierung ran. ich habe mir verschiedenste Codefetzen zusammengebaut, scheitere nun aber bei der Auswahl einer passenden Schleife um eine Bedingung zu erfüllen.
Das ganze Prozedere soll folgendes durchführen.Auf einer Eingabemaske wählt man Daten aus. Diese bestehen aus 4 verschiedenen Blöcken, die zuerst in verschieden Spalten aufgelöst und von führenden Freiziechen befreit werden. Nachdem dann die Variablen eingelesen wurden, wird erst das Formular gelöscht und dann geht es in die Schleife.
Diese soll anhand der Variable PN in einer bestimmten Liste (LZ) den passenden Eintrag finden, diese Zeile kopieren und in eine der vorhandenen Listen, je nach Variable LZneu einfügen. Danach kann in dem alten Tabellenblatt die Zeile gelöscht werden.
Bisher ist es so, das alles so funktioniert wie ich mir das vorstelle. Allerdings nur bei Einträgen diesich in die Zeile 3 eintragen.
Ich denke ich habe etwas falsch gemacht.
Der bisherige Code ist:
Vielleicht könnte mir jemand erklären, wo mein Fehler liegt und wie ich die Schleife richtig ans Laufen bringe.
Vielen Dank im Voraus.
Grüße
Christian
ich traue mich mittlerweile etwas mehr an VBA Programmierung ran. ich habe mir verschiedenste Codefetzen zusammengebaut, scheitere nun aber bei der Auswahl einer passenden Schleife um eine Bedingung zu erfüllen.
Das ganze Prozedere soll folgendes durchführen.Auf einer Eingabemaske wählt man Daten aus. Diese bestehen aus 4 verschiedenen Blöcken, die zuerst in verschieden Spalten aufgelöst und von führenden Freiziechen befreit werden. Nachdem dann die Variablen eingelesen wurden, wird erst das Formular gelöscht und dann geht es in die Schleife.
Diese soll anhand der Variable PN in einer bestimmten Liste (LZ) den passenden Eintrag finden, diese Zeile kopieren und in eine der vorhandenen Listen, je nach Variable LZneu einfügen. Danach kann in dem alten Tabellenblatt die Zeile gelöscht werden.
Bisher ist es so, das alles so funktioniert wie ich mir das vorstelle. Allerdings nur bei Einträgen diesich in die Zeile 3 eintragen.
Ich denke ich habe etwas falsch gemacht.
Der bisherige Code ist:
Zitat:Sub Mitarbeiterwechsel()
Dim Anz As Variant
Dim LZ As String
Dim LZneu As Variant
Dim Name As String
Dim Vorname As String
Dim PN As String
Dim zeile As String
'Gesamtspalte auflösen
Anz = Range("j5").Value
Range("j5").Select
Selection.TextToColumns Destination:=Range("m5"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
True
'Leerzeichen löschen
Range("m5:p5").Select
Dim Zelle As Range
For Each Zelle In Selection
Zelle.Value = Application.Trim(Zelle.Value)
Next Zelle
'Variablen einlesen
LZ = Range("p5").Value
PN = Range("o5").Value
Name = Range("m5").Value
Vorname = Range("n5").Value
LZneu = Range("j7").Value
'Formular löschen
Range("j5").Select
Selection.ClearContents
Range("j7").Select
Selection.ClearContents
Range("j5").Value = "Bitte auswählen"
Range("M5:S5").Select
Selection.ClearContents
'Mitarbeiter identifizieren
Sheets(LZ).Select
zeile = 3
Do While Range("A" & zeile).Value = PN
Rows(zeile).Select
Selection.Copy
zeile = zeile + 1
Loop
'Daten verschieben
Sheets(LZneu).Select
Rows(3).Select
Selection.Insert Shift:=xlDown
'sortieren nach Namen
ActiveWorkbook.Worksheets("Referenz").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Referenz").AutoFilter.Sort.SortFields.Add Key:= _
Range("A1:A461"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("Referenz").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets(LZ).Select
ActiveWorkbook.Worksheets(LZ).AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets(LZ).AutoFilter.Sort.SortFields.Add _
Key:=Range("B2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets(LZ).AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Mitarbeiter in altem Tabellenblatt löschen
Sheets(LZ).Select
zeile = 3
Do While Range("A" & zeile).Value = PN
Rows(zeile).Select
Selection.Delete
Loop
'Aufruf Formularblatt
Sheets("Mitarbeiterverwaltung").Select
Range("D5").Select
End Sub
Vielleicht könnte mir jemand erklären, wo mein Fehler liegt und wie ich die Schleife richtig ans Laufen bringe.
Vielen Dank im Voraus.
Grüße
Christian