Avatar billede florint Nybegynder
23. juli 2005 - 19:04 Der er 35 kommentarer og
2 løsninger

Dynamisk navngivng af ark

Hej
Jeg er ved at lave en budgetopfølgning og har i den forbindelse 12 ark der hedder Januar, Februar, Marts osv.
Da ikke alle virksomheder har samme regnskabsperiode, kunne jeg tænke mig at de forskellige ark kunne hedde det samme som det der stod i en bestemt celle i et bestemt ark.
Altså jeg prøver at samle alle relevante oplysninger som kontonr, måned osv i et ark der hedder Noter.
Kan man så navgive et Ark som =Noter!F2 (cellen med januar)???
Mvh
Avatar billede sjap Praktikant
23. juli 2005 - 19:14 #1
Jeg er ikke helt med på, hvad du mener.

Hvis du navngiver et ark som =Noter!F2 - skal arket så hedde januar?
Avatar billede florint Nybegynder
23. juli 2005 - 19:50 #2
Exactly :-) - næste ark skulle så være Noter!F3 (Februar) und so weiter...
Mvh
Avatar billede sjap Praktikant
23. juli 2005 - 20:51 #3
Jeg er stadig ikke helt sikker, så jeg prøver mig lige lidt frem:

Men ifølge din beskrivelse ovenfor, så findes der allerede et ark med navnet "Januar"
Skal arkene oprettes, omdøbes eller kopieres?
Avatar billede sjap Praktikant
23. juli 2005 - 21:17 #4
Hvis dit "Noter" ark ligger som det første ark, kan du omdøbe arknavnene med følgende kode:

Sub OmdøbArk()
For i = 2 To 13
    Sheets(i).Name = Worksheets("Noter").Range("F" & i)
Next i
End Sub


BEMÆRK! Koden fungerer kun, hvis din fil består af 13 ark, og arket "Noter" skal være det første (dvs. placeret længst til venstre). De øvrige ark vil så få de navne, der står i Noter!F2, Noter!F3 osv.

Hvis det er det du er ude efter, men din fil er struktureret anderledes, så sig lige til, så skal jeg nok justere det.
Avatar billede florint Nybegynder
23. juli 2005 - 21:24 #5
Jeg tror du har fat i det rigtige der....men...mit første ark hedder forside, herefter kommer januar, februar, marts.....op til december. Herefter kommer der et ark der hedder noter, likviditet, kvartal, år, nøgletal, grafer.
Det er kun de ark der hedder "måneder" der skal omdøbes.
Skal koden ind som et modul, eller hvordan ?
Mvh
Avatar billede sjap Praktikant
23. juli 2005 - 21:30 #6
Nåh ja, koden vil faktisk også fungere i dit ark - uden ændringer.

Spørgsmålet er så hvordan koden skal fungere. Skal den aktiveres med en kommandoknap, eller skal den f.eks. køre automatisk, hver gang du ændrer på et af navnene (bør undgås hvis det ikke er noget, der sker hyppigt).
Avatar billede sjap Praktikant
23. juli 2005 - 21:41 #7
Hvis du vælge kommandoknap-løsningen skal du

- Højreklikke på menuen og vælge værktøjsmenuen "Kontrolelementer"
- I værktøjslinien "Kontrolelementer" trykker du på "Kommandoknap" og indsætter den i regnearket
- Højreklik på kommandoknappen og vælg "Vis programkode"
- Indsæt følgende tre linier i programkoden

For i = 2 To 13
    Sheets(i).Name = Worksheets("Noter").Range("F" & i)
Next i
Avatar billede sjap Praktikant
23. juli 2005 - 21:43 #8
Hvis du hellere vil have det skal ske løbende skal du

Tryk Alt-F11 og indsæt følgende kode

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 6 And (Target.Row >= 2 And Target.Row <= 13) Then
    Sheets(Target.Row).Name = Worksheets("Noter").Range("F" & Target.Row)
End If
End Sub
Avatar billede sjap Praktikant
23. juli 2005 - 21:46 #9
Bemærk at den automatiske løsning bruger lidt processorkraft på løbende at undersøge om der er sket nogen ændringer i Noter!F2:F13 Det er ikke kritisk ved mindre regnetunge ark, men ved mere komplicerede ark, vil man normalt foretrække at så meget regnekraft som muligt bruges på selve beregningerne.

Nu kan du jo prøve begge dele og se hvad du foretrækker.
Avatar billede florint Nybegynder
23. juli 2005 - 22:03 #10
Desværre....automatisk, sker der intet. Sætter jeg en knap på, får jeg en runtime error 1004.
Kan ikke have mere end et ark med samme navn.......de hedder jo i forvejen januar...december.
mvh
Avatar billede brynil Nybegynder
23. juli 2005 - 22:07 #11
>sjap, det med regnekraft, er det relevant idag? Jeg tænker selv over det, men har mere på fornemmelsen det er et levn fra 486 med 8 mb ram.
Avatar billede sjap Praktikant
23. juli 2005 - 22:13 #12
Prøv først med helt andre navne - f.eks. A, B, C osv.
Bagefter kan du så prøve med de rigtige navne.

