Avatar billede hellfishdk Nybegynder
15. marts 2005 - 18:54 Der er 24 kommentarer og
1 løsning

Hva' dælen er der galt med den makro

Idéen med denne makro er at den skal kopier cellerne fra et ark til et andet, hvorefter den skal indsætte de værdier jeg beder den om, i de respektive celler. Sluttelig skal makroen, ved næste afspilling gentage proceduren et par rækker længere nede. Alt dette skal skal ske når jeg trykker på en knap, der er linket til makroen. Men makroen kan ikke udføres og ved debugging kommer den her meddelse, (ActiveSheet.Paste stopper makroen):

Sub Makro7()
'
' Makro7 Makro
' Makro indspillet 15-03-2005 af Edb
'

'
    Sheets("MasterSkabelon").Select
    ActiveCell.Range("A1:G22").Select
    Selection.Copy
    Sheets("Dokumentation").Select
    ActiveCell.Range("A1").Select
    ActiveSheet.Paste
    ActiveCell.Offset(23, 0).Range("A1").Select
    Sheets("Indtast").Select
    ActiveCell.Offset(-2, 0).Range("A1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Dokumentation").Select
    ActiveCell.Offset(-23, 1).Range("A1").Select
    ActiveSheet.Paste
    Sheets("Indtast").Select
    ActiveCell.Offset(2, 0).Range("A1:B5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Dokumentation").Select
    ActiveCell.Offset(2, 0).Range("A1").Select
    ActiveSheet.Paste
    Sheets("Indtast").Select
    ActiveCell.Offset(10, 0).Range("A1:B5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Dokumentation").Select
    ActiveCell.Offset(10, 0).Range("A1").Select
    ActiveSheet.Paste
End Sub

Hvad skal jeg gøre for at udbedre den?
Avatar billede sjap Praktikant
15. marts 2005 - 19:03 #1
Prøv med en lidt kortere form:

    Sheets("MasterSkabelon").Select
    Range("A1:G22").Copy Sheets("Dokumentation").Range("A9")

Har kun medtaget den første kopiering (de første 6 linier) for at se om du kan få det til at virke så langt.
Avatar billede hellfishdk Nybegynder
15. marts 2005 - 19:13 #2
Jamen det virker... :) Men hvad med resten (jeg kan ikke programmerer!)
Avatar billede sjap Praktikant
15. marts 2005 - 19:21 #3
Vent lidt, så skal jeg prøve at fixe resten også, men jeg ar lige et spørgsmål først: Er der nogen speciel grund til at du har brugt Offset? Så vidt jeg kan se, så er det eneste at denne her gør

ActiveCell.Offset(23, 0).Range("A1").Select

at flytte markøren til celle A24. Det gør den hver gang, så kan man vel ligeså godt skrive A24 - eller hva'?
Avatar billede hellfishdk Nybegynder
15. marts 2005 - 19:25 #4
Jeg indspillede makroen, gennem excel's egen indspilling. Så jeg aner ikke hvad Offset er (men jeg kan da gennemskue det andre kommandoer)... :) Hmm måske skal jeg lærer noget visual basic programmering...?
Avatar billede sjap Praktikant
15. marts 2005 - 19:27 #5
OK. Så prøver jeg lige at tilpasse det. Vender tilbage lige om lidt.
Avatar billede sjap Praktikant
15. marts 2005 - 19:42 #6
Der er noget af koden som jeg ikke lige kan lure, men det som jeg er nået frem til følgende:

    Sheets("MasterSkabelon").Range("A1:G22").Copy Sheets("Dokumentation").Range("A9")
    Sheets("Indtast").Range("A1:B5").Copy Sheets("Dokumentation").Range("A1")

Og det er jo unægteligt noget kortere end dit oplæg ;0)
Avatar billede hellfishdk Nybegynder
15. marts 2005 - 19:43 #7
Ok tak. Jeg prøver den lige... vender lige tilbage.
Avatar billede sjap Praktikant
15. marts 2005 - 19:46 #8
Jeg er dog ikke sikker på at det hele er med, for hvis jeg ellers har læst din kode korrekt, så gør den følgende

Kopier fra  MasterSkabelon!A1:G22  til  Dokumentation!A9:G30
Kopier fra  Indtast!A1  til  Dokumentation!A1
Kopier fra  Indtast!A1:B5  til  Dokumentation!A1:B5
Kopier fra  Indtast!A1:B5  til  Dokumentation!A1:B5

