15. juni 2007 - 22:06Der er
13 kommentarer og 1 løsning
Kan Makro laves smartere?
Jeg har 3 forskellige lister: Liste 1: Navne Liste 2: Byer Liste 3: Måneder
Jeg har brug for at man i hver liste vælger hvem man er, og hvilken by og måned man ønsker og så skal der så fremkomme et resultat fra et data ark.
Dvs. der er et dataark til hver person, som er opdelt i byer og måneder.
Jeg er nybegynder med Makroer, men har lavet nedenstående makro der sådan set virker, men den er bare ret lang, og ikke færdig endnu. Er der nogen mulighed for at gøre det smartere, eller er jeg nød til at copy paste i makroen, og så tilrette?
Håber spørgsmålet er forstået!
(der er 4 personer, 3-5 byer pr. person og 12 mdr. =4x4x12=192 forskellige resultater)
'Steen og By1 If Range("b12") = 2 And Range("d12") = 1 Then If Range("E12") = 1 Then Range("E14") = Range("Steen!D17 ") End If
If Range("E12") = 2 Then Range("E14") = Range("Steen!e17 ") End If
If Range("E12") = 3 Then Range("E14") = Range("Steen!f17 ") End If
If Range("E12") = 4 Then Range("E14") = Range("Steen!g17 ") End If
If Range("E12") = 5 Then Range("E14") = Range("Steen!h17 ") End If
If Range("E12") = 6 Then Range("E14") = Range("Steen!i17 ") End If
If Range("E12") = 7 Then Range("E14") = Range("Steen!j17 ") End If
If Range("E12") = 8 Then Range("E14") = Range("Steen!k17 ") End If
If Range("E12") = 9 Then Range("E14") = Range("Steen!l17 ") End If
If Range("E12") = 10 Then Range("E14") = Range("Steen!m17 ") End If
If Range("E12") = 11 Then Range("E14") = Range("Steen!n17 ") End If
If Range("E12") = 12 Then Range("E14") = Range("Steen!o17 ") End If
End If
' Steen og by2 If Range("b12") = 2 And Range("d12") = 2 Then If Range("E12") = 1 Then Range("E14") = Range("Steen!D18 ") End If
If Range("E12") = 2 Then Range("E14") = Range("Steen!e18 ") End If
If Range("E12") = 3 Then Range("E14") = Range("Steen!f18 ") End If
If Range("E12") = 4 Then Range("E14") = Range("Steen!g18 ") End If
If Range("E12") = 5 Then Range("E14") = Range("Steen!h18 ") End If
If Range("E12") = 6 Then Range("E14") = Range("Steen!i18 ") End If
If Range("E12") = 7 Then Range("E14") = Range("Steen!j18 ") End If
If Range("E12") = 8 Then Range("E14") = Range("Steen!k18 ") End If
If Range("E12") = 9 Then Range("E14") = Range("Steen!l18 ") End If
If Range("E12") = 10 Then Range("E14") = Range("Steen!m18 ") End If
If Range("E12") = 11 Then Range("E14") = Range("Steen!n18 ") End If
If Range("E12") = 12 Then Range("E14") = Range("Steen!o18 ") End If
End If
' Steen og by3 If Range("b12") = 2 And Range("d12") = 3 Then If Range("E12") = 1 Then Range("E14") = Range("Steen!D19 ") End If
If Range("E12") = 2 Then Range("E14") = Range("Steen!e19 ") End If
If Range("E12") = 3 Then Range("E14") = Range("Steen!f19 ") End If
If Range("E12") = 4 Then Range("E14") = Range("Steen!g19 ") End If
If Range("E12") = 5 Then Range("E14") = Range("Steen!h19 ") End If
If Range("E12") = 6 Then Range("E14") = Range("Steen!i19 ") End If
If Range("E12") = 7 Then Range("E14") = Range("Steen!j19 ") End If
If Range("E12") = 8 Then Range("E14") = Range("Steen!k19 ") End If
If Range("E12") = 9 Then Range("E14") = Range("Steen!l19 ") End If
If Range("E12") = 10 Then Range("E14") = Range("Steen!m19 ") End If
If Range("E12") = 11 Then Range("E14") = Range("Steen!n19 ") End If
If Range("E12") = 12 Then Range("E14") = Range("Steen!o19 ") End If
End If
' Steen og by4 If Range("b12") = 2 And Range("d12") = 4 Then If Range("E12") = 1 Then Range("E14") = Range("Steen!D20 ") End If
If Range("E12") = 2 Then Range("E14") = Range("Steen!e20 ") End If
If Range("E12") = 3 Then Range("E14") = Range("Steen!f20 ") End If
If Range("E12") = 4 Then Range("E14") = Range("Steen!g20 ") End If
If Range("E12") = 5 Then Range("E14") = Range("Steen!h20 ") End If
If Range("E12") = 6 Then Range("E14") = Range("Steen!i20 ") End If
If Range("E12") = 7 Then Range("E14") = Range("Steen!j20 ") End If
If Range("E12") = 8 Then Range("E14") = Range("Steen!k20 ") End If
If Range("E12") = 9 Then Range("E14") = Range("Steen!l20 ") End If
If Range("E12") = 10 Then Range("E14") = Range("Steen!m20 ") End If
If Range("E12") = 11 Then Range("E14") = Range("Steen!n20 ") End If
If Range("E12") = 12 Then Range("E14") = Range("Steen!o20 ") End If
End If
' Steen og by5 If Range("b12") = 2 And Range("d12") = 5 Then If Range("E12") = 1 Then Range("E14") = Range("Steen!D21 ") End If
If Range("E12") = 2 Then Range("E14") = Range("Steen!e21 ") End If
If Range("E12") = 3 Then Range("E14") = Range("Steen!f21 ") End If
If Range("E12") = 4 Then Range("E14") = Range("Steen!g21 ") End If
If Range("E12") = 5 Then Range("E14") = Range("Steen!h21 ") End If
If Range("E12") = 6 Then Range("E14") = Range("Steen!i21 ") End If
If Range("E12") = 7 Then Range("E14") = Range("Steen!j21 ") End If
If Range("E12") = 8 Then Range("E14") = Range("Steen!k21 ") End If
If Range("E12") = 9 Then Range("E14") = Range("Steen!l21 ") End If
If Range("E12") = 10 Then Range("E14") = Range("Steen!m21 ") End If
If Range("E12") = 11 Then Range("E14") = Range("Steen!n21 ") End If
If Range("E12") = 12 Then Range("E14") = Range("Steen!o21 ") End If
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Som sagt er jeg nybegynder med det her makro-værk - men prøver at forstå hvad du har lavet...
- Starter du med at angive, at hvis felt B12(Cels(12,2)) = 1 så: Navn = "Steen" og hvis 2 så navn = "John" osv.?
- Derefter det samme bare i felt D12 så a=17...
- Derefter b =... : b=felt E12
- Derefter felt E14 = ark(navn) hvor navnet er Steen hvis felt B12=1 osv. og rækken angives ved nr. i felt D12 og kollonnen angives ved nr. i E12 + 3 ?
Hvis det er rigtigt forstået, så burde det fungere. Men tallet i felt E14 ændres ikke uanset hvad der står i felterne B12, D12 og E12.
Eksempel: Jeg har nu værdierne 2 i alle 3 felter (B,D og E12) Dette burde vel give mig Johns data fra ark("John")felt E18, ik'? Det gør den bare ikke.
Er der en fejl, eller forstår jeg ikke helt hvad der sker?
Min makro ser sådan ud nu:
'Eksperten
Public Sub brugervalg()
Select Case Worksheets("ark1").Cells(12, 2) Case 1 navn = "Henrik" Case 2 navn = "Steen" Case 3 navn = "Thomas" Case 4 navn = "Tom" End Select
Select Case Worksheets("ark1").Cells(12, 4) Case 1 a = 17 Case 2 a = 18 Case 3 a = 19 Case 4 a = 20 Case 5 a = 21 End Select
b = Worksheets("ark1").Cells(12, 5)
Worksheets("ark1").Cells(14, 5) = Worksheets(navn).Cells(a, b + 3)
det er helt rigtigt ;-) hedder arket hvor den henter input fra 'ark1' eller hedder det noget andet ? hvis det hedder noget andet skal det lige ændres i makroen ( worksheets("ark1") --> worksheets("whatever") )
prøv at åbne din makro, vælg sidste linie ( Worksheets("ark1").Cells(14, 5) = Worksheets(navn).Cells(a, b + 3) ) tryk på F9 (breakpoint, dvs at makroen stopper op og venter til du beder den om at fortsætte), sæt markøren på navn og tryk på shift F9 (du laver en watch liste, dvs at du kan se hvilken værdi navn har) , gør det samme med a og b. kør nu din makro og aflæs din watchlist, det burde hjælpe os med af finde fejlen
Forudsætniger er: Arknavn som svarer til 1 i celle B12 er nr. 2 fra venstre Arknavn som svarer til 2 i celle B12 er nr. 3 fra venstre osv..
Sheets(1) = Arket længst til venstre Sheets(2) = Arket nr. 2 fra venstre osv... Står der 2 i celle B12 returnerer Sheets(Range("B12").Value + 1) værdier fra Arket nr. 3 fra venstre
Tak for jeres gode forsøg på at hjælpe. Og hvis/når de virker, er det jo noget smartere, end det jeg selv startede med...
Men jeg kan ikke få det til at virke, hverken forslag fra cool m f eller excelent.
Cool m f: Jeg vælger den sidste linie og trykker F9 - linien bliver farvet brun og der er en "prik" ude til venstre. Jeg klikker så markøren blinker lige før navn i () og trykker shift F9 - Dette giver en Quick watch hvor der står: Context= VBAProject.Modul2.brugervalg, Expression= navn, Value= <Out of context> Dette gør sig også gældende for a og b.
Nogle bud på hvad jeg kan gøre forkert - er der evt. andre oplysninger du skal bruge for at komme videre?
excelent: Dit løsning ser sådan set ret smart ud, men den kan jeg heller ikke få til at virke. Eneste ændring jeg har lavet i din linie er, at jeg har ændret +1 til +4, da 1 i felt B12 svarer til ark 5, 2 = ark 6 osv. - Er det korrekt?
Gad vide om årsagen til at begge jeres løsninger ikke virker hos mig, er den samme...?
mht. B12 - går ud fra den kan have værdierne 1 til 4 -(navne)? og D12 værdierne 1 til 12 (måneder - kolonne D-O) ? og E12 værdierne 1 til 5 (byer - række 17 til 21) ?
Det er byerne der står i D12 og månederne i E12 - men ellers burde det være rigtigt. Hvis du skriver din mailadr. kan det være jeg sender arket i aften. Skal ud af døren nu... (Skal evt. også lige have slettet en del i arket, da noget er fortroligt)
Tja, heldigvis skrev jeg at jeg var nybegynder med det her macro halløj - for nu har jeg fundet min fejl, og ja, begge jeres løsninger virker, så smid et svar så får I begge to nogle point.
I er vel nysgerrige nok til at vide hvad fejlen var! Jeg havde da glemt at tilføje den nye macro til den Liste som jeg vælger i, dvs. jeg blev ved med at køre med min gamle macro. Ups
Nu har jeg så bare et nyt spørgsmål, vedr. listen med macroen, men det opretter jeg lige et nyt spørgsmål til.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.