Avatar billede folj Forsker
21. august 2018 - 08:51 Der er 17 kommentarer og
1 løsning

Excel: Trække Sheetname ind i formel

Jeg har en overskrift stående i hvert ark i celle C5, og der vil jeg gerne trække sheetname ind i cellen via en formel.

Men hvordan tilgår jeg worksheet.name i en formel.

Jeg  lavede et hurtigt forsøg, med en function der trækker den med:
Function ShName()
  Dim ShName As String
  ShName = ActiveSheet.Name
End Function


Men funktionen returnerer #NAME?

Hvad gør jeg galt?
Avatar billede supertekst Ekspert
21. august 2018 - 10:16 #1
Hvor er din funktion placeret?
Avatar billede acore Ekspert
21. august 2018 - 10:32 #2
Du behøver ikke en funktion (selv om det vil gøre lettere at læse):

=MID(CELL("filename";A1);FIND("]";CELL("filename";A1))+1;255)

Fra https://exceljet.net/formula/get-sheet-name-only
Avatar billede folj Forsker
21. august 2018 - 11:28 #3
@supertekst. Den er placeret I et modul (modul1)
Avatar billede supertekst Ekspert
21. august 2018 - 11:40 #4
Ok - har du mulighed for at vise / sende den relevante VBA-kode?
Avatar billede supertekst Ekspert
21. august 2018 - 11:49 #5
Har lige afprøvet din bestående VBA-kode i et Module uden problemer.
Avatar billede folj Forsker
21. august 2018 - 12:56 #6
@supertekst.
jamen min vba-kode er nøjagtig den jeg kopierede ind I mit spørgsmål.

Funktionskaldet laver jeg I celle C5 med =ShName()
Avatar billede supertekst Ekspert
21. august 2018 - 13:12 #7
Ok - jeg prøver det samme
Avatar billede supertekst Ekspert
21. august 2018 - 14:01 #8
Ingen løsning endnu - vender tilbage hvis det lykkes.
Avatar billede acore Ekspert
21. august 2018 - 14:14 #9
Tror ikke du har enablet makroer - det vil kunne forklare fejlen
Avatar billede Jan Hansen Ekspert
21. august 2018 - 14:38 #10
Prøv denne

Option Explicit

Function ShName()
    ShName = ActiveSheet.Name
End Function


Jan
Avatar billede supertekst Ekspert
21. august 2018 - 14:56 #11
Opret en brugerdefineret funktion!
Det ser umiddelbart ud til at kunne virke.
Avatar billede store-morten Ekspert
21. august 2018 - 16:03 #12
I et Modul:
Function ShName(rng)
    Application.Volatile
    ShName = rng.Worksheet.Name
End Function

Formel i C5: =ShName(A1)
Avatar billede excelent Ekspert
21. august 2018 - 18:06 #13
Function ShName() As String
  ShName = ActiveSheet.Name
End Function
Avatar billede Dan Elgaard Ekspert
24. august 2018 - 08:28 #14
Prøv med denne her:

Function ARKNAVN()
      Application.Volatile
      ARKNAVN = Application.Caller.Worksheet.Name
End Function
Avatar billede folj Forsker
24. august 2018 - 09:38 #15
Det er dejligt med konkrete forslag til hvordan det løses, men nu har jeg snart 10 forskellige måder at skrive det på, så jeg ved snart ikke hvad der er det rigtige at vælge.

Der er åbenbart mang måder at løse det på.
Har i nogen argumenter for hvorfor jeres made er den bedste?

Hvis nu alle sheets forsøger at tække ud fra ActiveWorksheet.Name så kommer der jo til at stå "Uge 34" i alle ark.

Kan man tænke sig at hvis bruger så vælger at udskrive flere sheets, så står der "Uge 34" på dem allesammen.
Avatar billede acore Ekspert
24. august 2018 - 09:43 #16
Du kunne jo overveje selv at afprøve forslagene - inkl det med udskrift, du selv nævner. Det er da en overkommelig opgave.

Hvilken af de, der virker, som du ender med at bruge, er ligemeget. Ellers står valget mellem en makro (mange forslag - synes bedst om #12) eller formel (#2).
Avatar billede Dan Elgaard Ekspert
24. august 2018 - 10:25 #17
Hvis u blot ønsker, at vide navnet på det aktive faneblad, så er min løsning nok den bedste.

Hvis du ønsker, at kunne trække navnet på et faneblad fra et andet faneblad, så er Store-Mortens løsning den bedste.

Umiddelbart vil jeg vurdere, at min løsning er den mest robuste, mens Store-Mortens er den mest fleksible.

Men, de andre er nok uenige med mig, siden de er kommet med andre løsninger :-)
Avatar billede folj Forsker
24. august 2018 - 11:33 #18
Dejligt med konkrete forslag til hvordan det gøres.
Nu er vi oppe på næsten 10 mulige måder at gøre det på.
Hvilken skal jeg så vælge?

Har I nogle argumenter hvorfor det ene er mere rigtigt end det andet.

Kunne man tænke sig den situation at når jeg trækker det med
ShName = ActiveSheet.Name
så star der egentlig den same sheetname på alle sheets, fordi der kun er ét  ActiveSheet.Name.

Hvis så bruger skriver flere sheets ud så star der eksempelvis "Uge 34 på dem allesammen?

Hvorimod
ShName = Application.Caller.Worksheet.Name
ville være forskellig fordi det kaldes fra hver enkelt sheet.

Application.Caller.Worksheet.Name
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

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