..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Pogojno brisanje vrstic na več listih

Pomoč pri izdelavi makrov

Pogojno brisanje vrstic na več listih

OdgovorNapisal/-a drglzr » Če mar 12, 2015 10:23 am

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
drglzr
 
Prispevkov: 29
Pridružen: Če feb 21, 2013 10:06 pm



Matjazev.NET
 

Re: Pogojno brisanje vrstic na več listih

OdgovorNapisal/-a admin » Če mar 12, 2015 12:38 pm

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
admin
Site Admin
 
Prispevkov: 3524
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Pogojno brisanje vrstic na več listih

OdgovorNapisal/-a drglzr » Če mar 12, 2015 1:02 pm

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
drglzr
 
Prispevkov: 29
Pridružen: Če feb 21, 2013 10:06 pm


Vrni se na VBA

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 2 gostov

cron