Makro excel

Pomoč pri delu z MS Excelom
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Makro excel

Odgovor Napisal/-a ajk »

Pozdravljeni

Najprej predvsem zdravo in srečno....
Ne uspem ta del, ki ga pripenjam (spodaj je cel makro):

Koda: Izberi vse

Range("List1!A" & CStr(indeks1)) = Range("List!A" & CStr(indeks))
        Range("List1!B" & CStr(indeks1)) = Range("List!B" & CStr(indeks))
        Range("List1!C" & CStr(indeks1)) = Range("List!C" & CStr(indeks))
        Range("List1!D" & CStr(indeks1)) = Range("List!D" & CStr(indeks))
        Range("List1!E" & CStr(indeks1)) = Range("List!E" & CStr(indeks))
        Range("List1!F" & CStr(indeks1)) = Range("List!F" & CStr(indeks))
        Range("List1!G" & CStr(indeks1)) = Range("List!G" & CStr(indeks))
spraviti v subrotimo, da mi ga nebi trebalo vsakokrat pisat. Prosim za pomoč. Še eno vprašanje, kako izvesti makro, da bo vse ostalo na enem listu in ne da se rešitev vidi v listu1. Ali pa mogoče obstaja kakšna "elegantnejša" rešitev (v koloni D namreč preverjam ali se prva dva znaka ali morda trije.... začnejo z "TR", "CD"....Vse vrstice, ki ne ustrezajo pogoju se izbrišejo). Hvala na pomoči.

Koda: Izberi vse

Sub test1()

indeks = 6
indeks1 = 6
Range("List1!A1:F500").ClearContents

For indeks = 1 To 5
    If Left(Range("List!D" & CStr(indeks)), 2) = "TR" Then
        Range("List1!A" & CStr(indeks1)) = Range("List!A" & CStr(indeks))
        Range("List1!B" & CStr(indeks1)) = Range("List!B" & CStr(indeks))
        Range("List1!C" & CStr(indeks1)) = Range("List!C" & CStr(indeks))
        Range("List1!D" & CStr(indeks1)) = Range("List!D" & CStr(indeks))
        Range("List1!E" & CStr(indeks1)) = Range("List!E" & CStr(indeks))
        Range("List1!F" & CStr(indeks1)) = Range("List!F" & CStr(indeks))
        Range("List1!G" & CStr(indeks1)) = Range("List!G" & CStr(indeks))
     End If

    If Left(Range("List!D" & CStr(indeks)), 2) = "CD" Then
        Range("List1!A" & CStr(indeks1)) = Range("List!A" & CStr(indeks))
        Range("List1!B" & CStr(indeks1)) = Range("List!B" & CStr(indeks))
        Range("List1!C" & CStr(indeks1)) = Range("List!C" & CStr(indeks))
        Range("List1!D" & CStr(indeks1)) = Range("List!D" & CStr(indeks))
        Range("List1!E" & CStr(indeks1)) = Range("List!E" & CStr(indeks))
        Range("List1!F" & CStr(indeks1)) = Range("List!F" & CStr(indeks))
        Range("List1!G" & CStr(indeks1)) = Range("List!G" & CStr(indeks))
     End If
     
        indeks1 = indeks1 + 1
Next indeks
Sheets("List1").Select

End Sub
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Pozdravljeni,

Se opravičujem za zapoznele odgovore, vendar sem popolnoma spregledal vsa vprašanja v oddelku Excel :(...

Torej,

Če želite prvo kodo zapisati v funkcijo mora slednja pač sprejeti dve celi števili (index in index1):

Koda: Izberi vse

Sub delaj(indeks As Integer, indeks1 As Integer)
Range("List1!A" & CStr(indeks1)) = Range("List!A" & CStr(indeks))
        Range("List1!B" & CStr(indeks1)) = Range("List!B" & CStr(indeks))
        Range("List1!C" & CStr(indeks1)) = Range("List!C" & CStr(indeks))
        Range("List1!D" & CStr(indeks1)) = Range("List!D" & CStr(indeks))
        Range("List1!E" & CStr(indeks1)) = Range("List!E" & CStr(indeks))
        Range("List1!F" & CStr(indeks1)) = Range("List!F" & CStr(indeks))
        Range("List1!G" & CStr(indeks1)) = Range("List!G" & CStr(indeks))
End Sub
Drugega dela vprašanja pa ne razumem, saj najprej pobrišete vse na listu1 in potem neke podatke kopirate tja iz lista 'list' - kako bi potem naj vse ostalo na listu1, če pa že imate podatke na list 'list'?
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Ne gre mi in ne gre. Zakaj ne deluje "GoSub delaj"

Koda: Izberi vse

Sub test()

indeks = 6
indeks1 = 6
Range("List1!A1:F500").ClearContents

For indeks = 1 To 5
    If Left(Range("List!D" & CStr(indeks)), 2) = "TR" Then GoSub delaj
    If Left(Range("List!D" & CStr(indeks)), 2) = "CD" Then GoSub delaj
    If Left(Range("List!D" & CStr(indeks)), 2) = "CD" Then GoSub delaj
       
    indeks1 = indeks1 + 1

Next indeks
Sheets("List1").Select

End Sub


Sub delaj(indeks As Integer, indeks1 As Integer)
Range("List1!A" & CStr(indeks1)) = Range("List!A" & CStr(indeks))
        Range("List1!B" & CStr(indeks1)) = Range("List!B" & CStr(indeks))
        Range("List1!C" & CStr(indeks1)) = Range("List!C" & CStr(indeks))
        Range("List1!D" & CStr(indeks1)) = Range("List!D" & CStr(indeks))
        Range("List1!E" & CStr(indeks1)) = Range("List!E" & CStr(indeks))
        Range("List1!F" & CStr(indeks1)) = Range("List!F" & CStr(indeks))
        Range("List1!G" & CStr(indeks1)) = Range("List!G" & CStr(indeks))
End Sub
        
Kar se pa tiče drugega dela vprašanja. Ali bi lahko bil makro tako napisan, da bi se makro izvedel na samem listu "list", ne pa tako kot je sedaj napisano, da je rezulatat po izvedenem makroju na listu1

hvala za odgovore
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Takole vam ne more delati, saj funkcija delja sprejem DVA parametra vi pa jih ne podate! Torej takole nekako:

Koda: Izberi vse

Sub test()
  indeks = 6
  indeks1 = 6
  Range("List1!A1:F500").ClearContents

  For indeks = 1 To 5
    If Left(Range("List!D" & CStr(indeks)), 2) = "TR" Then delaj index, index1
    If Left(Range("List!D" & CStr(indeks)), 2) = "CD" Then delaj index, index1
    If Left(Range("List!D" & CStr(indeks)), 2) = "CD" Then delaj index, index1
       
    indeks1 = indeks1 + 1

  Next indeks
  Sheets("List1").Select
End Sub
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Pa mi noče in noče delat. Javi mi napako ByRef argument type mismatch

Koda: Izberi vse

Sub test()
  indeks = 6
  indeks1 = 6
  Range("List1!A1:F500").ClearContents

  For indeks = 1 To 5
    If Left(Range("List!D" & CStr(indeks)), 2) = "TR" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "CD" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 3) = "SLO" Then delaj indeks, indeks1
       
    indeks1 = indeks1 + 1

  Next indeks

End Sub

Sub delaj(indeks As Integer, indeks1 As Integer)
        Range("List1!A" & CStr(indeks1)) = Range("List!A" & CStr(indeks))
        Range("List1!B" & CStr(indeks1)) = Range("List!B" & CStr(indeks))
        Range("List1!C" & CStr(indeks1)) = Range("List!C" & CStr(indeks))
        Range("List1!D" & CStr(indeks1)) = Range("List!D" & CStr(indeks))
        Range("List1!E" & CStr(indeks1)) = Range("List!E" & CStr(indeks))
        Range("List1!F" & CStr(indeks1)) = Range("List!F" & CStr(indeks))
        Range("List1!G" & CStr(indeks1)) = Range("List!G" & CStr(indeks))