DU har muligvis ret i det med at det måske ikke betyder så meget med hvor meget tid, der bruges på at kontrollere om celler er ændret, da det VISTNOK kun er manuelle ændringer i cellerne, der undersøges - og de forekommer jo typisk ikke under beregnignerne.

Jeg har nogen ark, der bruger 12-30 sekunder på at opdatere beregningerne, og jeg ville blive noget irriteret, hvis de pludselig skulle bruge 10-20 sek. mere tid.
Avatar billede brynil Nybegynder
23. juli 2005 - 22:19 #13
<sjap Tjah..det har du ret i. Det er nok lidt lissom når man får en ny computer. Efter et par måneder har man glemt hvor langsom den gamle var. Undskyld jeg blandede mig ;-)
Avatar billede sjap Praktikant
23. juli 2005 - 22:32 #14
brynil > Det er da helt i orden - Det var jo en relevant kommentar!
Avatar billede florint Nybegynder
24. juli 2005 - 00:24 #15
Hej sjap
Læg et svar. Du har ærligt fortjent dine point. Det virker ihvertfald med commandbtn, dog ikke med automatisk, men skidt med det. Jeg brugte a-b-c osv. så kørte koden med det samme.
Godnat
Avatar billede florint Nybegynder
24. juli 2005 - 07:27 #16
Godmorgen....Ja så driller det alligevel :-) Jeg har lige lagt koden over på mit "rigtige" ark, og der stå månederne listet i kolonne F32:F43....og så virker det ikke mere. Er det Range der skal ændres eller må der bare ikke stå mere i den kolonne?
mvh
Avatar billede brynil Nybegynder
24. juli 2005 - 08:04 #17
Prøv at ændre til 'Target.Row >= 32 And Target.Row <= 43'.
Avatar billede florint Nybegynder
24. juli 2005 - 09:25 #18
Hej brynil
Tak for inputtet. Desværre har jeg ikke evnet at få den automatiske til at virke. Det var derfor jeg spurgte til Range. Har ændret lidt i min Noter og sat Range i kolonne J fra 2-13 og så virker det....Men inden jeg ændrer referencerne til de resterende steder i mine ark ville jeg lige checke om det var muligt at flytte Range.

Til sjap - 10 øren er faldet med hensyn til at navngive aksernes indeling på grafer...det virker fint når månedens navne står i mit ark, noter :-) Tak for hintet.
Mvh
Avatar billede brynil Nybegynder
24. juli 2005 - 10:16 #19
Du kan ændre range som du lyster.

Target er hér udtryk for den celle som der bliver ændret i. Prøv i et tomt ark fx:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  MsgBox ("Column = " & Target.Column & " Row = " & Target.Row)
End Sub

Så ser du hvad Sub'en registrerer (koordinater).

Lav den lidt om, iht sjaps eksempel:

If Target.Column = 6 And (Target.Row >= 2 And Target.Row <= 13) Then
  MsgBox ("Column = " & Target.Column & " Row = " & Target.Row)
End If

Så vil du se at Sub'en kun reagerer hvis du ændrer iht det der defineres i If.. sætningen og er ligeglad med om du ændrer i et andet område på arket.
Avatar billede brynil Nybegynder
24. juli 2005 - 10:23 #20
Og husk at ændre i:

Range("F" & Target.Row)

"F" skal modsvare 'Target.Column = 6'.
Er den relevante kolonne "J" skal det være 'Target.Column = 10'
Avatar billede sjap Praktikant
24. juli 2005 - 10:37 #21
Godmorgen - I er tidligt i sving!

florint > prøv at ændre den "automatiske" funktion til

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 6 And (Target.Row >= 32 And Target.Row <= 43) Then
    Sheets(Target.Row-30).Name = Worksheets("Noter").Range("F" & Target.Row)
End If
End Sub
Avatar billede brynil Nybegynder
24. juli 2005 - 10:40 #22
Der er jo nogen som ikke sover den halve søndag væk ;-))
Avatar billede sjap Praktikant
24. juli 2005 - 10:40 #23
Ovenstående skulle virke med teksterne i F32:F43. Så ikke lige at du havde flyttet dem igen senere.
Avatar billede sjap Praktikant
24. juli 2005 - 10:58 #24
Den automatiske funktion var måske blevet lidt kryptisk, og det skyldes lidt smart udnyttelse af nogen tilfældigheder. Derfor er det måske på plads med en forklaring:

Jeg går ud fra at i er med på at Target er den celle, der er ændret i.

Sætningen:
    If Target.Column = 6 And (Target.Row >= 32 And Target.Row <= 43) Then
er derfor blot en kontrol af om den ændrede sætning ligger i området med Ark-overskrifter. Derfor skal denne sætning ændres, hvis overskrifterne flyttes.

Funktionen
    Sheets(Target.Row).Name
ændrer navnet på Ark nummer "Target.Row". Dette er lidt et tilfælde, da det første af de ark, der skal ændres navn på er ark nr. 2 og navnet er placeret i kolonne F i RÆKKE nr 2 (altså tilfældigvis 2 begge steder).  Navnet på ark nr. 3 står i kolonne 3 osv. Hvis området med arknavnene flyttes, så det første navn IKKE står i række 2, så skal funktionen altså ændres. Ændringen er sådan set ret enkel idet man blot skal sikre at resultatet altid er 2 ved det første arknavn, f.eks.
    Sheets(Target.Row-30).Name
hvis navnene er flyttet til F32:F43

Den sidste funktion referer blot til cellen, der lige er blevet ændret
Worksheets("Noter").Range("F" & Target.Row)
Avatar billede brynil Nybegynder
24. juli 2005 - 11:00 #25
Kan han ikke ændre den sidste linie til:

Sheets(Target.Row).Name = Worksheets("Noter").Cells(Target.Row, Target.Column).Value

Så undgår han at rette i den linie.
Avatar billede sjap Praktikant
24. juli 2005 - 11:05 #26
Efter denne lille gennemgang kunne jeg lige se et par muligheder for at trimme funktionen lidt, så du ikke skal pille så meget ved den, når du flytter rundt på området med arknavne:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
rStart = "F2"
If Target.Column = Range(rStart).Column And (Target.Row >= Range(rStart).Row And Target.Row <= Range(rStart).Row + 11) Then
    Sheets(Target.Row - Range(rStart).Row + 2).Name = Worksheets("Noter").Range(Target.Address)
End If
End Sub
Avatar billede sjap Praktikant
24. juli 2005 - 11:07 #27
Brynil > close - but no cigar! Men du har ret i at linien kunne ændres, så han ikke behøver rette i den.
Avatar billede brynil Nybegynder
24. juli 2005 - 11:13 #28
Yes og jeg håber han er klar over ømfindtligheden mht nye ark, placering eller flytten rundt på dem.
Avatar billede florint Nybegynder
24. juli 2005 - 11:21 #29
Hej Begge,
Jeg er ked af det men jeg kan dæleme ikke få den automatiske til at virke. Jeg har prøvet alle de foreslåede metoder men lige meget hjælper det :-(
Hvorimod den med knappen virker upåklageligt - hver gang...
brynil - du må hellere lave et svar også da jeg synes dine indlæg også fortjener lidt point for ulejligheden (ikke mindst tidligheden :-))
Mvh
Avatar billede sjap Praktikant
24. juli 2005 - 11:21 #30
Det er selvfølgelig vigtigt at forstå at koden er lavet specifikt til dette formål, og ud fra de givne forudsætninger. Koden er IKKE generel, men kræver lidt tilpasning, hvis der foretages ændringer i:

- placering af område med dynamiske navne
- antal ark, der er placeret INDEN arkene med dynamiske navne

For at forenkle tilpasning, hat jeg lige lavet endnu en lille ændring:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
rStart = "F2"  'Første celle i område med dynamiske navne
aStart = 2      'Nummeret på det første ark med dynamisk navn (tælles på fanebladene fra venstre)
If Target.Column = Range(rStart).Column And (Target.Row >= Range(rStart).Row And Target.Row <= Range(rStart).Row + 11) Then
    Sheets(Target.Row - Range(rStart).Row + aStart).Name = Worksheets("Noter").Range(Target.Address)
End If
End Sub
Avatar billede brynil Nybegynder
24. juli 2005 - 11:23 #31
Nej tak ;-)
Avatar billede sjap Praktikant
24. juli 2005 - 11:23 #32
florint > Kan du beskrive lidt mere detaljeret, hvad det er, der går galt med den automatiske?
Avatar billede florint Nybegynder
24. juli 2005 - 11:31 #33
Der sker intet....absolut intet :-( Har den mail? hvis du gider at kigge?
Behøves ikke, da jeg er fint tilfreds med knappen.
Mvh
Avatar billede sjap Praktikant
24. juli 2005 - 11:32 #34
sjap9000 snabela hotmail . com
Avatar billede sjap Praktikant
24. juli 2005 - 11:45 #35
florint > Funktionen fungerer fint her! Fandt dog ud af, at det kan gå galt, hvis man kopierer flere celler ad gangen, så jeg lavede lige endnu en justering:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

rStart = "F29"  'Første celle i område med dynamiske navne
aStart = 2      'Nummeret på det første ark med dynamisk navn (tælles på fanebladene fra venstre)

If Target.Column = Range(rStart).Column And (Target.Row >= Range(rStart).Row And Target.Row <= Range(rStart).Row + 11) Then
    For Each c In Target
        Sheets(c.Row - Range(rStart).Row + aStart).Name = Worksheets("Noter").Range(c.Address)
    Next c
End If

End Sub
Avatar billede florint Nybegynder
24. juli 2005 - 11:56 #36
Hej
Takker for hjælpen - Jeg satte dit sidste forslag ind, og så virker det!!!!!
Tak for kampen til jer begge.
Vi "mødes" nok igen :-) Jeg har opdaget Excel.....og hvad man kan gøre i det.
Mvh
Avatar billede sjap Praktikant
24. juli 2005 - 12:08 #37
:0)
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