Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1532to1536
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
Zeilen löschen funktioniert nur teilweise
31.12.2016 22:00:23
Oisse
Guten Abend zusammen,
ich kopiere Zeilen und füge sie in ein anderes Tabellenblatt in einer anderen Mappe ein. Das funktioniert sehr gut.
Nun möchte ich die kopierten Zeilen in der Quelle löschen. Das funktioniert nur teilweise.
Es werden zwar Zeilen gelöscht, aber eben nicht alle.
Habe schon alles mögliche probiert und komm nicht dahinter, was am Code falsch ist.
For Each rng_Row In Selection.Rows
slng = wks_Verk.Cells(Rows.Count, 1).End(xlUp).Row
wks_Art.Rows(rng_Row.Row).Copy: wks_Verk.Rows(slng + 1).Insert Shift:=xlUp
wks_Verk.Range("X" & slng + 1).Value = Label1 & Endung.Endung
Next
'Löschen der bereits in "Verkauft" befindlichen Artikel aus der Tabelle "Artikel"
wks_Art.Activate
'For Each rng_Row In Selection.Rows
'wks_Art.Rows(rng_Row.Row).Delete Shift:=xlUp
'Next
For L = Selection.Rows.Count To 1 Step -1
Selection.Rows(L).Delete
Next

Ich habe schon mehrere Varianten ausprobiert, aber es werden nicht alle Zeilen gelöscht, obwohl sie die Zelle, in der sich die Suchwerte befinden, selektiert sind.
Kann bitte jemand helfen?

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 22:02:51
Hajo_Zi
warum nicht einfach
wks_Art.Rows(rng_Row.Row).delete
Gruß Hajo
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 22:42:47
Oisse
Hallo Hajo und danke für die schnelle Antwort.
Meintest du so?
wks_Art.Activate
wks_Art.Rows(rng_Row.Row).Delete

Es kommt die Fehlermeldung Objectvariable oder With-Blockvariable nicht festgelegt.
Was ist denn nun wieder falsch, wenn doch alles andere funktioniert?
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 22:48:34
Hajo_Zi
Activate ist nicht notwendig.
Warum die Fehlermeldung kommt ist mir nicht klar Du verwendest ja schon das Objekt.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Gruß Hajo
Anzeige
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 23:03:35
Oisse
Das mit dem verlinken, verstehe ich nicht so ganz.
Wie meinst du das bzw. wie funktioniert das?
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 23:06:04
Hajo_Zi
es gibt den Schalter File-Upload.
Link wäre eigene Homepage oder anderer Speicher im Internet.
Gruß Hajo
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 23:28:51
Oisse
Kann ich leider nicht machen. Ich denke du kennst die Gründe.
Aber trotzdem vielen Dank für deine Hilfe.
Gruß Oisse
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 23:17:54
Gerd
Hallo Oisse!
Vielleicht reicht das. Du hast halt nur einen Teil deiner Prozedur gezeigt.
Dim wks_Verk As Worksheet, slng As Long, Q As Range
Set Q = Selection.EntireRow
Set wks_Verk = Tabelle2 'Anpassen
With wks_Verk
slng = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Q.Copy .Cells(slng, 1)
Q.Delete
.Range(.Cells(slng, 24), .Cells(.Cells(.Rows.Count, 1) _
.End(xlUp).Row, 24)) = "Label1" & "Endung.Endung"
End With
Guten Rutsch!
Gerd
Anzeige
AW: Zeilen löschen funktioniert nur teilweise
31.12.2016 23:39:02
Oisse
Hallo Gerd und danke für deine Antwort.
Ich kann gerne den ganzen Code zeigen.
Ich hoffe, er ist nicht allzu unübersichtlich:

