Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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
Per VBA Zeilen löschen
24.06.2020 22:34:48
Didi
Hallo zusammen,
könnt Ihr mir bitte bei einer kleinen Herausforderung helfen, ich habe eine Datei mit über 500 Kundennummern die ich jedem Kunden mit seinen Daten versenden möchte und dieses will ich nicht manuell vornehmen. Gibt es einen VBA Code mit dem ich über UserForm die Kundennummer eingebe und nach Bestätigung, alle Zeilen die nicht dieser Kundennummer entsprechen gelöscht werden?
Stehe etwas unter Druck und meine VBA Kenntnisse sind sehr bescheiden.
Anbei eine Beispieldatei mit fiktiven Werten:
https://www.herber.de/bbs/user/138544.xlsm
Vielen Dank für Eure Bemühungen im Voraus
Gruß
Didi

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Per VBA Zeilen löschen
24.06.2020 23:22:35
Daniel
Hi
Füge der Ausgangsdatei noch eine Hilfsspalte hinzu MIT fieser Formel (sinngemäß, bin am Handy und kann die Datei nicht öffnen), Spalte mit Kundennummer sei A:
=Wenn(A1=$X$1;ZEILE();0)
in die Zelle X1 schreibst du dann die gewünschte Kundennummer.
Dann wendest du auf die Tabelle die Menüfunktion Daten - Datentools - Duplikate Entfernen an, mit der Hilfsdpalte als Kriterium und der Option "keine Überschrift"
Das löscht dir zuverlässig die unerwünschten Nummern aus der aListe.
Kleiner Tip: Ausgangsdatei schreibgeschützt speichern, bevor du mit dem Löschen anfängst.
Lässt sich auch gut per Makro ausführen, der Recorder ist dein Freund.
Gruß Daniel
Anzeige
AW: Per VBA Zeilen löschen
25.06.2020 00:41:03
fcs
Hallo Didi,
hier der Code unter dem Userfom, um einen Auszug der Liste mit der gewählten Kunden-Nummer.
das Blatt "Daten_01" wird in eine neue Arbeitsmappe kopiert, dann werden die Zeilen mit den nicht übereinstimmenden Kudennumemrn gelöscht.
LG
Franz
Private Sub CommandButton1_Click()
' Kundennummer_Suchen Makro
Dim wkbNeu As Workbook, wksNeu As Worksheet, objList As ListObject
Dim varKdNr
Dim strPath As String, strDatei As String
'Prüfen, ob eine Kundennummer gewählt wurde
If Me.ComboBox1.ListIndex = -1 Then
MsgBox "Bitte eine Kundennummer in Combobox auswählen."
Exit Sub
End If
varKdNr = Me.ComboBox1 'Kundennummer einlesen
If MsgBox("Liste zu Kunden-Nr.  """ & varKdNr & """ erstellen?", _
vbQuestion + vbOKCancel) = vbCancel Then Exit Sub
'Pfad und Dateiname unter dem die Liste zu Kundennr. gespeichert werden soll
strPath = ActiveWorkbook.Path 'Verzeichnis für die Kundenlisten
strDatei = "Liste Kunde " & varKdNr & Format(Date, " YYYY-MM-DD") & ".xlsx"
'Tabellenblatt mit Liste in neue Mappe kopieren
ActiveWorkbook.Sheets("Daten_01").Copy
Set wkbNeu = ActiveWorkbook
Set wksNeu = wkbNeu.Worksheets(1)
Set objList = wksNeu.ListObjects(1)
'Filter in Liste setzen auf ungleich Kundennummer setzen
objList.Range.AutoFilter Field:=2, Criteria1:="" & varKdNr, Operator:=xlAnd
'sichtbare Kundennummern löschen
wksNeu.Range(objList.Name & "[Kundennummer]").ClearContents
'Filter wieder aufheben
objList.Range.AutoFilter Field:=2
'Liste nach Kundennummer sortieren, so dass alle leeren Zeilen am Listenende stehen
With objList.Sort
.SortFields.Clear
.SortFields.Add2 Key:=wksNeu.Range(objList.Name & "[[#All],[Kundennummer]]"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
With wksNeu
'letzte Zeile mit Kundennummer
Zeile_1 = .Cells(objList.Range.Row, 2).End(xlDown).Row
'letzte Zeile mit Daten
Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
'Inhalte Zeilen ohne Kundennummer löschen
.Range(.Rows(Zeile_1 + 1), .Rows(Zeile_L)).Clear
'Größe der Liste anpassen
objList.Resize .Range(.Cells(objList.Range.Row, 1), .Cells(Zeile_1, _
objList.Range.Columns.Count))
End With
'Datei speichern
Application.DisplayAlerts = False 'vorhandene datei mit gleichem Namen wird ohne Rückfrage ü _
berschrieben
wkbNeu.SaveAs Filename:=strPath & "\" & strDatei, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, addtomru:=True
Application.DisplayAlerts = True
'Datei schliessen
wkbNeu.Close
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim oDic As Object, meAr
Dim A As Long
Set oDic = CreateObject("Scripting.Dictionary")
'Tabelle anpassen
With Sheets("Daten_01")
'bereich anpassen, hier ohne Überschrift
meAr = Range("b4", .Cells(.Rows.Count, 3).End(xlUp))
End With
For A = 1 To UBound(meAr)
oDic(meAr(A, 1)) = 0
Next
ComboBox1.List = oDic.keys
End Sub

Anzeige
AW: Per VBA Zeilen löschen
25.06.2020 22:01:13
Didi
Hallo Franz,
vielen Dank für die schnelle und ausführliche Hilfe. Leider bekomme ich eine Fehlermeldung an folgender Stelle:
.SortFields.Add2 Key:=wksNeu.Range(objList.Name & "[[#All],[Kundennummer]]"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Und wie bekomme ich nicht nur den Inhalt der Zelle mit der Kundennummer, sondern die kompletten Zeilen mit nicht ausgewählten Kundennummer gelöscht?
Gruß
Dietrich
AW: Per VBA Zeilen löschen
25.06.2020 22:59:06
Didi
Hallo Franz,
habe den Fehler gefunden, wie kann ich anstatt ein Tabellenblatt zu kopieren, die ganze Datei kopieren und mit den ausgewählter Kundennummer?
Gruß
Didi
Anzeige
AW: Per VBA Zeilen löschen
26.06.2020 12:44:43
fcs
Hallo Didi,
ich habe das Makro in der Datei angepasst, so die komplette Datei kopiert wird, bevor die Liste auf die gewählte Kundennummer eingekürzt wird.
Wichtig: Damit die Gesamtdaten auf dem Blatt mit dem Pivotbericht nicht mehr angezeigt werden muss der Bericht ebenfalls aktualisiert werden und zusätzlich eine Option angepasst werden, damit nicht mehr vorhandene Daten in den Auswahllisten nicht mehr angezeigt werden.
Ins Makro hab ich auch noch 2 Schalter eingebaut (Variablen bolSchliessen und bolMakros) mit diesen Variablen kannst du festlegen ob
  • a) Die erstellte Arbeitsmappe nach dem Erstellen sofort geschlossen werden soll
  • b) Die Arbeitsmappe ohne Makros oder mit Makros/Userform gespeichert werden soll.

  • Der Ablauf im Makro ist jetzt so, dass von Arbeitsmappe zunächst eine Kopie als temporäre Datei gespeichert.
    Diese Datei wird geöffnet.
    Danach wird wie bei dem Einzelblatt die Liste auf die gewählte Kundennummer gekürzt.
    Vor dem Speichern werden dann noch alle Pivot-Tabellenberichte aktualisiert und die Option für Altdaten gesetzt.
    Die Temporäre Datei wird wieder gelöscht.
    Ich hab die Datei unter Excel 2010 angepasst und unter Excel 365 getestet. Es funktioniert in beiden Versionen.
    LG
    Franz
    https://www.herber.de/bbs/user/138582.xlsm
    Anzeige

    326 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige