Pogojno brisanje vrstic na več listih

Pomoč pri izdelavi makrov
Odgovori
drglzr
Prispevkov: 31
Pridružen: Če Feb 21, 2013 10:06 pm

Pogojno brisanje vrstic na več listih

Odgovor Napisal/-a drglzr »

Pozdravljeni!

Spet se oglašam in prosim za pomoč. Na internetu sem našel naslednjo kodo

Koda: Izberi vse

Sub deleteABC()

Application.screenupdating = false
lastRow = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

For i = lastRow To 1 Step -1 'When deleting or inserting rows always work backwards.
If cells(i,2).value = "abc" or cells(i,2).value = "testing" then
rows(i).delete
End If
Next i
Application.screenupdating = true
End Sub
ki sicer opravi svoje delo zame zadovoljivo (briše vrstice ob izpolnjenem 1. ali 2. pogoju), vendar bi jo želel z enim zagonom uporabiti na vseh listih aktivnega delovnega zvezka. Zato sem jo poskušal predelati v naslednjo

Koda: Izberi vse

Sub deleteABC()

Dim ws As Worksheet

For Each ws In Worksheets
    
Application.ScreenUpdating = False

LastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).row

For i = LastRow To 1 Step -1 'When deleting or inserting rows always work backwards.

If cells(i,2).value = "abc" or cells(i,2).value = "testing" then
rows(i).delete

End If

Next i

Next ws

Application.ScreenUpdating = True

End Sub
ki pa prav tako ne opravi svojega dela na vseh listih, temveč le na aktivnem listu. Karkoli poskusim spremeniti ne vpliva na dogajanje na drugih listih. Domnevam, da je težava v vrstici "LastRow=", vendar je moje znanje prešibko, da bi to lahko z gotovostjo trdil. Prav tako ne vem, kaj naj bi spremenil, da bi se koda samodejno izvedla ne le na aktivnem listu, temveč na vseh listih. Prosim za pomoč.

S spoštovanjem,

Drago
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Pogojno brisanje vrstic na več listih

Odgovor Napisal/-a admin »

Pozdravljeni,

Če ste že spremenili delovni list in temu ustrezno popravili vrstico za LastRow, kjer ste pred objekt Cells dali predpono ws, ki pač pomeni list v obdelavi, bi enako morali narediti tudi za vse druge liste. Najmanj spremembe kode pa je če se pred brisanjem pač postavite na izbrani list (.Activate) in to sem vam tudi dodal:

Koda: Izberi vse

Sub deleteABC()
  Dim ws As Worksheet
  
  Application.ScreenUpdating = False
  
  For Each ws In Worksheets
    ws.Activate
    
    LastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row

    For i = LastRow To 1 Step -1 'When deleting or inserting rows always work backwards.
      If Cells(i, 2).Value = "abc" Or Cells(i, 2).Value = "testing" Then
        Rows(i).Delete
      End If
    Next i
  Next ws

  Application.ScreenUpdating = True
End Sub
lp,
Matjaž Prtenjak
Administrator
drglzr
Prispevkov: 31
Pridružen: Če Feb 21, 2013 10:06 pm

Re: Pogojno brisanje vrstic na več listih

Odgovor Napisal/-a drglzr »

Pozdravljeni!

Ma, da bi manjkalo prav veliko se mi ni zdelo. Da pa tako malo pa tudi ne. Zadeva deluje, kot sem si zamislil.

Za spreminjanje delovnega lista in spreminjanje vrstice LastRow sem se odločil, ker nisem zgruntal kako poimenovati nedefinirano število različno poimenovanih listov in mi je bilo omenjeno spremeniti nekako bolj razumljivo. Nisem pa se domislil, kako aktivirati naslednje liste.

Najlepša hvala za pomoč.

Lep pozdrav,

Drago
Odgovori