Avatar billede gnalling1 Nybegynder
25. juni 2005 - 12:05 Der 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?
Avatar billede brynil Nybegynder
25. juni 2005 - 12:51 #1
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å.
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 13:02 #2
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

End Sub
Avatar billede brynil Nybegynder
25. juni 2005 - 13:07 #3
Under Tools-References vælg flg:

  Visual Basic for Applications
  Microsoft Excel xx.0 Object Library
  Microsoft Forms x.0 Object Library

Så skulle du være sikret. xx = højeste nummer du kan se.
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 13:12 #4
De er afkrydset!!??? Men herhjemme kører jeg med Excel 97, kan det være derfor?
Avatar billede brynil Nybegynder
25. juni 2005 - 13:18 #5
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.

Jeg er også nødt til at løbe nu.
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 13:19 #6
Det er bare i orden :o)
Avatar billede brynil Nybegynder
25. juni 2005 - 14:21 #7
Prøv lige at skrive:

On Error Resume Next

inden For Each c ...
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 14:56 #8
Nu går den ikke i fejlstatus længere, men knapperne skifter desværre ikke navn. :o]
Avatar billede brynil Nybegynder
25. juni 2005 - 15:02 #9
Prøv i en sub at skrive:

ActiveSheet.OLEObjects("CommandButton1").Object.Caption = "Test"

Check forinden at du har en knap i arket med NAME: CommandButton1, og se om der sker noget.
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 15:15 #10
Når jeg optager en makro, skriver den således:

ActiveSheet.Shapes("Button 2").Select
Avatar billede brynil Nybegynder
25. juni 2005 - 15:24 #11
Så er det fordi dine knapper har et navn der er forskelligt fra "CommandButton*"

Hvis du opretter en knap og får navnet "Button*", så skal den oprindelige kodelinie se således ud:

ActiveSheet.OLEObjects("Button" & i).Object.Caption = Worksheets(i).Name

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.
Avatar billede brynil Nybegynder
25. juni 2005 - 15:28 #12
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.
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 15:37 #13
Undskyld, men hvilken variabel skal i være?
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 15:39 #14
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

End If

End Sub
Avatar billede brynil Nybegynder
25. juni 2005 - 15:49 #15
"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:

...("Button " & i)...
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 15:57 #16
Den går stadigvæk i fejlstatus  med følgende fejlkode: Kørselsfejl 1004. Kan ikke angive egenskaben OLEObjects for klassen worksheet.
Avatar billede gnalling1 Nybegynder
25. juni 2005 - 16:49 #17
Bliver nødt til at smutte nu....:o)
Avatar billede martin_moth Mester
26. juni 2005 - 22:56 #18
I hvilken linie kommer fejlmeddelsen?
Avatar billede gnalling1 Nybegynder
27. juni 2005 - 12:54 #19
I linjen:

ActiveSheet.OLEObjects("Button " & i).Object.Caption = Worksheets(i).Name

Har prøvet den både derhjemme (Excel 97) og på arbejdet (Excel 2000). Får samme fejl begge steder.
Avatar billede martin_moth Mester
27. juni 2005 - 15:38 #20
Prøv hver for sig, for mere præcist at finde fejlen

ActiveSheet.OLEObjects("Button " & i).Object.Caption = "test"
msgbox Worksheets(i).Name

Kommer der fejl hvis du deler det op - hvis ja, hvor?
Avatar billede gnalling1 Nybegynder
27. juni 2005 - 15:57 #21
Hej Martin!

Fejl 1004 kommer i linjen:
ActiveSheet.OLEObjects("Button " & i).Object.Caption = "test"
Avatar billede bak Forsker
28. juni 2005 - 00:09 #22
se lige om du kan få denne til at køre

Sub Makro1()
On Error Resume Next
    For x = 1 To Sheets.Count
        ActiveSheet.Shapes(x).Select
        Selection.Characters.Text = Sheets(x).Name
    Next
End Sub
Avatar billede gnalling1 Nybegynder
28. juni 2005 - 08:48 #23
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?
Avatar billede gnalling1 Nybegynder
04. august 2005 - 10:42 #24
Lukket - nyt spørgsmål oprettet
Avatar billede martin_moth Mester
04. august 2005 - 13:52 #25
Hvor?
Avatar billede gnalling1 Nybegynder
10. august 2005 - 15:58 #26
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
Avatar billede martin_moth Mester
10. august 2005 - 16:20 #27
jo jo.
Kunne bare ikke lige finde det. Det er jo her:
http://www.eksperten.dk/spm/637313
Avatar billede gnalling1 Nybegynder
10. august 2005 - 16:31 #28
Alletiders :o)
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