[ Blue82 @ 10.06.2017. 09:15 ] @
Obrisati (za administratore) [Ovu poruku je menjao Blue82 dana 10.06.2017. u 10:30 GMT+1] |
[ Blue82 @ 10.06.2017. 09:15 ] @
[ Jpeca @ 12.06.2017. 08:36 ] @
Ako je potrebno da se nađe sadražaj prva ćelije koja sadraži tekst možeš da koristiš HLOOKUP. Za prvi red:
Code: =HLOOKUP("*";A2:D2;1;FALSE) * traži bilo kakav tekst tako da će se preskočiti prazne ćelije kao i one koje sadrže numeričke podatke(ili datume) [ Blue82 @ 13.06.2017. 21:07 ] @
Resio sam ovo iznad, cim sam postavio post, valjda kako sam stisnuo enter tako mi se ukazala jednostavnost resenja. Pokusah obrisati, a Vi ste mi odgovorili verovatno na poruku koja se ovde ne vidi a Vi vidite sve izmene poruke pa sada izgleda glupo. No da ne zjapi ovako prazna tema pitao bih nesto novo.
Code: Sub Button3_Click() Call KopirajIzDrugogExcelFajla("C:\Users\Mladen\Desktop\a.xls", "Sheet1", "Start") Call KonvertujTekstUDatum("D") Call KonvertujTekstUDatum("E") End Sub Private Sub KopirajIzDrugogExcelFajla(putanjaDoFajla As String, NazivSheetaKojiKOpiram As String, NazivSheetaUKojiKopiram As String) 'ovaj sub otvori neki drugi fajl, ocita odredjeni sheet i kopira u odredjeni sheet ovog fajla tj ovog Excela koji koristim 'primer KopirajIzDrugogExcelFajla("C:\Users\Mladen\Desktop\Automatizacija predloga za placanje.xlsm","Sheet1","Sheet1") Dim wkb1 As Workbook 'Workbook Excela koji koristim Dim sht1 As Worksheet 'Sheet Excel fajla koji koristim Dim wkb2 As Workbook 'Workbook drugog Excel fajla Dim sht2 As Worksheet 'Sheet drugog Excel fajla Application.ScreenUpdating = False Set wkb1 = ThisWorkbook Set wkb2 = Workbooks.Open(putanjaDoFajla) Set sht1 = wkb1.Sheets(NazivSheetaUKojiKopiram) Set sht2 = wkb2.Sheets(NazivSheetaKojiKOpiram) sht2.Cells.Copy sht1.Range("A1").PasteSpecial xlPasteAll Application.CutCopyMode = False wkb2.Close True Application.ScreenUpdating = True 'izvrsio sam kopiranje, zatim brisem poslednji red posto je tu zbir koji mi ne treba PoslednjiRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row Rows(PoslednjiRow).Delete End Sub Private Sub KonvertujTekstUDatum(nazivKolone As String) 'ovaj sub konvertuje sve datume u odredjenoj koloni koji se nalaze u formatu TEXT u format DATUM 'nazivKolone - unosi se slovo kolone u kojoj se konverzija vrsi. npr. KonvertujTekstUDatum("C") Sheets("Start").Select Dim brRedova As Long, r As Range N = Cells(Rows.Count, nazivKolone).End(xlUp).Row For i = 2 To N Set r = Cells(i, nazivKolone) r.Value = CDate(r.Value) Next i End Sub Program pocinje klikom na Button 3. Kopira podatke iz nekog drugog fajla iz Sheet1 i smesta ih u Sheet "Start" u ovom Workbook-u. Zatim se pokrece sub KonvertujTekstUDatum koji datume koji pisu u D i E koloni kao string, prevodi u formu datuma. E tu se desava nesto sto ne umem da objasnim zasto. Button 3, klikom na koji sve pocinje nalazi se u nekom drugom sheet-u. Program kopira u Sheet "Start" podatke i kada se startuje Sub KonvertujTekstUDatum, iako u prvoj liniji kazem Sheets("Start").Select, program ostane u sheet-u u kome se nalazi Button 3 i pokusava u njemu da promeni datume koji se tu ni ne nalaze. Mogu problem da resim komandom Worksheets("Start").Activate ali mi nije jasno zasto mi je ona uopste potrebna, tj zasto ne radi code iznad? Primera radi ako kazem sledeci code, program ce bez problema otici u Sheet1 i kopirati podatke a zatim ce otici u sheet2 i tu ce paste podatke. Zasto po toj logici ne radi i moj primer iz pitanja? Code: Sheets("Sheet1").Select Range(i & ":" & i).Copy Sheets("Sheet2").Select Range(pasteKolona & ":" & pasteKolona).PasteSpecial xlPasteValues [ Jpeca @ 14.06.2017. 08:32 ] @
Shvatio sam da si rešio prvi problem, ali nisi napisao kako, pa reko bolje da odgovorim - možda će neko imati sličan problem - nego da obrišem. Ja forum shvatam kao mesta gde ćemo dati odgovore na neka uobičajena pitanja, a ne samo rešenje za pojedinačne probleme.
Što se tiče problema sa kodom nisam imao tvoj primer, ali sam postavio tvoj kod KonvertujTekstUDatum i sa Sheet1 klikom na dugme Test pozvao proceduru Test koja poziva KonvertujUDatum. Sve prođe bez problema - prebaci se u list Start i odradi konverziju u zadatoj koloni. Ne znam gde ti se nalazi kod u Worksheet ili Modulu? Uglavnom možeš da postaviš Breakpoint na liniji Code: Sheets("Start").Select I onda klik na dugme i kad se zustavi na breakpoint izvršavaš liniju po liniju (F8), a u Immediate window proveravaš koji list je aktivan ![]() Ono što se meni čini kao eventualni problem je Code: PoslednjiRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row ActiveSheet je onaj gde je dugme - valjda bi trebalo sht1? Inače što se tiče komandi Acitvate i Select u principu ih izbegavaj u kodu jer se njima menja prikaz tokom izvšrenja - jednostavno koristiš Set sht1 = ... i onda sh1.Cellls .... kao što si uradio u kodu KopirajIzDrugogExcelFajla [Ovu poruku je menjao Jpeca dana 14.06.2017. u 12:05 GMT+1] [ Blue82 @ 14.06.2017. 18:38 ] @
Imas zaista ostro oko...
Problem je bio ovde: Code: PoslednjiRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row Tu ga je ActiveSheet vratio na pogresan sheet. Hvala puno! Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|