Avatar billede hubertus Seniormester
04. september 2006 - 15:42 Der er 23 kommentarer og
1 løsning

knap på værktøjslinien

Jeg har oprette en knap på værktøjslinien, hvor jeg har tilknyttet en makro, som får Excel til at springe til en faneblad, som hedder Menu. Der er tale om et delt regneark.

sub Menu()
  activeworkbook.Save
  sheets("menu").select
end sub.

Når brugeren aktivere knappen, så kan programmet huske et tidligere ark som så åbnes. Ser jeg på hvad knappen henviser til så står der: Uge 24.XLS!thisWorkbook.menu. Uge 24 er ikke åben, når det sker, men åbnes ved aktivering af knappen. Hvor gemmes oplysningen om uge 24?

Et andet spørgsmål er:

Min woorkbook åbnes med:
Private sub workbook_open()
  application.commandbars("Container").Visible= True
  Toolbars("Container").Position = xlTop
End sub

og lukkes med:

Private sub workbook_open()
  Application.commandbars("Container").Visible= False
  Application.commandbars("Container").delete
End sub

Når brugerne har 2 regneark åben samtidig f.eks. uge 32 og uge 33, og lukker den ene, så lukkes værktøjslinierne også ned. Hvordan undgås det?

mvh. / hubertus
Avatar billede gider_ikke_mere Nybegynder
05. september 2006 - 02:34 #1
Oplysningerne gemmes vidst i person.xls

For Each wb In Workbooks()
    I = I + 1
Next
If I < 2 Then
  Application.CommandBars("Container").Visible = False
  Application.CommandBars("Container").Delete
End If
Avatar billede hubertus Seniormester
06. september 2006 - 16:39 #2
lige en rettelse til proceduren der lukker regnearket. Der skal selvfølgelig stå Private sub Workbook_closed() -
hej akyhne - din kode virker perfekt til at holde styr på, hvornår knappen på værktøjslinien skal lukkes ned - tak for det.
ang. det som gemmes, så ligger der ikke noget i person.xls. Er der andre muligheder?
Avatar billede hubertus Seniormester
06. september 2006 - 17:06 #3
Når jeg tilknytter en makro til værktøjslinie til makroen, så tilknytter jeg en makro der menu, som ligger i ThisWorkbook. Når jeg efterfølgende gemmer og åbner arket igen, og ser hvad knappen nu peger på, så står der uge37.xls!Ark1.menu. Det er formentlig her at det går galt, når den husker et tidliger ark. Hvordan kan jeg sikre at knappen peger på en makro som står i netop det ark som er åben?

mvh. Hubertus
Avatar billede gider_ikke_mere Nybegynder
06. september 2006 - 18:47 #4
Hvordan har du oprettet værktøjslinien?
Avatar billede hubertus Seniormester
07. september 2006 - 06:25 #5
Jeg opretter værktøjslinine som følger:
Funktioner - tilpas - vælg værktøjslinien - tilføj ny - navngiv og vælger dernæst fanebladet kommandoer - vælg kontrolelementer - vælg kommandoknap - tildel makro.
Tilbage til fanebladet værktøjslinier og vedhæft værktøjslinie.
Problemt er nok, at brugerne har flere regneark åbne, som benytter samme værktøjslinie.
mhv.
Hubertus
Avatar billede gider_ikke_mere Nybegynder
07. september 2006 - 11:28 #6
Du skal enten oprette værktøjslinien i hvert regneark hvor den skal bruges via VBA, og i den kode checke om den allerede eksisterer, eller oprette den i et regneark, gemme som .xla fil, og tilføje den i menuen tilføjelsesprogrammer. I sidste tilfælde skal .xla filen så kopieres til hver computer hvor du skal bruge den.

Uanset hvordan du laver den, skal du i koden checke om den allerede eksisterer. Du kan også kreere den under personlig projektmappe (person.xls), men det kræver igen at det gøres på hver computer.

Om der er andre metoder, ved jeg ikke.
Avatar billede hubertus Seniormester
07. september 2006 - 13:02 #7
Kan du hjælpe med VBA koden? da det er forskellige bruger der anvender regnearket.
Avatar billede gider_ikke_mere Nybegynder
07. september 2006 - 15:27 #8
Sub TilfoejCommandbar()

