Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1672to1676
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

Fehler beim Code

Fehler beim Code
13.02.2019 06:08:07
Sebi
Hallo zusammen,
ich habe hier einen Code:

Sub Worksheet_Activate()
Dim wksAll As Worksheet
Dim wksYes As Worksheet
Dim wksNo As Worksheet
Set wksAll = Worksheets("MA Grundliste")
Set wksYes = Worksheets("nicht geschult")
Set wksNo = Worksheets("offen")
Dim lastRowAll As Long
Dim lastRowYes As Long
Dim lastRowNo As Long
Dim i As Long
Dim a As Long
Dim strVergleich As String
Dim strArtikel As String
Application.ScreenUpdating = False
'Sheet "verfügbar" ab Zeile 3 löschen
lastRowYes = wksYes.Cells(Rows.Count, 1).End(xlUp).Row
If lastRowYes = 2 Then lastRowYes = 3
wksYes.Range("A3:D" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
'Artikelliste nach "verfügbar" kopieren
lastRowAll = wksAll.Cells(Rows.Count, 1).End(xlUp).Row
wksAll.Range("A3:D" & lastRowAll).Copy Destination:=wksYes.Range("A3")
'Vergleichen und ggf. Zeile löschen
lastRowNo = wksNo.Cells(Rows.Count, 1).End(xlUp).Row
If lastRowNo = 2 Then MsgBox "Personal aktualisiert": GoTo Ende 'nichts zu vergleichen
For i = 3 To lastRowNo
strVergleich = wksNo.Range("A" & i).Value
For a = lastRowAll To 3 Step -1
strArtikel = wksYes.Range("A" & a).Value
If strVergleich = strArtikel Then
wksYes.Rows(a).Delete
End If
Next a
Next i
Ende:
Set wksAll = Nothing
Set wksYes = Nothing
Set wksNo = Nothing
End Sub

mein Problem ist, dass wenn nix drin steht die zweite zeile immer löscht.
Kann man das ändern?
Danke

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler beim Code
13.02.2019 09:44:13
Daniel
Hallo Sebi,
schwer zu sagen, ohne deine Tabellen zu sehen. Mir scheint aber der Part überflüssig zu sein:
lastRowYes = wksYes.Cells(Rows.Count, 1).End(xlUp).Row
If lastRowYes = 2 Then lastRowYes = 3
Lass den mal weg. Ich kann anhand deiner Beschreibung nur raten, an welcher Stelle er zu viel löscht.
Gruß
Daniel
AW: Fehler beim Code
13.02.2019 09:47:56
Matthias
Moin!
DAnn brich doch den Löschvorgang bei einer leeren LIste ab. ICh weiß jetzt nicht genau, welche Liste leer ist (wksAll oder wksNo). Bei einer wird die letzte Zelle (die suchst du dir ja raus) aber entweder 1 sein oder falls vorhanden bei der Überschrift landen. Dann ggf. noch prüfen, ob die Zelle auch leer ist und wenn ja, dann einfach die Löschschleife auslassen.
VG
Anzeige
AW: Fehler beim Code
13.02.2019 10:09:03
Werner
Hallo,
ich vermute mal hier:
lastRowYes = wksYes.Cells(Rows.Count, 1).End(xlUp).Row
If lastRowYes = 2 Then lastRowYes = 3
wksYes.Range("A3:D" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
Versuch mal so:
Sub Worksheet_Activate()
Dim wksAll As Worksheet, wksYes As Worksheet, wksNo As Worksheet
Dim lastRowAll As Long, lastRowYes As Long, lastRowNo As Long
Dim i As Long, a As Long
Dim strVergleich As String, strArtikel As String
Set wksAll = Worksheets("MA Grundliste")
Set wksYes = Worksheets("nicht geschult")
Set wksNo = Worksheets("offen")
Application.ScreenUpdating = False
'Sheet "verfügbar" ab Zeile 3 löschen
With wksYes
lastRowYes = .Cells(.Rows.Count, 1).End(xlUp).Row
If lastRowYes  "" Then .Range("A3:D" & lastRowYes).ClearContents
End With
'Artikelliste nach "verfügbar" kopieren
With wksAll
lastRowAll = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("A3:D" & lastRowAll).Copy Destination:=wksYes.Range("A3")
End With
'Vergleichen und ggf. Zeile löschen
With wksNo
lastRowNo = .Cells(.Rows.Count, 1).End(xlUp).Row
If lastRowNo 
Gruß Werner
Anzeige
AW: Fehler beim Code
13.02.2019 10:14:09
Daniel
Warum nicht einfach nur
wksYes.Range("A3:D" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
lastRowYes wird gar nicht mehr benötigt und soweit ich das sehe, soll ohnehin immer das ganze Blatt wksYes ab Zeile 3 geleert werden?
na ja...
13.02.2019 10:19:29
Werner
Hallo Daniel,
...das scheint mir ja das Problem zu sein, wenn lastRowYes kleiner 3 ist.
In einem leeren Blatt
Range("A3:D" & Cells(Rows.Count, 1).End(xlUp).Row).Select

dazu, dass A1 bis D3 markiert/gelöscht wird.
Das selbe natürlich wenn ich lastRowYes benutze und lastRowYes kleiner 3 ist.
Gruß Werner
Anzeige
AW: na ja...
13.02.2019 10:21:54
Daniel
Guter Punkt Werner, das hatte ich total übersehen. Geht ja auch andersherum...
AW: na ja...
13.02.2019 10:36:20
Daniel
Hi
du kannst beispielsweise mit Worksheetfunction.Max absichern, dass nur Zeilen ab Zeile 3 berücksichtigt werden.
Range("A3:D" & Worksheetfunction.Max(3, Cells(Rows.Count, 1).End(xlUp).Row)).Select
oder wenn du sowieso mit einer Variable arbeitest:
if lastRowYes >= 3 Then ... 
Gruß Daniel
AW: na ja...
13.02.2019 10:39:45
Werner
Hallo Daniel,
viele Wege führen nach Rom. Ich mach das halt meistens einfach über die Abfrage, ob die entsprechende Zelle leer ist oder nicht. Warum? Keine Ahnung, hab halt irgendwann mal so damit angefangen.
Gruß Werner
Anzeige
Nachfrage
14.02.2019 05:19:00
Sebi
Hallo zusammen,
ihr seit echt die besten. Danke :-)
Bei diesem Code ist das Problem fast das gleiche. Sobald er nur eine Zeile hat macht er ein Problem.
Kann man hier dies auch irgendwo mit einfügen ?
Wenn ja wo ?
Sub TB_Zusammenfassung_Aktualisieren()
Dim wksQ As Worksheet, wksZ As Worksheet
Dim letzteZ As Long
With Worksheets("Zusammenfassung    ")
If .FilterMode Then Call .ShowAllData
End With
Range("A3:J1000000").ClearContents
Range("A3").Select
Set wksQ = Worksheets("Daten aus CSV")
Set wksZ = Worksheets("Zusammenfassung    ")
letzteZ = Application.Max(3, wksZ.Cells(Rows.Count, 1).End(xlUp).Row + 1) 'Rows.Count, 1 welche  _
Spalte in Zusammenfassung
wksQ.Range("A2:A" & wksQ.Cells(Rows.Count, 1).End(xlUp).Row).Copy wksZ.Cells(letzteZ, 1) ' _
wksZ.Cells(letzteZ, 1 welche Spalte in Zusammenfassung
letzteZ = Application.Max(3, wksZ.Cells(Rows.Count, 7).End(xlUp).Row + 1) 'Rows.Count, 1 welche  _
Spalte in Zusammenfassung
wksQ.Range("C2:C" & wksQ.Cells(Rows.Count, 1).End(xlUp).Row).Copy wksZ.Cells(letzteZ, 7) ' _
wksZ.Cells(letzteZ, 1 welche Spalte in Zusammenfassung
letzteZ = Application.Max(3, wksZ.Cells(Rows.Count, 3).End(xlUp).Row + 1) 'Rows.Count, 1 welche  _
Spalte in Zusammenfassung
wksQ.Range("G2:G" & wksQ.Cells(Rows.Count, 1).End(xlUp).Row).Copy wksZ.Cells(letzteZ, 3) ' _
wksZ.Cells(letzteZ, 1 welche Spalte in Zusammenfassung
letzteZ = Application.Max(3, wksZ.Cells(Rows.Count, 4).End(xlUp).Row + 1) 'Rows.Count, 1 welche  _
Spalte in Zusammenfassung
wksQ.Range("H2:H" & wksQ.Cells(Rows.Count, 1).End(xlUp).Row).Copy wksZ.Cells(letzteZ, 4) ' _
wksZ.Cells(letzteZ, 1 welche Spalte in Zusammenfassung
letzteZ = Application.Max(3, wksZ.Cells(Rows.Count, 9).End(xlUp).Row + 1) 'Rows.Count, 1 welche  _
Spalte in Zusammenfassung
wksQ.Range("i2:i" & wksQ.Cells(Rows.Count, 1).End(xlUp).Row).Copy wksZ.Cells(letzteZ, 9) ' _
wksZ.Cells(letzteZ, 1 welche Spalte in Zusammenfassung
letzteZ = Application.Max(3, wksZ.Cells(Rows.Count, 8).End(xlUp).Row + 1) 'Rows.Count, 1 welche  _
Spalte in Zusammenfassung
wksQ.Range("d2:d" & wksQ.Cells(Rows.Count, 1).End(xlUp).Row).Copy wksZ.Cells(letzteZ, 8) ' _
wksZ.Cells(letzteZ, 1 welche Spalte in Zusammenfassung
Range("A2:J100000").Select
ActiveWorkbook.Worksheets("Zusammenfassung    ").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Zusammenfassung    ").Sort.SortFields.Add Key:= _
Range("A3:A100000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Zusammenfassung    ").Sort
.SetRange Range("A2:J100000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B3") = "=IFERROR(VLOOKUP(RC[5],'Daten aus SAP    '!C[-1]:C[2],2,FALSE),""Daten prü _
fen"")"
Range("E3") = "=IFERROR(VLOOKUP(RC[2],'Daten aus SAP    '!C[-4]:C[-1],4,FALSE),""Daten prü _
fen"")"
Range("F3") = "=IFERROR(VLOOKUP(RC[1],'Daten aus SAP    '!C[-5]:C[-3],3,FALSE),""Daten prü _
fen"")"
Range("F4").Select
Range("B3:B3").AutoFill Destination:=Range("B3:B" & Cells(Rows.Count, "A").End(xlUp).Row),  _
Type:=xlFillDefault
Range("E3:F3").AutoFill Destination:=Range("E3:F" & Cells(Rows.Count, "A").End(xlUp).Row),  _
Type:=xlFillDefault
Range("I3") = "=IFERROR(VLOOKUP(RC[-4],'Daten aus SAP    '!C[-5]:C[-4],2,FALSE),""Fehler"")" _
Range("i3:i3").AutoFill Destination:=Range("i3:i" & Cells(Rows.Count, "A").End(xlUp).Row),  _
Type:=xlFillDefault
End Sub
Danke :-)
Anzeige
AW: Nachfrage
15.02.2019 10:20:21
Werner
Hallo,
ziemlich nichtssagende Aussage:
Bei diesem Code ist das Problem fast das gleiche. Sobald er nur eine Zeile hat macht er ein Problem.
Bedeutet was?
Gruß Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige