Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1268to1272
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datensätze hinzufügen und Löschen per Makro

Datensätze hinzufügen und Löschen per Makro
Martin
Hallo zusammen,
da ich von VBA keine Ahnung habe hoffe ich, dass Ihr mir einen schlanken Code schreiben könnt. Es geht darum, Teilnehmer in zwei Listen hinzuzufügen.
Zur Einstimmung: In Tabellenblatt 'Hilfstabelle'! stehen (u.a. über Formel kkleinste) die neu hinzuzufügenden Teilnehmer, in Spalte H der Nachname, in Spalte I der Vorname (Ab Zeile 2). Die Anzahl der hinzuzufügenden Teilnehmer ist variabel.
Gleiches gilt für zu löschende Teilnehmer: Diese stehen in Spalte L (Nachname) und M (Vorname).
1. Teil: Hinzufügen
Im Bereich H2:I51 sollen die Werte der gefüllten Zellen in Tabellenblatt 'Einweisung'! ab Zelle A151 sowie in Tabellenblatt 'Führerschein'! ab Zelle A151 hinzugefügt werden.
In allen Zellen stehen Formeln, allerdings kann es sein, dass der Wert "" (BLANK) ausgegeben wird. Dieser Wert soll nicht übertragen werden.
2. Teil: Löschen
Die Teilnehmer, die in der Hilfstabelle in Spalte L + M stehen (z.B. 'Hilfstabelle'!L2&'Hilfstabelle'!M2, 'Hilfstabelle'!L3&'Hilfstabelle'!M3, 'Hilfstabelle'!L4&'Hilfstabelle'!M4, ..., 'Hilfstabelle'!L51&'Hilfstabelle'!M51) sollen in Tabelle 'Führerschein'! und Tabelle 'Einweisung'! (jeweils im Range A1:A200) gefunden werden, die Zellen sind zu leeren.
Die Schwierigkeit: Zwar ist die Kombination Nachname&Vorname eindeutig, jedoch können Nachname oder auch Vorname einzeln betrachtet mehrmals vorkommen.
3. Teil: Sortieren
Hierzu habe ich mir bereits folgendes überlegt:

Tabelle1.Select
Range("A2:Y200").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Tabelle2.Select
Range("A2:R200").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Ist das soweit korrekt?
Danke und Grüße
Martin
AW: Datensätze hinzufügen und Löschen per Makro
18.07.2012 14:00:59
fcs
Hallo Martin,
in der Hilfstabelle stehen Vor- und Nachname ja in 2 Spalten (H+I bzw. L+M).
In den Tabellen "Führerschein" und "Einweisung" in Spalten A+B ?
Oder nur in Spalte A?
Wenn nur in A, dann in welcher Schreibweise? Vorname Nachname oder Nachname, Vorname?
Gruß
Franz
AW: Datensätze hinzufügen und Löschen per Makro
18.07.2012 14:13:52
Martin
Hallo Franz,
In den Tabellen "Führerschein" und "Einweisung" stehen die Namen ebenfalls in den Spalten A (Nachname) + B (Vorname)
Grüße
Martin
AW: Datensätze hinzufügen und Löschen per Makro
18.07.2012 15:57:37
fcs
Hallo Martin,
hier Makros für die 3 Aktionen. Sie werden central vom Makro "Aktion" nacheinander gestartet.
AM Besten erst einmal in einer Kopie deiner Datei testen.
Gruß
Franz
'Code in einem allgemeinen Modul
Option Explicit
Private wksHilf As Worksheet
Private wksEinw As Worksheet
Private wksFuehr As Worksheet
Sub Aktion()
Dim StatusCalc As Long
Set wksHilf = Worksheets("Hilfstabelle")
Set wksEinw = Worksheets("Einweisung")
Set wksFuehr = Worksheets("Führerschein")
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Call Hinzufuegen
Call Loeschen
Call Sortieren
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
.EnableEvents = True
End With
Set wksHilf = Nothing
Set wksEinw = Nothing
Set wksFuehr = Nothing
End Sub
Private Sub Hinzufuegen()
Dim lngZeile_H As Long
Dim lngZeile As Long
With wksHilf
lngZeile = 150
For lngZeile_H = 2 To 51
If .Cells(lngZeile_H, 8)  "" Then
lngZeile = lngZeile + 1
wksEinw.Cells(lngZeile, 1).Value = .Cells(lngZeile_H, 8)
wksEinw.Cells(lngZeile, 2).Value = .Cells(lngZeile_H, 9)
wksFuehr.Cells(lngZeile, 1).Value = .Cells(lngZeile_H, 8)
wksFuehr.Cells(lngZeile, 2).Value = .Cells(lngZeile_H, 9)
End If
Next lngZeile_H
End With
End Sub
Private Sub Loeschen()
Dim lngZeile_H As Long
Dim lngZeile As Long
Dim strNN As String, strVN As String
With wksHilf
For lngZeile_H = 2 To 51
strNN = .Cells(lngZeile_H, 12)
strVN = .Cells(lngZeile_H, 13)
If strNN  "" Then
'In Einweisung löschen
With wksEinw
For lngZeile = 3 To 200
If .Cells(lngZeile, 1).Value = strNN _
And .Cells(lngZeile, 2).Value = strVN Then
.Cells(lngZeile, 1).ClearContents
.Cells(lngZeile, 2).ClearContents
Exit For
End If
Next lngZeile
End With
'in Führerschein löschen
With wksFuehr
For lngZeile = 3 To 200
If .Cells(lngZeile, 1).Value = strNN _
And .Cells(lngZeile, 2).Value = strVN Then
.Cells(lngZeile, 1).ClearContents
.Cells(lngZeile, 2).ClearContents
Exit For
End If
Next lngZeile
End With
End If
Next lngZeile_H
End With
End Sub
Private Sub Sortieren()
With wksEinw.Range("A2:Y200") 'nach Spalte A und B sortieren
.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("B1"), Order2:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
With wksFuehr.Range("A2:R200") 'nach Spalte A und B sortieren
.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("B1"), Order2:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub

