Avatar billede gnalling1 Nybegynder
23. juni 2005 - 10:20 Der er 19 kommentarer og
1 løsning

VBA Excel løkke med makroknapper

Hej! Jeg har et ark, hvor der er 30 makroknapper tilknyttet. Jeg vil gerne lave en løkke for de 30 makroknapper. Hver knap skal linkes til et ark, og når man ændrer navnet på makroknappen, så skal fanenavnet automatisk ændres (navnene bliver tit ændret i forbindelse med ISO-ændringer). Hvordan gør man det? Jeg kan ikke få fat i, hvordan jeg skal køre en løkke ud fra "Buttons" samt linke en knap op til et ark. Er der nogen, der ved noget om dette, eller er det ikke muligt. HASTER venligst!!!
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 10:31 #1
Her er lidt af det, virker kun på Activesheet, jeg ved ikke hvordan du refererer til dine ark:

Sub Makro1()
    Dim S As Shape
    For Each S In ActiveSheet.Shapes
        If S.Type = msoOLEControlObject Then
            ActiveSheet.Name = S.Name
        End If
       
    Next
   
End Sub
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 10:34 #2
Det skal være

if s.type=msoFormControl then

Hvis det er en knap fra Formular-værktøjslinien
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 10:41 #3
Hej Stefan! Jeg har kopieret din sub direkte, men der sker ikke noget. Jeg har indsat en "button" fra "Forms" værktøjslinjen, hvilket jo må være det samme, som du siger i sidste kommentar. Kan du få det til at virke, hvis du laver indsætter en "button/knap" i et ark?
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 10:48 #4
Det virker hos mig - er det den rigtige "Activesheet". Bemærk dog det ikke er et færdigt forslag, kun et eksempel på at gennemløbe shapes.

Jeg har et andet forslag:
problemet er vel lidt, at ændrer du knappens navn, mister du forbindelsen mellem knappen og arket, så det er måske bedre at styre ændringen af navne på både ark og knapper inde fra én procedure. Et anden problem, at andre formularelementer også bliver taget med i ovenstående eksempel.

Du kan evt. have et ark med to kolonner: gammelt navn og nyt navn. Gennemløb kolonnen med gammelt navn, find for hvert navn tilsvarende knap og ark og omdøb til nyt navn i kolonnen ved siden af.

Brug noget i retning af Worksheet(1).Shapes(gammeltnavn).name = nytnavn og Worksheet(gammeltnavn).name = nytnavn
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 10:52 #5
kan også styres inde fra proceduren, i stedet for et ekstra ark, med noget i stil med:

dim gamlenavne(), nyenavne()
dim i as integer
gamlenavne = array("Ark2004_1","Ark2004_2","Ark2004_3","Ark2004_4")
nyenavne = array("Ark2005_1","Ark2005_2","Ark2005_3","Ark2005_4")
for i=lbound(gamlenavne) to ubound(gamlenavne)
  Worksheet(1).Shapes(gamlenavne(i)).name = nyenavne(i)
  Worksheets(gamlenavne(i)).name = nyenavne(i)
next
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 10:53 #6
Worksheet(1) skal være Worksheets(1)
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 11:00 #7
Hej igen! Nu virkede det, men navnet er "Button 1" i stedet for det navn jeg har døbt knappen til. Mit "problem" er, at det ikke er mig selv, der skal sidde med arket, og det skal være meget let tilgængeligt, da den der sidder med det, ikke er superbruger i Excel, så måske skal det være dit første forslag. Jeg har fået den til at ændre navnet i et andet ark, men problemet er nu, hvordan jeg sætter knap 1 = makro 1, samt giver mit tildelte navn i stedet for "button i". Som du nok kan mærke, er jeg ikke så velbevandret i VBA endnu, så jeg sætter meget stor pris på din hjælp.
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 11:04 #8
jeg mener knap 1 = sheet1
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 11:31 #9
S.name er navnet på knappen, mens
S.AlternativeText er teksten på knappen

hvad med:

Sub GivNytNavn()
    Dim gamlenavne As Range
    Dim c As Range
    Dim S As Shape
    'gamle navne i A2:A31
    Set gamlenavne = Worksheets("Navne").Range("A2:a31")
    'nye navne i B2:B31
    For Each c In gamlenavne
        Worksheets(c).Name = c.Offset(0, 1)
       
        For Each S In Worksheets(1).Shapes
          If S.AlternativeText = c Then
              S.AlternativeText = c.Offset(0, 1)
              Exit For
          End If   
        Next
    Next
End Sub
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 11:34 #10
- jeg har forudsat, at du opretter et ark kaldet Navne og at dine knapper ligger på det første ark (Worksheets(1)), det sidste kan du ændre til Worksheets("indsæt det rigtige arknavn her")
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 11:42 #11
Jeg har nu oprettet et ark, der heddr "Navne" og et ark der hedder "Knapper", men den går i fejlstatus ved: Worksheets(c).Name = c.Offset(0, 1). Kører din fint?
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 11:57 #12
Problemet med mit forslag, er at c skal erstattes af c.value et par steder:

Sub GivNytNavn()
    Dim gamlenavne As Range
    Dim c As Range
    Dim S As Shape
    'gamle navne i A2:A31
    Set gamlenavne = Worksheets("Navne").Range("A2:a31")
    'nye navne i B2:B31
    For Each c In gamlenavne
        Worksheets(c.value).Name = c.Offset(0, 1)
       
        For Each S In Worksheets(1).Shapes
          If S.AlternativeText = c.value Then
              S.AlternativeText = c.Offset(0, 1)
              Exit For
          End If   
        Next
    Next
End Sub
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 12:02 #13
Jeg kan næsten ikke lide at sige det, men min går stadigvæk i fejlstatus samme sted. Gør din ikke det?
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 12:55 #14
Jeg har kun testet det med et simpelt eksempel med to ark - men der virker det efter rettelsen.
Hvilken fejlmeddelelse?
Har du de gamle navne i A-kolonnen og de nye i B-kolonnen på arket "Navne"?
Er de gamle navne magen til de nuværende ark-navne?
Hvad hedder arkene (eksempel)?
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 13:19 #15
Jeg har også kun lavet en lille test. Jeg har i alt 4 ark. Ark1= Navne, ark2=Knapper, ark3 og ark4. i A2 (i Navne) står Otto og A3 står der Susanne. B2 står der Bent og B3 står der Dorte. I "Knapper" har jeg oprettet 2 knapper, den ene med Otto og den anden med Susanne. Jeg har ændret ranget til "A2:A3".

Sub GivNytNavn()
    Dim gamlenavne As Range
    Dim c As Range
    Dim S As Shape
    'gamle navne i A2:A31
    Set gamlenavne = Worksheets("Navne").Range("A2:A3")
    'nye navne i B2:B31
    For Each c In gamlenavne
        Worksheets(c.Value).Name = c.Offset(0, 1)
       
        For Each S In Worksheets("Knapper").Shapes
          If S.AlternativeText = c.Value Then
              S.AlternativeText = c.Offset(0, 1)
              Exit For
          End If
        Next
    Next
End Sub
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 13:34 #16
Du er nødt til at have de navne, som du bruger på arket i kolonnen Knapper!A2:A3, ellers kan programmet ikke finde de rigtige ark.
dvs. A2="Ark3", A3="Ark4", B2="Bent", B3="Dorte",
og knapperne skal så her også hedde "Ark3" og "Ark4".

Med en lille tilføjelse:
        c.value = c.Offset(0, 1)
bliver de gamle navne opdateret, således at de er klar til næste gang:

Sub GivNytNavn()
    Dim gamlenavne As Range
    Dim c As Range
    Dim S As Shape
    'gamle navne i A2:A31
    Set gamlenavne = Worksheets("Navne").Range("A2:A3")
    'nye navne i B2:B31
    For Each c In gamlenavne
        Worksheets(c.Value).Name = c.Offset(0, 1)
        c.value = c.Offset(0, 1)
       
        For Each S In Worksheets("Knapper").Shapes
          If S.AlternativeText = c.Value Then
              S.AlternativeText = c.Offset(0, 1)
              Exit For
          End If
        Next
    Next
End Sub
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 13:41 #17
Tusind, tusind tak. Det virker jo fuldstændig efter hensigten :o). Jeg håber, du vil bære over med min uvidenhed. Hvor lang tid har du arbejdet med VBA (mere så jeg ved hvor lang tid der går, før man begynder at få et nogenlunde overblik :o]). Send mig straks dit svar, så du kan få dine points.
Avatar billede stefanfuglsang Juniormester
23. juni 2005 - 13:54 #18
Jeg har programmeret i forskellige programmeringssprog i tyve år, men VBA mest i de seneste syv-otte år, dog ikke dagligt, det har været i perioder. Jeg ved ikke helt hvornår man får et nogenlunde overblik, et fuldstændigt overblik får jeg nok aldrig...

Jeg bruger i øvrigt meget 1) eksperten 2) diverse hjemmesider via google 3)hjælpen i Excel 4) ikke mindst: er man i tvivl, kan man komme langt med at indspille en makro, udføre handlingerne, og dernæst rette den indspillede kode (eller lade sig inspirere af den)
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 14:06 #19
Tak for dit svar. Endnu engang tak for hjælpen - og god sankt hans aften :o)
Avatar billede gnalling1 Nybegynder
23. juni 2005 - 14:33 #20
Hej Stefan! Hvis du ser dette, så kan jeg lige se, at den ikke opdaterer navnet på knappen men kun på arket. Gør din det?
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