Print side | Luk vindue

Celle med formel skal ændre Ark-navnet

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=3782
Udskrevet den: 23.Nov.2024 kl. 07:58


Emne: Celle med formel skal ændre Ark-navnet
Besked fra: Krameren
Emne: Celle med formel skal ændre Ark-navnet
Posteringsdato: 03.Feb.2019 kl. 17:37
Jeg har rodet rimelig meget rundt med et udspil til en læsekontrakt, hvor læreren skal kunne skrive en masse data på en forside og så slår eksempelvis navn, klasse og antal sider der skal læses igennem på de følgende ark i mappen - ligeledes slår elevernes data igennem på hovedarket. Alt det har jeg lavet.


Når man på forsiden ved 1 skriver navnet på den første elev - f.eks. Peter Hansen, Så skrives der automatisk Peter Hansen på det ARK tilhørende elev1.

Det kunne være fedt hvis det elevens navn Peter Hansen, blev automatisk lavet til navnet på Arket (sheet). Dvs. læreren skriver navnet på forsiden - navnet slår igennem ude på elev ARKET og så ændrer arkets navn til elevens navn.
uploads/2386/læsekontrakt-blank-31elever.xlsm - læsekontrakt-blank-31elever.xlsm



Svar:
Besked fra: maxzpad
Posteringsdato: 05.Feb.2019 kl. 09:00
Dette kan kun lade sig gøre med en makro/VBA-kode. Det forudsætter, at du har 100 % styr på dine arks indeksnumre, dvs. i hvilken rækkefølge de står fra venstre mod højre - inklusive eventuelle skjulte ark.

Samtidig skal du være opmærksom på, at to ark ikke kan have identiske navne, og at arknavnet højst kan være 31 karakterer langt.

Hvis dit hovedark er placeret længst til venstre (og der ingen skjulte ark er til venstre for arket), vil dette ark have indeksnummer 1. Hvis det første elev-ark står umiddelbart til højre for hovedarket (og der ingen skjulte ark er imellem dem), vil dette første elev-ark have indeksnummer 2, og så fremdeles.

En makro skal så detektere indtastninger i de celler, hvor elevernes navne står. Hvis eleven står i række 1, og vedkommendes data skal stå i arket med indeksnummer 2, kan det skrives således i hovedarkets kodemodul:

Private Sub Worksheet_Change(ByVal Target As Range)

    ' Hvis ændringen foretages i kolonne 1 (kolonne A)
    If Target.Column = 1 Then
   
        ' Gå videre ved fejl (f.eks. arknavn allerede anvendt)
        On Error Resume Next
       
        ' Hvis indholdet af cellen ikke er blank/tom
        If Target <> "" Then
       
            ' Navnet for arket med indeksnr. = cellens rækkenr. plus 1
            ' sættes lig med cellens 31 første karakterer fra venstre
            Sheets(Target.Row + 1).Name = Left(Target.Value, 31)
           
        Else
       
            ' Hvis indholdet af cellen ER blank/tom
            ' sættes arknavnet til "Ark" + rækkenr. + 1
            Sheets(Target.Row + 1).Name = "Ark" & Target.Row + 1
           
        End If
       
        ' Ved fejl vises Excels fejlbesked
        If Err.Number <> 0 Then
       
            MsgBox Err.Description, vbOKOnly + vbExclamation, "Fejl i arknavn"
           
        End If
       
        On Error GoTo 0
   
    End If

End Sub




Print side | Luk vindue