Private Sub ArtikelNachVerkauft_Click()
Dim c           As Range
Dim wsTarget    As Worksheet
Dim firstAddress As String
Dim arrFiles    As Variant
Dim arrSheets   As Variant
Dim i           As Integer
Dim int_Counter As Integer
Dim int_Column  As Integer
Dim rng_Row As Range
Dim wkb As Workbook
Dim wks_Art As Worksheet
Dim AusW As Variant
Dim WBAusW As Workbook
Dim wks_Verk As Worksheet     'Zieldatei ist das Worksheet "Auswertung Verkauft"
Dim sPfad As String
AusW = ThisWorkbook.Path & "\Auswertung Artikelliste.xlsm"
AusW = CStr(AusW)
If AusW = "Falsch" Then Exit Sub
'öffnen der ausgewählten Datei
Set WBAusW = Workbooks.Open(AusW)
'Screenflicker unterdrücken
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set wkb = ThisWorkbook
Set wks_Art = wkb.Worksheets("Artikel")
Set wks_Verk = WBAusW.Worksheets("Verkauft")
wks_Art.Activate
Call Endung.Ende          'Endung für Bezahlt
UserForm6.Show
strFinde = Label1
If Right$(Label1, 2) = Endung.Endung Then
arrFiles = Array(wkb)
arrSheets = Array(wks_Art)
'Screenflicker unterdrücken
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 0 To UBound(arrFiles)
With wks_Art.Range("X:X")
Set c = .Find(Label1, LookIn:=xlValues, LookAt:=xlWhole)
If c Is Nothing Then    'Wenn die Vorgangsnummer nicht vorhanden oder falsch ist,  _
dann den Vorgang abbrechen
If MsgBox("Diese Vorgangsnummer ist nicht vorhanden", vbOKOnly, "Achtung") =  _
vbOK Then
Unload UserForm1
Exit Sub
End If
End If
If Not c Is Nothing Then
firstAddress = c.Address
Range(c.Address).Select      'Die Zeile in der der zu suchende Wert ist  _
markieren
Do
Union(Selection, Range(c.Address)).Select     'alle Zeilen in denen der zu  _
suchende Wert vorkommt markieren
'Finde den nächsten passenden Eintrag
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
Next
'Screenflicker unterdrücken
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Ab hier erfolgt dann das Auslesen der Daten aus den entsprechenden Zellen der oben  _
selektierten Zeilen
'und die Zuordnung in die Tabelle Verkauft
For Each rng_Row In Selection.Rows
slng = wks_Verk.Cells(Rows.Count, 1).End(xlUp).Row
wks_Art.Rows(rng_Row.Row).Copy: wks_Verk.Rows(slng + 1).Insert Shift:=xlUp
Next
'Löschen der bereits in "Verkauft" befindlichen Artikel aus der Tabelle "Artikel"
wks_Art.Activate
wks_Art.Rows(rng_Row.Row).Delete
'In der Tabelle "Verkauft" werden die Zeilen auf automatische Zeilenhöhe gesetzt, die Tabelle  _
erweitert und doppelte Werte gelöscht
With wks_Verk
.Activate
.Rows("2:" & slng).AutoFit
.Range("A1:AB" & slng).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,  _
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28), Header:=xlYes
End With
'*********************************************************************************************** _
'Ende der Eintragung in Tabelle "Verkauft"
'*********************************************************************************************** _
Unload UserForm1
Exit Sub
End If
wks_Art.Activate
'*********************************************************************************************** _
'Wenn die Endung noch nicht vorhanden ist für Bezahlt, wird gefragt ob bezahlt ist
'Wenn Ja, dann wird die Endung gesetzt und das Kopieren wird vorgenommen, bei Nein wird  _
abgebrochen
'*********************************************************************************************** _
If Right$(Label1, 2)  Endung.Endung Then
If MsgBox("Sind die Artikel bereits bezahlt?" & Chr(10) & _
"Wenn nicht, dürfen die Artikel nicht ausgegeben werden" & Chr(10) & _
"Der Vorgang wird dann abgebrochen", vbYesNo, "Vorsicht!") = vbYes Then
'*********************************************************************************************** _
' Eintragung in die Tabelle "Verkauft"
'*********************************************************************************************** _
If Right$(Label1, 2) = Endung.Endung Then
Label1 = Label1
End If
arrFiles = Array(wkb)
arrSheets = Array(wks_Art)
'Screenflicker unterdrücken
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 0 To UBound(arrFiles)
With wks_Art.Range("X:X")
Set c = .Find(Label1, LookIn:=xlValues, LookAt:=xlWhole)
If c Is Nothing Then    'Wenn die Vorgangsnummer nicht vorhanden oder falsch ist,  _
dann den Vorgang abbrechen
If MsgBox("Diese Vorgangsnummer ist nicht vorhanden", vbOKOnly, "Achtung") =  _
vbOK Then
Unload UserForm1
Exit Sub
End If
End If
If Not c Is Nothing Then
firstAddress = c.Address
Range(c.Address).Select      'Die Zeile in der der zu suchende Wert ist  _
markieren
Do
Union(Selection, Range(c.Address)).Select     'alle Zeilen in denen der zu  _
suchende Wert vorkommt markieren
'Finde den nächsten passenden Eintrag
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
Next
'Screenflicker unterdrücken
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Ab hier erfolgt dann das Auslesen der Daten aus den entsprechenden Zellen der oben  _
selektierten Zeilen
'und die Zuordnung in die Tabelle Verkauft
For Each rng_Row In Selection.Rows
slng = wks_Verk.Cells(Rows.Count, 1).End(xlUp).Row
wks_Art.Rows(rng_Row.Row).Copy: wks_Verk.Rows(slng + 1).Insert Shift:=xlUp
wks_Verk.Range("X" & slng + 1).Value = Label1 & Endung.Endung
Next
'Löschen der bereits in "Verkauft" befindlichen Artikel aus der Tabelle "Artikel"
'wks_Art.Activate
wks_Art.Rows(rng_Row.Row).Delete
'For L = Selection.Rows.Count To 1 Step -1
'Selection.Rows(L).Delete
'Next
'For Each rng_Row In Selection
'    wks_Art.Rows(rng_Row.Row).Delete Shift:=xlUp
'Next
'In der Tabelle "Verkauft" werden die Zeilen auf automatische Zeilenhöhe gesetzt, die Tabelle  _
erweitert und doppelte Werte gelöscht
With wks_Verk
.Activate
.Rows("2:" & slng).AutoFit
'.ListObjects(1).Resize .Range(.Cells(1, 1), .Cells(slng + 1, "AA"))
.Range("A1:AB" & slng).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,  _
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28), Header:=xlYes
End With
'*********************************************************************************************** _
'Ende der Eintragung in Tabelle "Verkauft"
'*********************************************************************************************** _
Unload UserForm1
End If
End If
End Sub

Gruß Oisse
Anzeige
AW: Zeilen löschen funktioniert nur teilweise
01.01.2017 09:46:22
Daniel
Hi
Das Problem ist folgendes:
Die Indexzählung in einem Zell Bereich geht immer von der linken oberen Zelle aus und der Rest ist irrelevant.
Die Ansprache über die Indexnummer funktioniert nur in lückenlos zusammenhängenden Zellbereichen.
Hast du einen Bereich mit Lücken, dann gehören die Lücken trotzdem mit dazu.
Dh Range("a1,c1")(2) ergibt die Zelle B2 und nicht C2.
Verwende zum Löschen der selektierten Zeilen anstelle der Schleife das:
Selection.EntireRow.Delete
Frohes Neues, Daniel
AW: Zeilen löschen funktioniert nur teilweise
01.01.2017 15:51:34
Oisse
Hallo Daniel,
ich hatte gestern Abend noch genau diesen Code ausprobiert. Inspiriert durch den Code von Gerd. Und es klappt hervorragend. Danke für deine sehr gute Erklärung und deine Hilfe.
Überhaupt: Vielen herzlichen Dank auch an Hajo und Gerd.
Gruß
Oisse
Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige