25. juni 2005 - 12:05Der er
27 kommentarer og 1 løsning
VBA sub til at få makroknap = arknavn
Hej! Jeg prøver at oprette en sub, der kan ændre navnene på makroknapper og arknavnene samtidigt. Det bliver ved med ikke at virke. Jeg har fået forslag men ingen virker hos mig??? Jeg vil køre en løkke, der opdaterer makronavn og arknavn. Vi ændrer ofte navne i forbindelse med ISO-ændringer, og vi har et ark, der indeholder 30 makroknapper, der går til de enkelte ISO-procedurer. Disse navne ændres jævnligt, så det ville være rart kun at ændre navnet i et ark, derefter trykke på en knap "Opdater", og så blev navnene på de 30 knapper og navnene på de 30 tilhørende ark ændret samtidigt. Er det helt umuligt?
Når du kigger på en knaps properties vil du kunne se Name og Caption. Name er det navn du anvender til at adressere knappen i din kode, fx. CommandButton1_Click. Caption er den tekst du ser på knappen.
Prøv denne for at skifte caption:
i = 1 For Each c In ActiveSheet.Shapes ActiveSheet.OLEObjects("CommandButton" & i).Object.Caption = Worksheets(i).Name i = i + 1 Next c
Men der er fortsat mange fejlmuligheder. Første knap får caption efter første (venstre) ark osv, så det skal du holde styr på. Ligeledes ændringer i dine knapper eller ark undervejs. Og sikkert meget andet.
Jeg tror ikke der er en simpel måde at styre det på.
Hej Brynil! Jeg har lavet nedenstående sub, men jeg får følgende fejlkode: Kørselsfejl 1004. Kan ikke angive egenskaben OLEObjects for klassen worksheet.
Sub Test()
Dim i Dim c As Shape
i = 1 For Each c In ActiveSheet.Shapes ActiveSheet.OLEObjects("CommandButton" & i).Object.Caption = _ Worksheets(i).Name i = i + 1 Next c
Det er det sikkert. Dér kan jeg desværre ikke hjælpe dig. Vent og se om andre kan hjælpe dig eller prøv dig frem. Jeg er ikke sikker på om du overhovedet kan anvende den kodning i '97.
Check hvad dine kontroller hedder ved at åbne Properties-vinduet. Jeg tror ikke der er et mellemrum mellem Button og 2, som du angiver. Så er der måske en understregning du ikke har bemærket.
Det du skriver mellem anførselstegnene: ...OleObjects("nnn")..., skal være identisk med det NAME: din knap har, bortset selvfølgelig fra nummeret som du jo tilføjer med variablen i.
Jeg kan få fat i overskriften nu ved at skrive følgende "naive" sub. Hvis jeg bare kan få den ind i en løkke, vil jeg være rigtig glad. Vil det være bedre?
Sub Test()
Dim Arbejdsområde1 As Range Set Arbejdsområde1 = Range("a1") Dim Arbejdsområde2 As Range Set Arbejdsområde2 = Range("a2")
If Selection.Text = "" Then ActiveSheet.Shapes("Button 1").Select Selection.Characters.Text = Arbejdsområde1 With Selection.Characters(Start:=1, Length:=1).Font .Name = "Arial" .FontStyle = "Regular" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Range("B10").Select
End If
If Selection.Text = "" Then ActiveSheet.Shapes("Button 2").Select Selection.Characters.Text = Arbejdsområde2 With Selection.Characters(Start:=1, Length:=1).Font .Name = "Arial" .FontStyle = "Regular" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Range("B10").Select
"i" er en variabel, du har bare ikke erklæret den, som man faktisk bør, som her:
Dim i as integer i = 1
("Button" & i) betyder så ("Button1"), så længe i = 1. Men den ændrer du jo ved at lægge 1 til i hver gang dit loop har kørt 1 gang. Så næste gang løkken gennemløbes vil det være ("Button2") og så fremdeles.
Hvis der rent faktisk er et mellemrum mellem "Button" og nummeret, skal du skrive:
Hej Bak! Den virker perfekt! Kan jeg godt have 2 ark med henholdsvis navne og knapper, hvor navnene på knapperne ikke bliver opdateret? Jeg vil nemlig gerne have et ark, hvor de gamle og nye navne står. Ved ændringer skal arknavnet og navnet på knapperne så ændres. Er det derfor muligt kun at få nogen af arknavnene vist på knapperne?
Hej Martin! Jeg nyoprettede "VBA Excel start med at kopiere navn fra ark 3", da jeg ikke fik noget feedback på dette spørgsmål. Kabbak svarede på det. Jeg brugte dog noget af Baks løsning fra dette spørgsmål og spurgte Bak, hvordan jeg fik givet ham point for det. Det har jeg ikke fået svar på endnu. Er det ikke sådan man gør? Mvh Gnalling
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.