End Sub
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Zato, ker se ne ujemajo podatkovni tipi. Zapišite takole:

Koda: Izberi vse

Sub test()
  dim index as integer, index1 as integer

  indeks = 6
  indeks1 = 6

  '... in potem dalje vaša koda
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Najlepša hvala na pomoči. Zadeva deluje.

lp
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Pozdravljeni

Še en problem. Kako definiram da program gleda ali so točno te tri črke "KCD"..., ker ko gre program naslednjič skozi mi še enkrat izpiše isto vrstico ker naslednjič vidi prvi znak "K", ki ga ima "KCD" prav tako itd, pri naslednji prehodih skozi program. Upam da sem uspel pravilno razložiti kaj me muči.

hvala na pomoči

Del kode:

Koda: Izberi vse

    If Left(Range("List!D" & CStr(indeks)), 3) = "KCD" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 1) = "K" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KH" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KL" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KN" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 2) = "KS" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 3) = "KSK" Then delaj indeks, indeks1
    If Left(Range("List!D" & CStr(indeks)), 3) = "KSM" Then delaj indeks, indeks1
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Glede na zapisno je dovolj ena sama vrstica:

Koda: Izberi vse

    If Left(Range("List!D" & CStr(indeks)), 1) = "K" Then delaj indeks, indeks1
saj kot ste sami opazili, z njo pač pokrijete že vse preostale možnosti! S črko K ste tako pokrili že vse ostale vaše kombinacije 'KCD, KH, KL, KN... '
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Hvala
Razumem, kaj pa obstaja kakšna varjanta da mi gleda točno te tri črke ko je npr. "KCD" oziroma točno "KSM".....

lp
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Seveda,

Pri vprašanju:

Koda: Izberi vse

    If Left(Range("List!D" & CStr(indeks)), 3) = "KCD" Then delaj indeks, indeks1
vam primerja natanko črke "KCD" - točno to kar želite - toda problem, ki ste ga izpostavili je pač v tem, da vam določene vrstice obravnava večkrat, saj ustrezajo VEČIM pogojem!
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Tako kot ste napisali
admin napisal/-a: Določene vrstice obravnava večkrat, saj ustrezajo VEČIM pogojem!
Ne vem pa kako bi se tega drugače lotil.

lpv
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Kaj pa sploh želite doseči?
lp,
Matjaž Prtenjak
Administrator
ajk
Prispevkov: 60
Pridružen: So Jan 01, 2011 10:20 pm

Re: Makro excel

Odgovor Napisal/-a ajk »

Se opravičujem, zadevo sem "zakompliciral". Zaenkrat mi zadeva deluje tako kot kot je napisano.

Če lahko še eno vprašanje. Kako bi zagnal dva makroja z enim "klikom". Primer na sliki. Z prvim "otočkom" zaženem makro 1 z drugim makro 2 in z tretjim bi zagnal oba makroja.
http://www.shrani.si/f/1y/5l/3AW4XE9C/makro.jpg

hvala
lp
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro excel

Odgovor Napisal/-a admin »

Za nova vprašanja prosim odpirajte nove tematike.

Sicer pa, če privi makro poženete kot:

Koda: Izberi vse

  mojMakro1
in drugega kot

Koda: Izberi vse

  mojMakro2
Potem oba skupaj poženete preprosto tako, da ju izvedete enega za drugim v novem makru:

Koda: Izberi vse

Sub mojMakro3()
  mojMakro1
  mojMakro2
End Sub
lp,
Matjaž Prtenjak
Administrator
Odgovori