Sådan læser jeg det (og det kan jo altså sagtens være forkert), men som du kan se, så er de tre sidste linier ret ens, og det er det, der får mig til at tvivle.
Avatar billede hellfishdk Nybegynder
15. marts 2005 - 19:53 #9
Ja den var der næsten, men du skal også lige vide hvordan og hvad jeg har helt præcist i tankerne. MEN efter at have rettet lidt til, så passer den! :) I hvert fald noget af vejen. Der er nogen felter der også skal med. Det kan vel egentlig klares ved at bruge samme fremgangsmåde som den du har lavet? Der er så lige afslutning, som skal passe med at makroen starter et par linier under, hvor den sluttede. Altså en relativ cirkulering (tror jeg nok den hedder).
Avatar billede hellfishdk Nybegynder
15. marts 2005 - 20:10 #10
Den nederste linie: Indtast!A1:B5 til Dokumentation!A1:B5 er ikke korrekt; men: Indtast!B13:C17 til Dokumentation!B13:C17. Når den så er færdig med at kopier, skal der kopieres 7 rækker længere nede. Altså den starter i A(x+23). Så det passer med at den slutter i A24, første gang, men næste gang skal den slutte i A24+7, osv.
Avatar billede sjap Praktikant
15. marts 2005 - 20:52 #11
Jeg kan få den her til at køre (det meste af tiden), men jeg ved ikke helt om den også gør det den, skal.

    Sheets("MasterSkabelon").Range("A1:G22").Copy Sheets("Dokumentation").Range("A9")
   
    Sheets("Dokumentation").Range("A9").Select
    ActiveCell.Offset(23, 0).Range("A1").Select
   
    Sheets("Indtast").Select
    ActiveCell.Offset(-2, 0).Range("A1").Copy
    Sheets("Dokumentation").Select
    ActiveCell.Offset(-23, 1).Range("A1").PasteSpecial xlPasteAll
    Sheets("Indtast").Select
    ActiveCell.Offset(2, 0).Range("A1:B5").Copy
    Sheets("Dokumentation").Select
    ActiveCell.Offset(2, 0).Range("A1").PasteSpecial xlPasteAll
    Sheets("Indtast").Select
    ActiveCell.Offset(10, 0).Range("A1:B5").Copy
    Sheets("Dokumentation").Select
    ActiveCell.Offset(10, 0).Range("A1").PasteSpecial xlPasteAll
    Application.CutCopyMode = False
Avatar billede sjap Praktikant
15. marts 2005 - 21:08 #12
Jeg har ikke helt forstået, hvad det er du vil, men jeg har lavet en, der er næsten identisk med dit udgangspunkt, og som i hvert tilfælde kan afvikles på min PC uden problemer.

    Sheets("MasterSkabelon").Range("A1:G22").Copy Sheets("Dokumentation").Range("A9")
    Sheets("Dokumentation").Activate
    Range("A32").Select
    Sheets("Indtast").Activate
    ActiveCell.Offset(-2, 0).Range("A1").Select
    Selection.Copy
    Sheets("Dokumentation").Activate
    ActiveCell.Offset(-23, 1).Range("A1").Select
    ActiveSheet.Paste
    Sheets("Indtast").Activate
    ActiveCell.Offset(2, 0).Range("A1:B5").Select
    Selection.Copy
    Sheets("Dokumentation").Activate
    ActiveCell.Offset(2, 0).Range("A1").Select
    ActiveSheet.Paste
    Sheets("Indtast").Activate
    ActiveCell.Offset(10, 0).Range("A1:B5").Select
    Selection.Copy
    Sheets("Dokumentation").Activate
    ActiveCell.Offset(10, 0).Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False

Jeg tror umiddelbart det er den sikreste måde at gøre det på, da det ellers er lidt besværligt at overskue offset-funktionen når det hele tiden flyttes mellem arkene.
Avatar billede sjap Praktikant
15. marts 2005 - 21:22 #13
Eller den her - som trods alt er reduceret lidt

    Sheets("MasterSkabelon").Range("A1:G22").Copy Sheets("Dokumentation").Range("A9")
    Sheets("Dokumentation").Activate
    Range("A32").Select
    Sheets("Indtast").Activate
    ActiveCell.Offset(-2, 0).Select
    Selection.Copy
    Sheets("Dokumentation").Activate
    ActiveCell.Offset(-23, 1).Select
    ActiveSheet.Paste
    Sheets("Indtast").Activate
    ActiveCell.Offset(2, 0).Range("A1:B5").Select
    Selection.Copy
    Sheets("Dokumentation").Activate
    ActiveCell.Offset(2, 0).Select
    ActiveSheet.Paste
    Sheets("Indtast").Activate
    ActiveCell.Offset(10, 0).Range("A1:B5").Select
    Selection.Copy
    Sheets("Dokumentation").Activate
    ActiveCell.Offset(10, 0).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
Avatar billede hellfishdk Nybegynder
16. marts 2005 - 14:19 #14
Har prøvet dem alle 3. De kører ok, de kopier den skabelon fra MasterSkabelon over som den skal (istedet for at havne i A9, skal den havne i A1; har selv rettet den til det). Efter det går der lidt kluder i det. Helt præcis skal makroen gøre som følger:

1. Kopier skabeloen MasterSkabelon!A1:G22 til Dokumentation!A1
2. Kopier værdien fra Indtast!B2 til Dokumentation!B1
3. Kopier værdierne fra Indtast!B4:C8 til Dokumentaion!B3:C7
4. Kopier værdierne fra Indtast!B14:C18 til Dokumentation!B13:C17
5. Derefter skal makroen gøres klar til, at næste gang jeg aktiverer den, skal den      gøre samme proces. Men denne gang skal den kopier MasterSkabelon!A1:G22 til          Dokumentation!A24, også fremdeles.
Håber at det klare lidt mere op på hvad det er jeg har i tankerne. Men forløbig tak, du er til stor hjælp. :)
Avatar billede sjap Praktikant
16. marts 2005 - 18:40 #15
hellfishdk
Det er MEGET klart, og det tror jeg godt jeg kan fixe. Som sædvanligt har jeg dog lige et opklarende spørgsmål. Så vidt jeg kan se, så er det altså noget som skal ske hver gang du aktiverer makroen.