Dim mnu As CommandBar
    For Each mnu In Application.CommandBars
        If mnu.Name = "Container" Then Exit Sub
    Next
Set myBar = CommandBars _
    .Add(Name:="Container", Position:=msoBarTop, _
    Temporary:=True)
myBar.Visible = True

Set NewKnap = myBar.Controls _
    .Add(Type:=msoControlButton, ID:=1851)
With NewKnap
    .Caption = "Jeg giver værdien på celle A1"
    .OnAction = "MinMakro1"
End With

Set NewKnap = myBar.Controls _
    .Add(Type:=msoControlButton, ID:=1851)
With NewKnap
    .Caption = "Jeg giver værdien på celle A2"
    .OnAction = "MinMakro2"
End With
End Sub

Sub MinMakro1()
MsgBox "Range A1.value er: " & Range("A1").Value
End Sub

Sub MinMakro2()
MsgBox "Range A2.value er: " & Range("A2").Value
End Sub
Avatar billede gider_ikke_mere Nybegynder
07. september 2006 - 19:37 #9
Koden kan du køre ved WorkBook_Open i hvert ark. Du kunne også slette den først i koden, hvis der senere skulle dukke ark op med ændrede knapper på. Ønsker du en af de andre løsninger må du lige sige til.
Avatar billede hubertus Seniormester
08. september 2006 - 15:00 #10
Jeg har afprøvet koden, men ved afviklingen stopper den i linien
Set myBar = CommandBars.Add(Name:="Container", Position:=msoBarTop,Temporary:=True)

Er der en fejl i koden?
mvh.Hubertus
Avatar billede hubertus Seniormester
08. september 2006 - 15:06 #11
Fejlen opstår kun hvis jeg sætter den i workBook_open ikke hvis den placeres i et modul.
Avatar billede hubertus Seniormester
08. september 2006 - 15:40 #12
Hvilke muligheder er der for at knytte en tekst til knappen på værktøjslinien?
Avatar billede gider_ikke_mere Nybegynder
08. september 2006 - 16:21 #13
Der er tekst på. Den skal bare vises. Finder lige ud af det. (se .Caption = "Jeg giver værdien på celle A2" i koden ovenfor) Ved ikke hvorfor det ikke virker i ThisWorkbook.
Avatar billede gider_ikke_mere Nybegynder
08. september 2006 - 16:41 #14
Style  Specifies whether the button face displays its icon or its caption. Can be one of the following MsoButtonStyle constants: msoButtonAutomatic, msoButtonIcon, msoButtonCaption, msoButtonIconAndCaption, msoButtonIconAndCaptionBelow, msoButtonIconAndWrapCaption, msoButtonIconAndWrapCaptionBelow, or msoButtonWrapCaption.

Mange muligheder!

With NewKnap
    .Caption = "Jeg giver værdien på celle A1"
    .OnAction = "MinMakro1"
    .Style = msoButtonIconAndCaption
End With

viser knap og tekst
Avatar billede gider_ikke_mere Nybegynder
08. september 2006 - 16:54 #15
Når du har din commandbar klar, kan du gøre følgende:

1. Gem koden i alle ark I anvender. Ulempe: brugeren skal godkende makroen hver gang.
2. Exporter til .xla fil. Filen skal gemmes i mappen AddIns, som Excel foreslår. Du skal derefter på alle computere og kopiere filen der. Derudover skal du i tilføjelsesprogrammer, under "Funktioner", vælge gennemse og tilføje din .xla-fil.
Fordele: Ingen makroalarm ved opstart. Ulempe: Besværligheden ved at skulle på alle maskiner.

OBS: Ved sidste metode, SKAL du gemme arket i original form som .XLS fil. Skal der rettes på værktøjslinien, åbnes .XLS arket, rettelser laves, filen eksporteres som .xla fil, og kopieres til mappen AddIns på alle maskiner.
Avatar billede hubertus Seniormester
11. september 2006 - 16:11 #16
i din kommentar d. 8/9 - giver du en kode som skulle give en knap med tekst. Mangler du ikke at angive hvilken ikon der skal anvendes. Jeg ved godt at den kan angives med en set linie, men kan den angives inde i with koden?

mvh.
Hubertus
Avatar billede gider_ikke_mere Nybegynder
11. september 2006 - 16:51 #17
Det vsr et eksempel på hvordan du sætter style på en knap eller andet.

Du skal stadig skrive

Set NewKnap = myBar.Controls _
    .Add(Type:=msoControlButton, ID:=1851)
With NewKnap
    .Caption = "Jeg giver værdien på celle A2"
    .OnAction = "MinMakro2"
End With

Du kan godt omskrive koden, men den bliver bare længere af det. ID koden skal dog stå i Set-kommandoen.

Hvilket ikon ID-nummeret giver, kan du prøve at se med koden herunder. Ved at holde musen over ikonet, kan du se hvilket ID-nummer du skal bruge.

Koden kører kun fra 1-2000. Der er over 10.000 ID numre, men de indeholder ikke alle et ikon! Derfor koden "on error resume next"


Dim mnu As CommandBar
    For Each mnu In Application.CommandBars
        If mnu.Name = "ikoner" Then Exit Sub
    Next
Set myBar = CommandBars _
    .Add(Name:="ikoner", _
    Temporary:=True)
myBar.Visible = True

For Z = 1 To 2000
    On Error Resume Next
    Set NewKnap = myBar.Controls _
        .Add(Type:=msoControlButton, ID:=Z)
    With NewKnap
        .Caption = Z
        .OnAction = "MinMakro1"
    End With
Next

End Sub

Jeg havde engang et lille program som lavede en bladremenu med alle ikonerne. Har den ikke mere. Du må selv rette til for at se resten.
Avatar billede gider_ikke_mere Nybegynder
11. september 2006 - 16:52 #18
Hov...

Sub TilfoejCommandbar()

Dim mnu As CommandBar
    For Each mnu In Application.CommandBars
        If mnu.Name = "ikoner" Then Exit Sub
    Next
Set myBar = CommandBars _
    .Add(Name:="ikoner", _
    Temporary:=True)
myBar.Visible = True

For Z = 1 To 2000
    On Error Resume Next
    Set NewKnap = myBar.Controls _
        .Add(Type:=msoControlButton, ID:=Z)
    With NewKnap
        .Caption = Z
        .OnAction = "MinMakro1"
    End With
Next

End Sub
Avatar billede hubertus Seniormester
13. september 2006 - 15:21 #19
Problemet er løst - tak for hjælpen og god inspiration mht. mulighederne i style - dem vil jeg arbejde videre med.
Lægger du et svar, så du kan få dine point.
mvh.
Hubertus
Avatar billede gider_ikke_mere Nybegynder
13. september 2006 - 15:36 #20
Velbekomme :-)
Avatar billede hubertus Seniormester
18. september 2006 - 16:46 #21
Hej igen
Jeg har lige et uddybende spørgsmål:

I din kommentar fra d. 5/9 viste du følgende kode:

For Each wb In Workbooks()
    I = I + 1
Next
If I < 2 Then
  Application.CommandBars("Container").Visible = False
  Application.CommandBars("Container").Delete
End If

gælder den for flere sheets i en workbook, eller gælder det når man har flere regneark åbne?
mvh. Hubertus
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 17:51 #22
Workbooks er hvor mange Excel-ark du har åbnet.
Avatar billede hubertus Seniormester
18. september 2006 - 19:17 #23
Hvis jeg forstår det rigtigt, så er det flere af hinanden uafhængig regneark. Er det korrekt?
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 19:26 #24
Korrekt. Egentlig hedder det et regneark, og fanerne, dem der her ark1 o.s.v. hedder faneblade!!! De burde hedde Fane1, Fane2 o.s.v.

Bemærk: Der KAN være ganske specielle tilfælde, hvor 2, uafhængigt åbnede regneark ikke kan se hinanden. Det sker i nogle tilfælde hvor arket er åbnet fra en ekstern kilde.
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