Šta je novo?

Excel 2016 vba macro pomoc?

The Lyricist

Slavan
Učlanjen(a)
23.05.2005
Poruke
1,401
Poena
375
Moja oprema  
Laptop
MacBook M1 Air
Mobilni telefon
iPhone 12 mini
Pristup internetu
  1. Kablovski internet
Ok, moze li neko da mi pomogne kako da napravim/editujem vba makro za excel, koji treba da radi sledece...
Da od selektovane celije, odabere red, kopira ga u prvi slobodan red drugog sheeta. Koji sheet ce odabrati na osnovu 2 parametra, (sadrzaja dve celije. jedna celija daje 6 mogucih sheetova, druga jednu od 3 opcije za odredjenih 6 sheetova) zatim se vratiti u prvi sheet i obojiti selekciju.
Ja imam ovaj makro
Kod:
Sub Macro1()
    Range("B15508:I15508").Select
    Range("I15508").Activate
    Selection.Copy
    Sheets("M.Lj-MKR").Select
    Range("B31").Select
    ActiveSheet.Paste
    Sheets("Suma2016").Select
    Application.CutCopyMode = False
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
   End Sub
U principu, kontam da mi trebaju par ugnjezdenih ifova, ili neki case of, umesto prvog sheets().select samo ja ne uspevam sam da je sredim (my vb sucks, yeah)....
Ako neko ima ideju/moze da pomogne, bio bih vrlo zahvalan :)
 
Može malo pojašnjenje, jer ne razumem baš najbolje.
Kako to od selektovane ćelije da odabere red? Klikneš na neku ćeliju i startuješ makro, a da on ceo red u kojoj je ćelija prekopira u drugi sheet?
Prvi slobodan red drugog sheeta je prvi red odozgo kome su sve ćelje prazne? Da li je neka ćelija zauzetih redova uvek popunjena? Ili je neka od ćelija u prvih npr. 10 kolona uvek zauzeta? Pitam je ne znam kako bih drugačije odredio koji je red slobodan.
Biranje u koji sheet se kopira mi uopšte nije jasno. Može neki primer?
 
Može malo pojašnjenje, jer ne razumem baš najbolje.
Kako to od selektovane ćelije da odabere red? Klikneš na neku ćeliju i startuješ makro, a da on ceo red u kojoj je ćelija prekopira u drugi sheet?
pa, recimo. bolje odredjeni range oko celije (od b do i).
Prvi slobodan red drugog sheeta je prvi red odozgo kome su sve ćelje prazne? Da li je neka ćelija zauzetih redova uvek popunjena? Ili je neka od ćelija u prvih npr. 10 kolona uvek zauzeta? Pitam je ne znam kako bih drugačije odredio koji je red slobodan.
kolone od b do i se pune, sve ostalo je prazno dok se ne kopira odredjeni range is sumarnog sheet-a.
Biranje u koji sheet se kopira mi uopšte nije jasno. Može neki primer?
kada selektujem odredjeni red, on ima, izmedju ostalog, jedno ime (recimo maticara) i jednu oznaku (recimo tip izvoda). Imamo 6 maticara, i za svakog po 3 tipa izvoda. Svaka maticarka ima svoj sheet za svaki od tipa izvoda. I ja na osnovu toga sta pise u sheetu (koja je maticarka i koji tip izvoda) izaberem jedan od 18 sheetova u koj cu da paste-ujem naredni red.
 
Evo ispod sam sklepao neki makro. Zamolio bih VBA majstore da mi se ne smeju, jer i VBA i Excel koristim jako retko, pa sam koristio ono što mi je prvo palo na pamet :) Verovatno sve ovo može mnogo elegantnije.
Kod:
Sub Macro1()
    Dim kopiranje_od, kopiranje_do, kopiranje_range, kopiranje_range_2 As String
    Dim u_sheet_A, u_sheet_B, u_sheet As String
    Dim i, k, prvi_prazan_red As Long
    
    kopiranje_od = "B"
    kopiranje_do = "I"
    i = Selection.Row
    kopiranje_range = kopiranje_od + CStr(i) + ":" + kopiranje_do + CStr(i)
    u_sheet_A = ActiveSheet.Range("D" + CStr(i)).Value
    u_sheet_B = ActiveSheet.Range("E" + CStr(i)).Value
    u_sheet = u_sheet_A & "-" & u_sheet_B
    
    'prvi_prazan_red = Sheets(u_sheet).Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row
    'Ovo iznad bi trebalo da bude brze, ali ne radi uvek kako bi covek ocekivao
    'Zbog toga idemo red po red
    
    k = 1
    Do While Sheets(u_sheet).Range("B" + CStr(k)).Value <> ""
      k = k + 1
    Loop
    prvi_prazan_red = k
    kopiranje_range_2 = kopiranje_od + CStr(prvi_prazan_red) + ":" + kopiranje_do + CStr(prvi_prazan_red)
    Sheets(u_sheet).Range(kopiranje_range_2).Value = ActiveSheet.Range(kopiranje_range).Value
    With ActiveSheet.Range(kopiranje_range).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub
Ovde sam izabrao da je u koloni D prvi deo, a u koloni E drugi deo naziva za novi sheet. Između sam stavio "-". Recimo, ako je ćelija D "M.Lj", a ćelija E "MKR", onda je ime novog sheeta "M.Lj-MKR". Ako se ime novog sheeta formira na drugi način, to treba usaglasiti.
Prvi prazan red u novom sheetu sam odredio ispitivanjem kolone B. Krećem od prvog reda i zaustavljam se kada je ćelija prazna. Ako ima stotine hiljada redova, ovo može da bude sporo, pa treba koristiti bolje rešenje. Bolje rešenje radi trenutno, ali, koliko sam ukapirao, Excel smatra da je ćelija upotrebljena ako je nekada nešto pisalo u njoj, bez obzira što je sada obrisano Delete tasterom. Moguće je da se neko drugo brisanje ponaša drugačije. Ako ima potrebe zabavljaj se sa ovim :)
 
Excel + outlook

Postovani, potrebna mi je pomoc. Hteo bi da napravim vezu izmedju outlook-a i excel-a na sledeci nacin. Potrebno je da u momentu kada mi stigne mail sa odredjenim tekstom u subject-u (npr "parametar") da outlook to prepozna, otvori odrejdeni excel, kopira sve sto se nalazi u telu mail-a i sacuva u jednu celiju, kao i da kopira ime posliljaoca (email sender) i takodje sacuva u drugu celiju. Kasnije znam sta da radim sa tim. Ne mogu preko outlook rule-a da radim jer mislim da ne mogu da "uhvatim" podatak o sadrzini tela mail-a i posiljaoca i da to negde ubacim u excel. Rule moze samo da "okine" i startuje excel a ovo sto mi je bitno ne moze. Znam da mora da se napravi vba skripta u "thisoutlooksession" i module. Samo ne znam tacno kako da se programira to. Ako neko ima predlog ili savet hvala unapred
 
Nazad
Vrh Dno