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
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