Avatar billede YzzE Nybegynder
14. oktober 2010 - 12:06 Der 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.
Avatar billede anlu Nybegynder
14. oktober 2010 - 19:03 #1
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.
Avatar billede YzzE Nybegynder
21. oktober 2010 - 22:50 #2
Hej Anlu

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

'kopier Jrnr
Sheets("indtast").Range("c3:c302").Copy
Range("d20").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False

Sheets("indtast").Range("$A$2:$BG$302").autofilter Field:=7
'.AutoFilterMode = False

Application.CutCopyMode = False
Range("b5").Select

End Sub
Avatar billede anlu Nybegynder
23. oktober 2010 - 19:45 #3
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

'kopier Jrnr
Sheets("indtast").Range("c3:c302").Copy
Sheets("start").Range("d20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False

Sheets("indtast").Range("$A$2:$BG$302").AutoFilter Field:=7
'.AutoFilterMode = False

Application.CutCopyMode = False
'Range("b5").Select

End Sub
Avatar billede YzzE Nybegynder
25. oktober 2010 - 13:59 #4
Hej anlu

Jeg arbejder mest i 2003 (til tider 2007)

Fejlen er uændret med dine modifikationer.

har du nogen ide om hvor jeg evt. bør indsætte en "on error - resume next" eller lign?
Avatar billede anlu Nybegynder
25. oktober 2010 - 17:11 #5
Hej igen,

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...

Public Sub STARTark()

Dim copyRange As Range
Dim totalRange As Range

'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"

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

Sheets("indtast").Range("$A$2:$BG$302").AutoFilter Field:=7
'.AutoFilterMode = False

Application.CutCopyMode = False
'Range("b5").Select

End Sub
Avatar billede YzzE Nybegynder
27. oktober 2010 - 15:27 #6
Hej Anlu

Jeg har først mulighed for at prøve den af på fredag - jeg vender tilbage!
Avatar billede YzzE Nybegynder
30. marts 2011 - 11:54 #7
Hej Anlu

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:)

Vh
Jeppe
Avatar billede anlu Nybegynder
30. marts 2011 - 12:02 #8
ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester