Avatar billede chrira Nybegynder
27. oktober 2003 - 10:42 Der er 14 kommentarer og
1 løsning

Loop gennem worksheets igen

Hej igen

Har lige fundet ud af at løsningen ikke umiddelbar løser mit problem.

Det ser ud til at der loopes det antal gange der er worksheets i min fil. Det jeg ønsker at at der skal skiftes til næste worksheet når min kode har kørt for et ark, osv.

Jeg kan selvfølgelig ikke udelukke at jeg gør noget forkert ;-)

Håber i har svaret

Chrira
Avatar billede jkrons Professor
27. oktober 2003 - 10:49 #1
Prøv at se på bak-s forslag til dit oprindelige spørgsmål:

http://www.eksperten.dk/spm/419239

Hvis ikke det er løsningen, må du nok være lidt mere specifik omkring, hvad du ønsker at få udført.
Avatar billede stewen Praktikant
27. oktober 2003 - 11:56 #2
Eller denne:

For j = 1 To Worksheets.Count
Sheets(j).Activate

' Din kode

Next
Avatar billede stewen Praktikant
27. oktober 2003 - 14:13 #3
nå, hvordan kører det?
Avatar billede stewen Praktikant
29. oktober 2003 - 09:37 #4
Sker der noget her?? oder was??
Avatar billede chrira Nybegynder
30. oktober 2003 - 08:29 #5
Det virker - så skriv lige et svar.
Avatar billede stewen Praktikant
30. oktober 2003 - 08:31 #6
SVAR!

Du fik ikke svaret fra http://www.eksperten.dk/spm/419239  ??

Skal jeg selvfølgelig ikke blande mig - er kun godt at du fik det til at virke!
Avatar billede jkrons Professor
30. oktober 2003 - 09:12 #7
chirra-> Kan vi få at vide, hvad det var, der virkede?
Avatar billede stewen Praktikant
30. oktober 2003 - 09:30 #8
jkons -> må nok indrømme at chrira har ret - har lige testet forslagene i ovennævnte spm. og der er ikke nogen af dem der kører koden i hvert enkelt af arkene! Dit forlsag får jeg i hvertfald ikke til at køre på alle arkene, det samme gælder Bak's første forslag. Bak's andet forslag virker efter hensigten, dog ikke i en situation, hvor ark 2 er aktiveret og det skal være på alle arkene (1,2,3)! Endelig er der kabbak's forslag som jeg ikke umiddelbart kan få til at virke! Så hvis chrira, skal have noget kode kørt på hvert enkelt ark, så er mit forslag (vidst nok) det eneste der virker...
Avatar billede chrira Nybegynder
30. oktober 2003 - 09:32 #9
stewen har helt ret - det er også den konklusion jeg er nået frem til.
Avatar billede bak Forsker
30. oktober 2003 - 09:55 #10
Godt at stewens forslag virker.
Om jkrons og mit forslag (som er stort set ens) virker, afhænger af den kode du selv sætter ind.

hvis vi tager jkrons's som eksempel og skal skrive noget til en celle, skal man referere til arket med s foran

For Each s in ActiveWorkbook.Sheets
  s.Range("A4")=123
Next s

I dette tilfælde behøver man ikke aktivere arket (hvilket gør koden langsommere)

I stewens aktiveres arket, men så behøver man ikke referere til det i de underliggende kodelinier
For j = 1 To Worksheets.Count
Sheets(j).Activate
  Range("A4")=123
Next
Avatar billede jkrons Professor
30. oktober 2003 - 09:58 #11
Enig med bak. Hvis du kan udføre en handling ved at manipulere med et objekts egenskaber, fx en celles værdi eller dens format eller lignende, eller et akrs egenskaber eller metoder uden at vælge det først, er koden mere effektiv end hvis du først vælger objektet.
Avatar billede stewen Praktikant
30. oktober 2003 - 10:00 #12
ok - det var det der var forkert! s.Range.. ikke bare range..

og så har du absolut ret at det ved større ark vil være en kæmpe fordel at bruge både dit og jkrons forslag! samtidig behøver du ikke at bruge Application.ScreenUpdating = False/True hvis man vil slippe for at se alle arkene flyve forbi!

Beklager at jeg drog den forkerte konklusion - jeg var bare ikke klogere! ;-)
Avatar billede stewen Praktikant
30. oktober 2003 - 10:06 #13
Det har så også været grunden til atchrira ikke kunne få det til at virke - for ingen af jer havde rent faktisk nævnt at man i den underliggende kode skulle referere til hhv "s" og worksheet - så i det tilfælde hvor man ikke ved bedre, så virker jeres formler ikke! Omvendt når de virker, så er de markant hurtigere end mit forslag!!!!!!!!!!
Avatar billede jkrons Professor
30. oktober 2003 - 10:09 #14
Ja, det var nok en fejl ikke at nævne at der skal refereres til variablen i forbindelse med udførelsen af koden. Jeg havde nok opfattet det oprindelige spørgsmål som, det bare var For Each...Next sætningen chrira ikke kunne få til at virke.
Avatar billede bak Forsker
30. oktober 2003 - 10:19 #15
Det er helt ok. det kan også være noget forvirrende.
en anden ting der kan forvirre i disse koder er forskellen på Sheets og Worksheets.
Sheets er ALLE arkfaner incl. diagrammer, dialogark, XL4 makroark mm. og Worksheets er kun de alm. regneark. Derfor kan begge de to ovennævnte koder fejle, hvis der er diagramark i mappen.
Denne vil fejle, fordi den vil forsøge at indsætte en værdi i celle A4 i diagramarket.

For Each s in ActiveWorkbook.Sheets
  s.Range("A4")=123
Next s


Denne vil (måske) fejle da den først tæller antallet af "rigtige" regneark, men derefter aktiveres Sheet-nummeret
Hvis det fx er 6 ark (regne, dia, regne, dia,regne, dia) vil worksheets.count give tallet 3.
Sheets(j) vil så aktivere (regne, dia, regne)

For j = 1 To Worksheets.Count
Sheets(j).Activate
  Range("A4")=123
Next

hvis koden kun skal køre i regneark så brug kun Worksheets

For j = 1 To Worksheets.Count
workssheets(j).Activate
  Range("A4")=123
Next

eller

For Each s in ActiveWorkbook.Worksheets
  s.Range("A4")=123
Next s
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