[ inzenjerija @ 04.10.2018. 12:41 ] @
Pozdrav narode!

Imam problem sa selektovanjem i kopiranjem opsega. u koloni A su podaci koje treba selektovati pa potom kopirati od prve pa sve do zadnje popunjene celije s tim što u tom opsegu ima i praznih celija koje i treba da budu prazne i kao takve da se selektuju i kopiraju.
Nasao sam makro

Code:
 Sub KOPIRANJE()

        

    Dim LastRow         As Long
    Dim i               As Long
    Dim Range           As Range
        
    With Sheets("OSNOVA").Activate
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        
            Range("A1:A" & LastRow).Select
            
                Selection.Copy

    End With
End Sub


ali ima debug koji nisam u stanju da otklonim.
Znaci kao da sam odradio SELECT - COPY, a potom peske treba da idem gde mi treba da odradim CTRL+V
Znali neko kako ovo da odradim.
Hvala unapred
[ snenad_82 @ 04.10.2018. 13:51 ] @
Recimo
Code:
Sub KOPIRANJE()
    
    Dim LastRow         As Long
    Dim i               As Long        
    With Sheets("OSNOVA").Activate
        LastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row        
            Range("A1:A" & LastRow).Select            
                Selection.Copy
    End With
End Sub

Ne treba definisati Range jer je već definisan i malo sam izmenio kako se nalazi zadnja popunjena ćelija.
Ko zna više može dalje optimizovati kod.
[ bokinet @ 04.10.2018. 14:11 ] @
Ako je naziv "OSNOVA" sheet-a odakle se kopira onda je dati kod uredu a ako nije i ako je kao u prilozenom Excel file-u onda treba da ide "Sheet1" umesto "OSNOVA"

Ako nije potrebno da se prvo odabere i aktivira odredjeni sheet kao sto je vec dato u kodu, vec da se koristi trenutni, onda treba ukloniti deo kod koji se na to odnosi.


Dati kod samo vrsi f-ju COPY cele kolone A u clipboard ali ne i f-ju PASTE

U prilogu Excel file sa obe varijante koda u VBA. Takodje je promenjen namerno donji redosled sheet-ova i 'sheet1' je stavljen na poslednje mesto a 'sheet2' na prvo.

Iz Excel file kod - nekoliko nacina...

Code:


Sub KopirajV1()

    Dim LastRow As Long

    Sheets("Sheet1").Activate
    LastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Range("A1:A" & LastRow).Copy
    'Selection.Copy
    
End Sub


Sub KopirajV2()

    Dim LastRow As Long

    LastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Range("A1:A" & LastRow).Copy
    'Selection.Copy

End Sub


Sub KopirajV3()

    Dim LastRow As Long

    With Sheets("Sheet1")
        .Activate
        LastRow = .Cells(.Cells.Rows.Count, "A").End(xlUp).Row
        .Range("A1:A" & LastRow).Copy
    End With
    
End Sub


[ inzenjerija @ 05.10.2018. 11:29 ] @
hvala Vam Nenade naravno i tebi Boki

ovo radi radnju kada su u pitanju popunjene celije odnosno zaboravio sam da kazem da su na originalnom fajlu ispinjene celije u koloni A od 1 do 12000 formulama.
e sad formulama je uslovljeno da ako nema rezultata da je celija blanko, medjutim u njoj postoji formula, zato ovi makroji racunaju da su to popunjene celije od 1 do 12000 a treba recimo od 1 do 550
[ bokinet @ 05.10.2018. 13:39 ] @
pa da dobro ono sto se zaboravi to onda nije napisano i receno te tako ako nije problem da se onda opet definise sa vase strane sta se hoce?

takodje, recimo od 1 do 550 znaci da moze da bude i 0 i 1 ali i recimo 1 do 250 ili opet recimo 1 do 1500 :)

[ inzenjerija @ 06.10.2018. 20:13 ] @
evo konkretnog primera odnosno na cemu radim da bi bolje razumeli problematiku.
U svemu ovome sve se vrti oko kolone V. zadnji ispisani rezultat je u celiji V2325. a makro koji ste postavili kopira celije sve do V12000.
Kao sto sam prethodno rekao postoje formule u celije od V8 pa sve do V12000. kada kopiram preko makroa i idem da kopiram na promer u NOTEPAD-u on iskopira praznih oko 9000 praznih redova.
dali sada razumete
[ bokinet @ 06.10.2018. 21:11 ] @
Na osnovu vaseg priloga i ako sam lepo prebrojao kolone onda bi to nesto bilo ovako...

Code:


Sub MakeCopy4Me()

    Dim iTotalRows As Long
    Dim iRow As Long
    Dim i As Long

    ' Get total number of rows in sheet
    iTotalRows = ActiveSheet.UsedRange.Columns(22).Rows.Count

    ' Go from last row till first row from back which has data in cell
    For i = iTotalRows To 1 Step -1
    
        If Cells(i, 22).Value <> "" Then
            
            iRow = i
            Exit For

        End If
        
    Next
    
    ' Make a copy of range
    ActiveSheet.Range("V1:V" & iRow).Copy

End Sub

[ inzenjerija @ 06.10.2018. 21:25 ] @
to je to Boki. hvala ti neizmerno

ako nije problem moze li povise ili u nastavku svakog reda koda da napises sta tacno koja komada radi, cisto da bi razumeli kod.
laik sam za ovo zato mi dosta znaci a nadam se i ostalima da znam eto da bih mozda mogao i u neke druge svrhe da se ovaj kod iskoristi.

jos jednom najlepse hvala Boki
[ bokinet @ 06.10.2018. 23:28 ] @

Ajd da probamo ovako...

Code:


Sub MakeCopy4Me()

    ' Deklarisanje (definisanje) naziva i
    ' vrste za svaku promenljivu koja se koristi u ovom delu koda
    ' Sve tri su tipa Long - dugacki broj
    Dim iTotalRows As Long
    Dim iRow As Long
    Dim i As Long

    ' U promenljivu 'iTotalRows' se smesta vrednost
    ' koja predstavlja ukupan broj zauzetih redova za kolonu 22
    iTotalRows = ActiveSheet.UsedRange.Columns(22).Rows.Count

    ' Petlja koja ide od
    ' ukupnog broja zauzetih redova definisanih u 'iTotalRows' promenljivi do prvog reda (radi se u kontra smeru od najveceg ka najmanjem; zato se u delu FOR, za korak 'Step' koristi -1)
    ' (Petlja je deo koda koji se ponavlja odredjeni broj puta i koji pocinje sa FOR a zavrsava sa NEXT)
    For i = iTotalRows To 1 Step -1
    
        ' IF Uslov koji proverava ako postoji vrednost u trenutnoj celiji koja nije prazna vrednost onda
        ' (Cells(Row,Col) - gde je 'i' promenljiva vrednost za 'Row' a '22' je broj kolone)
        If Cells(i, 22).Value <> "" Then
            
            ' Azuriraj vrednost iRow posto smo dobili osnovni uslov i nasli prvu vrednost za celiju (polje) koja ima vrednost
            iRow = i
            
            ' Izadji iz petlje posto nema vise potrebe da proveravamo osnovni uslov
            Exit For

        End If
        
    Next
    
    ' Selektuj kolonu V gde je su vrednosti u opsegu od pocetka pa sve do
    ' iRow vrednosti tj. poslednje (prve od pozadi) celije koja ima vrednost i kopiraj u bafer tj. clipboard
    ActiveSheet.Range("V1:V" & iRow).Copy

End Sub