Hej Har et regneark med 10 ark. Ark1 er et samleark, mens de 9 øvrige er kalkulationsark til forskellige produkter.
Jeg har lavet et makro, der flytter data fra de 9 kalkulationsark til samleark. Der flyttes kun data, hvis man har udfyldt kalkulationsarket. Det vil sige, at hvis man f.eks. har udfyldt ark. 3, 5 og 10, kommer data til at stå på linie 1,2 og 3 på samleark.
På samleark kan man på linie 1,2 og 3, i en ny kolonne skrive et beløb, som jeg gerne vil have flyttet tilbage på de rigtige kalkulationsark (3,5 og 10). Brugeren kan ændre navne på kalkulationsarkene, så arknavnene på ark 2-10 hedder ikke altid det samme.
Hvordan laver jeg den makro, der flytter fra samleark til de rigtige kalkulationsark ?
Kunne en ide være at berige din makro med en form for reference til hvor det er kopieret fra? Altså når linje 2 i ark 4 kopieres over til ark 1 så bagefter alt din data har du en kolonne hvor data kommer fra?
På den måde har du en nem løsning for at flytte beløb retur til samme sted efter ændring?
Hvis nu jeg så har et samleark med 3 kolonner. Kolonne A = tekst kopieret fra kalkulationsark. Kolonne B = arknavn kopieret fra kalkulationsark. Kolonne C = Manuel indtastet beløb på samlearket.
Hvad er koden så på den makro, der skal kopiere de indtastede beløb over på arket med det arknavn som står i kolonne B ?
#1 er en ok ide, men ikke nødvendigvis helt god. Altså at når du kopierer data, så også kopier arkinformationen med, så når du skal kopiere tilbage, ved du hvor det skal hen. Hvis du bare nogle tal stående i forskellige rækker, er det ikke nok til at remme det rigtige ark.
Men hvis arket skifter navn mellem kopiering fra og kopiering tilbage er du lige vidt. Hvis du i stedet bruger arkets nummer, vil det kunne virke, med mindre rækkefølgen af arkene også kan ændre sig.
Jeg ville nok bruge en celle i hvert ark til at indeholde en entydig reference til det konkrete ark, som ikke kan ændres, og så kopiere denne med frem og tilbage.
#4 jeg synes du tolker ret meget på mit korte forslag :-) Hvis arket har det med at skifte navn skal du netop bruge den underliggende fane-navn i vba vil det være: sheets(1) fremfor sheets("navn"), det var i min tanke, men nok ikke udtrygt helt skarpt.
Din ide med at have en entydlig reference til hver enkelt celle kan sagtens give mening, altså at når du tager tal x fra fanen "Aalborg" så kan den reference være "Aalborgtallet1"
Jeg vil dog stadig foreslå:
#2 Ja netop, jeg ville f.eks. sætte en reference i en kolonne der er cellens adresse (inkl. arknummer), så f.eks. B3-Sheet1 (nok nemmest i to kolonner) på den måde kan du utrolig nemt kopiere tal retur ved at have:
Så din vba skal se ud noget i til med: for r = 1 to 10 DestinationsFane = sheets(cells(8,r)) DestinationsCelle = cells(7,r) range(1,r).copy sheets(destinationsfane).range(destinationscelle).paste next
Bemærk der nok er en del fejl, det er bare lige helt uden tanke for ordentlig syntax.
#5 Jeg forsøgte ikke at tolke, men konstaterede bare, at hvis arket skifter navn, kan navnet ikke bruges, og hvis det skifter placering kan den underliggende struktur heller ikke bruges. :-)
Da jeg stort set kun kan optage makroer, har jeg lidt svært ved at rette dem til. Jeg har lavet nedenstående - men den vil ikke vælge det ark jeg skal indsætte det kopierede i. Jeg har en celle på samleark (arknr. 1), der angiver arknummeret på det ark jeg skal hen på, men hvordan laver jeg koden (se linie med ???????)
For i = 2 To Sheets.Count Sheets(1).Select '=Samleark har nr. 1 ActiveCell.Offset(1, 0).Select ' flytter cursor 1 felt ned Application.CutCopyMode = False Selection.Copy ActiveCell.Offset(0, 4).Select ' Denne celle indeholder arknr.
Sheets(ActiveCell).Select ??????????????
Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next i
For i = 2 To Sheets.Count Sheets(1).Select '=Samleark har nr. 1 ActiveCell.Offset(1, 0).Select ' flytter cursor 1 felt ned Application.CutCopyMode = False Selection.Copy ActiveCell.Offset(0, 4).Select ' Denne celle indeholder arknr.
Sheets(ActiveCell.value).Select ' du skal have værdien i cellen går jeg ud fra
Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets(1).select 'du skal bruge en "tilbage" tror jeg for at Next i giver mening. Next i
Så kører løkken som den skal :-). Men når den så kommer til en tom celle hvor arknr. står, går det galt. Hvordan får jeg løkken til at stoppe når celle med arknr. er tom.
Jeg har jo f.eks i alt 20 linier der kan kopieres, men måske er det kun 3 linier der er udfyldt. Der er jo før den her løkke kører, blevet kopieret fra kalkulationsark til samleark. Og det varierer jo, hvor mange kalkulationsark der er blevet udfyldt og dermed hvor mange linier der er på samleark.
For i = 2 To 20 Sheets(1).Select '=Samleark har nr. 1 ActiveCell.Offset(1, 0).Select ' flytter cursor 1 felt ned Application.CutCopyMode = False Selection.Copy ActiveCell.Offset(0, 4).Select ' Denne celle indeholder arknr. Sheets(ActiveCell.Value).Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets(1).Select ActiveCell.Offset(0, -4).Select Next i
Kan du ikke indføre en: if activecell.value = "" then end sub else
Du kan sætte den ind efter din: ActiveCell.Offset(1, 0).Select
Eller misforstår jeg dig at der kan være tal i alle rækker, men ikke noget i henvisningen? Det kan du lige overveje.
Det slår mig iøvrigt at når du bruger offset så behøver du ikke for i =2 to 20 overhovedet. Min tanke var at lade "i" være definerende for rækkenummer og i stedet skrive cellerne som adresser hvor i indgår.
#8 Måske taler vi forbi hinanden. Hvis jeg har tre ark, som er navngivet A, B og C og de ligger i den rækkefølge, er Sheets(1) ark A, men flytter jeg så ark C hen forrest er det nu Ark C, der er er Sheets(1).
#14 jeg er uenig, men det kan være min forståelse af vba. Hvis du går ind i editoren vil du se at arknummeret ikke flytter sig uanset hvor arket står i rækkefølgen med de andre, men det kan så være at Sheet(1) henviser til den rækkefølge de står i, fremfor hvad de reelt hedder. Der må i så fald være en måde at fange det arknummer som fanen får når de bliver lavet (for den forsvinder ikke, og et nyt ark vil altid få næste fortløbende tal.
#18 Det er der. Hvis et ark hedder Sheet1, i editoren kan du bruge det navn, i stedet for fanenavn eller placering, fx Sheet1.Range eller hvad du nu vil gøre.
Hvis Sheet1 hedder 'Jan' kan du fx omdøbe det til noget andet med
Sheet1.Name = "Kim" og så gør det ikke noget, hvis nogen i mellemtiden har omdøbt det til Peter.
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.