..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Makro excel

Pomoč pri delu z MS Excelom

Makro excel

OdgovorNapisal/-a ajk » Ne jan 02, 2011 3:37 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm



Matjazev.NET
 

Re: Makro excel

OdgovorNapisal/-a admin » Če jan 06, 2011 9:07 pm

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » To jan 11, 2011 8:19 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » To jan 11, 2011 8:26 pm

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » To jan 11, 2011 8:55 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » To jan 11, 2011 11:10 pm

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » Če jan 13, 2011 8:09 pm

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

lp
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a ajk » So mar 26, 2011 10:06 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » Ne mar 27, 2011 11:09 am

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » Ne mar 27, 2011 2:42 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » Ne mar 27, 2011 3:46 pm

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » Ne mar 27, 2011 8:44 pm

Tako kot ste napisali

admin je napisal/-a: Določene vrstice obravnava večkrat, saj ustrezajo VEČIM pogojem!


Ne vem pa kako bi se tega drugače lotil.

lpv
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » Ne mar 27, 2011 8:47 pm

Kaj pa sploh želite doseči?
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Re: Makro excel

OdgovorNapisal/-a ajk » Ne mar 27, 2011 9:21 pm

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
ajk
 
Prispevkov: 48
Pridružen: So jan 01, 2011 10:20 pm

Re: Makro excel

OdgovorNapisal/-a admin » Ne mar 27, 2011 10:23 pm

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
admin
Site Admin
 
Prispevkov: 3532
Pridružen: Sr jul 20, 2005 10:06 pm

Naslednja

Vrni se na Excel

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 3 gostov

cron