Programim dhe zhvillim, javascript, python, php, html

Kodi VBA nuk shikon nëpër rreshta të fshehur për të shtuar një rresht me numër gjurmues

Kam një pyetje tjetër që shpresoj ta zgjidh me ndihmën tuaj.

Çfarë dua të bëj. Unë përdor Excel për të gjurmuar punën, aktivitetet, kontaktet e mia, etj. Ndërsa e bëja këtë, zbulova se po bëja shumë punë të përsëritura në shtimin e rreshtave në fund të një flete të quajtur "Aktivitete".

Ajo që dua të bëj është kjo: - Shtypni një buton dhe shtoni një rresht. - Rritni numrin e gjurmimit me 1 - Futni vlerat e paracaktuara

Kodi. Për ta automatizuar këtë, unë kam gjetur (kopjuar, ngjitur, rregulluar sipas nevojave të mia) kodin e mëposhtëm:

 Sub AddRowActiviteiten_NewAtEnd()
'Add's a new row at the end of the sheet.

Dim wsActiviteiten As Worksheet
Set wsActiviteiten = Sheets("Activiteiten")

DefType = "Daily"
DefStatus = "Open"
DefIssue = "*****"
DefImpact = "*****"
DefPrio = "Laag"
MyDate = Date

wsActiviteiten.Range("A4").Value = "1"

'Copy the "One Row To Rule Them All"
wsActiviteiten.Range("A3:Q3").Copy

wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteAll)

'Stop the "copy-action"
Application.CutCopyMode = False

'Increase the tracking number with "one"
LastNumber = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Value
wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = LastNumber + 1

'Insert default values
LastRow = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(-1, 0).Row
Cells(LastRow + 1, 2) = DefType
Cells(LastRow + 1, 3) = DefStatus
Cells(LastRow + 1, 4) = DefIssue
Cells(LastRow + 1, 5) = DefImpact
Cells(LastRow + 1, 6) = DefPrio
Cells(LastRow + 1, 8) = MyDate

'Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select

End Sub

Problemi. Në këtë fletë unë hap artikuj të rinj, por gjithashtu i mbyll ato. Unë e bëj këtë duke ndryshuar statusin e tyre dhe i fsheh nga pamja. Dhe kjo është pika ku shkon keq. Kur mbyll artikullin e fundit në listë dhe dua të shtoj një rresht të ri, makro shton një rresht të ri poshtë hyrjes e fundit të dukshme. Nuk gjen hyrjen e fundit që sapo kam fshehur. Dhe gjithashtu, kur kjo ndodh, shtimi i vlerave të paracaktuara në rreshtin e ri nuk funksionon. I shton ato në rreshtin sipër atij të shtuar.

Disi kjo ka kuptim të përsosur. I them makros të kërkojë hyrjen e fundit, por ajo që nuk e kuptoj është pse shikon hyrjen e fundit të dukshme dhe pse nuk duket në rreshtat e fshehur.

Për të përsëritur. Kopjo kodin në një fletë (ndoshta duhet të ndryshosh emrin e fletës) dhe shto disa rreshta. Vendosni disa informacione në rreshtin e fundit dhe fshihni. Shtoni disa rreshta të tjerë dhe shikoni se çfarë ndodh.

Zgjidhja. A ka ndonjë mënyrë për ta zgjidhur këtë? Ndoshta ka një mënyrë më të zgjuar për t'i bërë gjërat? I shikova gjërat, por kryesisht mora rezultate duke përdorur "("A" & Rows.Count).End(xlUp)". Një lak mund të funksionojë, por kam frikë se 1) nuk kërkon nëpër rreshta të fshehur dhe 2) e bën fletën (disi) të ngadaltë. Duhet të them se jam përpjekur të bëj një lak, së pari dua të shoh nëse zgjidhja ime e parë është e shpëtuar.

Faleminderit për kontributin tuaj, nëse ka ndonjë pyetje ju lutem më tregoni.

Simon EDIT: Kodi i punës për të gjithë të interesuarit

  Sub AddRowActiviteiten_NewAtEnd()
'Add's a new row at the end of the sheet.

Dim wsActiviteiten As Worksheet
Set wsActiviteiten = Sheets("Activiteiten")

DefType = "Daily"
DefStatus = "Open"
DefIssue = "*****"
DefImpact = "*****"
DefPrio = "Laag"
MyDate = Date

'Copy the One Row To Rule Them All
wsActiviteiten.Range("A3:Q3").Copy

'Offset(y,x)
'De -16 is een getal dat iets doet, maar ik weet niet wat.
wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).PasteSpecial (xlPasteAll)

'Stop the "copy-action"
Application.CutCopyMode = False

'Het volgnummer verhogen met 1
'Het laatste getal selecteren (LastNumber) en dan plus 1.
LastNumber = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(0, -16).Value
wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).Value = LastNumber + 1

'Insert default values
LastRow = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(-1, 0).Row
Cells(LastRow + 1, 2) = DefType
Cells(LastRow + 1, 3) = DefStatus
Cells(LastRow + 1, 4) = DefIssue
Cells(LastRow + 1, 5) = DefImpact
Cells(LastRow + 1, 6) = DefPrio
Cells(LastRow + 1, 8) = MyDate

'Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select

End Sub
22.06.2016

  • Unë do të përdor pyetjen tuaj si një shembull se si të bëni një pyetje. 22.06.2016
  • Ndoshta MSDN - SpecialCells mund të ndihmojë. Veçanërisht xlCellTypeLastCell 22.06.2016

Përgjigjet:


1

Përditëso

Unë shoh që fleta juaj ka një filtër automatik që "fsheh" rreshtat e statusit - të cilat Find nuk do t'i zbulojë, ndryshe nga rreshtat e fshehur.

Ju sugjerojmë të provoni këtë kod të përditësuar më poshtë:

Sub Test()

Dim rng1 As Range
If ActiveSheet.AutoFilterMode Then
    MsgBox ActiveSheet.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Row
Else
    Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
    If Not rng1 Is Nothing Then MsgBox rng1.Row
End If
End Sub

postimi fillestar

Nëse jeni duke fshehur rreshta, atëherë mund të përdorni Find me opsionin xlFormulas për të gjetur hyrje në rreshtat e fshehur (ndryshe nga xlValues).

Dim rng1 As Range
Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
MsgBox rng1.Address
23.06.2016
  • Po përpiqem të përdor këtë kod specifik në një modul të veçantë në fletën time. Kur fsheh një rresht, kjo makro shfaqet me vendndodhjen e vlerës tjetër lart, por jo atë të fshehur. Kur lexoni në xlFormulas, duhet të shfaqet një vlerë nga një vendndodhje e fshehur. A ka diçka që më mungon këtu? 23.06.2016
  • @simon a jeni në gjendje të ngarkoni një mostër të librit të punës (në cloud etj)? 24.06.2016
  • Sigurisht, ja ku shkoni: ne.tl/smyHLFDM49. Tashmë e kam shtuar kodin tënd në fletë. (kjo është lidhja e dytë, tjetra nuk ishte e mirë). 24.06.2016
  • @simon ju lutemi provoni këtë kod të përditësuar. Skedari ishte i dobishëm :) 24.06.2016
  • Faleminderit për kodin e punës. Këto janë gjëra që nuk i kam përdorur më parë, kështu që do të shoh nëse mund ta kuptoj se çfarë po ndodh dhe si mund ta përdor atë në kodin tim. Unë do të shkoj në një udhëtim për disa ditë, nëse nuk jam përgjigjur deri atëherë do të përgjigjem kur të vij. Unë e vlerësoj që po merrni kohë për të më ndihmuar dhe besoj se është e drejtë t'ju përgjigjem kur ta kem çarë këtë arrë. Tani për tani nuk do ta shënoj si të përgjigjur, pasi më parë duhet ta kuptoj dhe ta zbatoj këtë. Gëzuar, Simon 26.06.2016
  • Punon! Me një ndihmë lokale arrita ta bëja të funksiononte në fletën time. Mund të shpjegoni se çfarë bën kodi? Nuk mund ta kuptonim plotësisht. Me sa kuptoj unë është se Split e lokalizon rreshtin bosh nën një sërë të dhënash. Çfarë do të thotë Gama (1) nuk mund ta zbulonim. Ka elementë të tjerë që shkojnë përtej aftësive të mia VBA, por jam mjaft i sigurt se me kalimin e kohës kjo do të bëhet e qartë. Gjithashtu, në një fletë tjetër u përpoqa të përdor kodin, por ai ka formula në qeliza dhe kjo metodë sheh formulat dhe shkon në rreshtin tjetër për të ngjitur. Por kjo është një pyetje tjetër për më vonë. Gëzuar, Simon 27.06.2016
  • @simon Kjo linjë kthen gamën e autofilterit ActiveSheet.AutoFilter.Range.Address. Ndarja ndan diapazonin dhe më pas kthen pjesën e dytë (dmth. C10 nëse diapazoni ishte C1:C10). Split(ActiveSheet.AutoFilter.Range.Address, ":")(0)) do të kthente pjesën e parë C1. Range më pas bën një adresë për këtë. 28.06.2016
  • mund te me ndihmoni me nje pyetje tjeter qe lidhet me kete? Do të më ndihmonte shumë, përshëndetje. stackoverflow.com/questions/39120212/ 25.08.2016

  • 2

    Le të themi se kemi një kolonë statusi AB dhe aktualisht mbyllim një artikull duke vendosur fjalën "Mbyllur" në atë kolonë dhe më pas duke fshehur rreshtin.

    Në vend të kësaj:

    1. Shfaq të gjitha rreshtat
    2. Kryeni çdo futje dhe modifikim të kërkuar
    3. Nëpërmjet një qarku, fshihni të gjitha rreshtat e shënuar "Mbyllur"
    22.06.2016
  • Faleminderit për komentin tuaj Gary's Student. Unë mund të shoh se si mund të funksionojë kjo në fletën time. Por më duhet të pyes, për të kryer këto veprime sa herë që shtoj një rresht, a do ta ngadalësojë shumë fletën time kjo? 23.06.2016

  • 3

    Përdoreni këtë për të marrë rreshtin e fundit dhe ai do të shohë rreshtin e fundit, edhe nëse është i fshehur.

    LastRow = wsActiviteiten.UsedRange.Rows.Count
    
    22.06.2016
  • UsedRange nuk fillon domosdoshmërisht në rreshtin 1. Kjo nuk është e besueshme. 23.06.2016
  • Kur e provoj me shembullin që OP sugjeroi të përdorim, funksionon. Pra, bazuar në këtë ... duket se funksionon mirë. o.O 23.06.2016
  • E kuptoj që kjo mund të jetë e pabesueshme, por në këtë makro specifike, në atë pikë specifike, mendoj se mund të funksionojë. Faleminderit për përgjigjen tuaj Rodger. 23.06.2016
  • Për të shtuar në komentin tim të mëparshëm. Unë e kam testuar këtë dhe bën atë që thotë se bën. 23.06.2016
  • Mund të funksionojë për rastin siç është testuar, por UsedRange nuk është i besueshëm pasi Excel harron në mënyrë rutinore diapazonin aktual dhe Rreshtat. Numërimi në këtë mënyrë supozon se ka të dhëna që fillojnë në rreshtin 1. 24.06.2016

  • 4

    Sapo gjeta zgjidhjen:

    Nëse keni të paktën një kolonë në diapazonin tuaj me të dhëna 'konsistente' (të gjitha qelizat në atë kolonë nuk janë bosh/bosh), mund të përdorni formulën COUNTA dhe mund t'i referoheni kodit tuaj në vlerën e asaj formule COUNTA.

    Për shembull:

    Fut formulën '=COUNTA(A1:A100000)' në qelizën 'B1'.

    Në B1 do të merrni se sa rreshta keni ato janë të fshehura apo jo.

    Në ndryshimin e kodit tuaj:

    wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteAll)
    

    to

    wsActiviteiten.Range("A" & Range("B1").Value).Offset(1, 0).PasteSpecial (xlPasteAll)
    

    Sigurisht, nëse, për shembull, qeliza 'A2' është bosh dhe kjo është e vetmja qelizë bosh, do t'ju duhet të rregulloni formulën tuaj në '=COUNTA(A1:A100000) +1'.

    Nëse keni më shumë qeliza bosh/bosh dhe nuk e dini numrin e saktë të tyre (qelizat bosh janë ndryshuar në mënyrë dinamike), kjo metodë nuk do të funksionojë. Siç thashë më parë, ju duhet të keni të paktën një kolonë me të dhëna 'konsistente' (me numër të njohur të qelizave boshe paraprakisht nëse ka).

    17.08.2018
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..