14. oktober 2010 - 12:06Der er
7 kommentarer og 1 løsning
Opslag? Autofilter? hjælp til VBA søges
Hej
Jeg er ganske ny, og selvlært udi VBA. Jeg har ingen teknisk baggrund, hvorfor det godt kan gå lidt trægt.
Jeg har lavet en Userform, der putter data i et sheet (lad os kalde sheetet "indtastning") - alt virker tilfredsstillende.
Nu vil jeg så gerne lave et opsumerings-sheet (det kalder vi "oversigt"). Her vil jeg gerne fremhæve poster fra "indtastning". Helt konkret vil jeg gerne finde følgende
1. For rækker i ark "indtastning" hvor følgende er gældende "X" i kolonne E samt Overskredne datoer ( altså "Celle"<Idag() ) i kolonne N
Vil jeg have kopieret rækkens celler H og C til arket "oversigt"'s celler D og B (altså h til d og c til b) startende fra række 20 (altså d20 og b20)
Jeg har skrevet en makro - hvor det lykkedes mig at lave funktionen, men da den var baseret på autofilter gik det galt hvis der fx. ikke var nogle X i kollonne "e".
Jeg ved ikke helt hvad funktionen jeg leder efter heder - er som sagt helt grøn i VBA.
Jeg har nogle andre forespørgsler, men hvis jeg får løst dette regner jeg med selv at kunne lave resten.
Et bonus spørgsmål kunne være:
Jeg vil gerne have makroen til at køre når arket "oversigt" åbnes. Dette volder mig problemer, da jeg ender i et loop. (makroen skifter jo ark fra det ene til det andet)
Jeg håber jeg fik beskrevet problemstillingen rigtigt- ellers mp i endeligt spørge.
Hvad var det der gik galt med din makro, hvis der ikke var noget x kolonne e? Jeg kan se af noget kode jeg lavede for noget tid siden og også benyttede autofilter, at jeg håndterede situationen hvor der ikke var nogen rækker der opfyldte kriterierne med noget fejlhåndtering - en simpel "On error resume next" - måske er det bare det der skal til.
Dit andet spm. omkring at køre makroen når "oversigt" aktiveres, så skal man lave koden, så den ikke skifter mellem arkene når der kopieres, men hvor man blot refererer til indtastningsarket - men det kan man altid rette til, når hovedfunktionen er løst.
Skriv koden for den makro du næsten havde til at virke - det kan være vi kan fikse det med små modifikationer.
Undskyld et meget sent svar - er ikke så tit forbi eksperten.dk, og har ikke fået mail om svar på spørgsmål.
Anyhow Her er den kode jeg bruge pt. jeg har skrevet den om, så den kan køre ved aktivering af ark- uden loop. Den laver den fejl at den returnere samtlige værdier hvis ikke der ikke er nogle forekomster af den værdi der sorteres efter.
Sub STARTark() 'tøm celler Sheets("start").Range("b20:d80").Value = Null Sheets("start").Range("f20:h80").Value = Null
'Sorter efter "under behandling" Sheets("indtast").Range("$A$2:$BG$302").autofilter Field:=7, Criteria1:="X"
'Kopier Titel Sheets("indtast").Range("h3:h302").Copy 'jeg kan ikke få lov at skrive sheets("start"). her?? Range("B20").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False
Hmm... jeg har med få modifikationer kopieret din kode, og den gør umiddelbart som den skal, også når der ikke er nogen krydser i kolonne G.
(Jeg gjorde sub'en public fordi jeg kaldte den fra et andet ark - det bør ikke betyde noget. Og så fik jeg problemer der hvor du selv angiver ikke at kunne referere til sheets("start"), så i de to pasteSpecial-kald har jeg lavet lidt om. )
Jeg har dog svært ved at se at det skulle gøre en forskel ift. din oprindelige kode. Hvilken version af Excel kører du? Jeg har prøvet det i 2007.
Public Sub STARTark() 'tøm celler Sheets("start").Range("b20:d80").Value = Null Sheets("start").Range("f20:h80").Value = Null
'Sorter efter "under behandling" Sheets("indtast").Range("$A$2:$BG$302").AutoFilter Field:=7, Criteria1:="X"
'Kopier Titel Sheets("indtast").Range("h3:h302").Copy 'jeg kan ikke få lov at skrive sheets("start"). her?? Sheets("start").Range("B20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False
Jeg har prøvet at køre koden i 2003, og der får jeg samme problem som dig. Har lavet en lille workaround i nedenstående for at checke om der er nogen linjer der skal kopieres. Ved ikke om det kan checkes mere elegant...
'Sorter efter "under behandling" Sheets("indtast").Range("$A$2:$BG$302").AutoFilter Field:=7, Criteria1:="X"
Set totalRange = Sheets("indtast").AutoFilter.Range
On Error Resume Next Set copyRange = totalRange.Offset(1, 0).Resize(totalRange.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
If Not copyRange Is Nothing Then
'Kopier Titel Sheets("indtast").Range("h3:h302").Copy 'jeg kan ikke få lov at skrive sheets("start"). her?? Sheets("start").Range("B20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False
'kopier Jrnr Sheets("indtast").Range("c3:c302").Copy Sheets("start").Range("d20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False End If
Jeg har været noget sløv til at få tjekket eksperten.dk. Jeg fik løst problemet, men husker faktisk ikke helt hvordan jeg gjorde. Anyhow - du skal have mange tak for hjælpen! Kom med et svar så skal du få point som fortjent:)
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.