Første gang startes i A1 ...
Anden gang startes i A24 ...
Tredie gang startes i A47 ...
etc.
Indtil der en dag ikke er mere plads i regnearket! ;0)

Og det du bruger til at "huske", hvor der skal fortsættes fra er placeringen af markøren (dvs. den aktive celle). Er du sikker på, at der ikke er nogen risiko for at en bruger "kommer til" at flytte markøren?

Hvis det ikke er noget problem, så er det ok, men hvis der er en lille risiko vil jeg foreslå at vi i en celle laver en tæller, som vi så bruger til at beregne, hvor skrivningen starter. Jeg kan lave et forslag til begge dele, men du må gerne lige melde tilbage, hvad du foretrækker.
Avatar billede sjap Praktikant
16. marts 2005 - 18:58 #16
hellfishdk
Nedenstående benytter celle AA1 som tæller, og skulle ellers klare alt det du har beskrevet (håber jeg)

    Tæller = Sheets("Dokumentation").Range("AA1")
    Sheets("MasterSkabelon").Range("A1:G22").Copy Sheets("Dokumentation").Range("A" & (1 + 23 * Tæller))
    Sheets("Indtast").Range("B2").Copy Sheets("Dokumentation").Range("B" & (1 + 23 * Tæller))
    Sheets("Indtast").Range("B4:C8").Copy Sheets("Dokumentation").Range("B" & (3 + 23 * Tæller))
    Sheets("Indtast").Range("B14:C18").Copy Sheets("Dokumentation").Range("B" & (13 + 23 * Tæller))
    Sheets("Dokumentation").Range("AA1") = Tæller + 1
Avatar billede hellfishdk Nybegynder
16. marts 2005 - 19:38 #17
sjap

Det virker sgu! Hurraaa (fyrværkeri flyver til H og V) Tak!!!

Makroen er langt mindre end excels egen indspilning, hvorfor mon?

Hvordan giver jeg dig point'ene?
Avatar billede sjap Praktikant
16. marts 2005 - 19:48 #18
Først og fremmest skal jeg svare, ellers kan jeg ikke få noget :0)

Excels egen indspilning er som regel en relativt "grov" kodning, hvor alt hvad du foretager dig, skrives i koden. Når koden skal køre, er det oftest ikke hensigtsmæssigt at gøre det på helt samme måde.
Avatar billede hellfishdk Nybegynder
16. marts 2005 - 19:55 #19
Sådan må det vist være.
Dvs sige at excels kodning faktisk er ganske ubrugelig, når det kommer til større kompliceret makroer?

Men tak skal du have for din hjælp, det var lige det jeg eftersøgte :D
Avatar billede sjap Praktikant
16. marts 2005 - 20:02 #20
Ja optage-makroerne er kun til begrænset brug. Men det er til gengæld smart, når man ikke lige ved hvad en funktion hedder i VBA. Så kan man bare optage en makro, og så se hvad funktionen hedder, og så tilpasse den. Jeg har tit haft megen nytte af den.
Avatar billede hellfishdk Nybegynder
16. marts 2005 - 20:07 #21
Så ved jeg det, til når jeg skal prøve at lege med det makro-ting, for der kommer garanteret mere at den slags.
Jeg har 60 point der ligger og venter på svar, dem kan du da også få, for det var faktisk også det spørgsmål jeg søgte svar til.
Avatar billede sjap Praktikant
16. marts 2005 - 20:26 #22
hellfishdk > Det havde jeg ikke lige opdaget, for så havde jeg nok også brokket mig over det, for du må ikke oprette to spørgsmål om det samme. Du burde derfor have lukket det ene, og så kun fortsat med det andet.
Hvis du fortsat synes jeg har fortjent lidt flere point, å synes jeg du skal bede x-lars om at lægge et svar, så kan vi dele pointene. Så får x-lars også lidt for indsatsen - han var åbenbart den eneste der var interesseret.
Avatar billede hellfishdk Nybegynder
16. marts 2005 - 20:30 #23
Ok. Og sry havde lige missede proceduren.
Avatar billede sjap Praktikant
16. marts 2005 - 20:33 #24
Ja, ja - det er jo ikke verdens undergang. Det er vist mest for at man ikke skal sætte for mange i gang med den samme opgave, og så for at undgå at der gives over 200 point for et enkelt spørgsmål.
Avatar billede hellfishdk Nybegynder
17. marts 2005 - 15:01 #25
Logisk nok.
x-lars, vil ikke have pointene, da det var dig (sjap), der gav løsningen. Hvis du vil have dem så bare læg et svar på tråden, så får du pointene.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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