Anzeige
Noch ein Problem bei leeren Zellen
19.07.2012 07:34:00
Martin
Hallo Franz,
das Makro arbeitet gut und schnell.
Da ich noch eine Überschrift hinzufügen musste habe ich die Zeilen lngzeilen auf 3 to 52 geändert.
Eine Sache habe ich gestern leider noch vergessen zu erwähnen: Es kann sein, dass sowohl im Bereich H:I als auch im Bereich L:M kein Wert steht. Man kann allerdings sagen, dass der erste Wert in H3 bzw. L3 steht.
Kannst Du noch eine Prüfung auf eine Füllung der Zelle H3 bzw. L3 einbauen. Wenn H3 leer ist soll Private Sub Hinzufuegen nicht ausgeführt werden, Wenn L3 leer ist soll Private Sub Loeschen nicht ausgeführt werden.
Vielen Dank
Martin
Anzeige
AW: Noch ein Problem bei leeren Zellen
19.07.2012 08:47:17
fcs
Hallo Martin,
du muss die zwi markierten Zeilen anpassen.
Ich hab dabei die Prüfung umgekehrt (wenn die Zellen ungleich Leer sind dann ausführen).
Gruß
Franz
Sub Aktion()
Dim StatusCalc As Long
Set wksHilf = Worksheets("Hilfstabelle")
Set wksEinw = Worksheets("Einweisung")
Set wksFuehr = Worksheets("Führerschein")
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
If wksHilf.Range("H3").Value  "" Then Call Hinzufuegen 'angepasst 2012-07-19
If wksHilf.Range("L3").Value  "" Then Call Loeschen    'angepasst 2012-07-19
Call Sortieren
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
.EnableEvents = True
End With
Set wksHilf = Nothing
Set wksEinw = Nothing
Set wksFuehr = Nothing
End Sub

Anzeige
AW: Noch ein Problem bei leeren Zellen
19.07.2012 09:24:37
Martin
Hi Franz,
danke für die Hilfe. Die Abfrage funktioniert sehr gut.
Wahrscheinlich durch meine Änderung gibt es noch eine unschöne Sache: Die Sortierung beginnt erst ab Zeile 3. Ursache dafür ist wahrscheinlich die folgende Zeile, die ich angepasst habe:
    For lngZeile_H = 3 To 52

Diese musst ich anpassen, da nach einer nachträglichen Anpassung im Tabellenblatt 'Hilfstabelle' die Daten nun erst ab Zeile 3 erscheinen. Hast Du dafür auch noch eine so schnelle und unkomplizierte Lösung?
Vielen Dank
Martin
AW: Noch ein Problem - Sortieren
19.07.2012 11:19:32
fcs
Hi Martin.
das Sortieren in den beiden Blättern "Einweisung" und "Führerschein" hat nichts mit den Schleifenzählern zu tun.
Hier muss du ggf. im Sortiermakro den zu sortierenden Bereich anpassen. Der beginnt momentan in der Zelle A2, wobei in der 1. Zeile des Sorbereichs die Titel der Spalten stehen müssen. Wen du keine Spaltentitel hast, dann muss du den Wert für den Parameter "Header" von xlYes in xlNo ändern.
Gruß
Franz
Private Sub Sortieren()
With wksEinw.Range("A2:Y200") 'nach Spalte A und B sortieren
.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("B1"), Order2:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
With wksFuehr.Range("A2:R200") 'nach Spalte A und B sortieren
.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("B1"), Order2:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub

Anzeige
AW: Noch ein Problem - Sortieren
19.07.2012 11:30:00
Martin
Das wars schon...
Die zuletzt genannte Hilfe mit der Sortierung habe ich mir noch auskommentiert ins Makro übertragen, damit ich das auch später noch weiß.
Vielen Dank für alles, Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige