23. juni 2005 - 10:20Der 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!!!
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
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?
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
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
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.
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
- 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")
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?
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
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)?
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
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
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.
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)
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?
Synes godt om
Ny brugerNybegynder
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.