Avatar billede hnteknik Novice
04. september 2008 - 10:39 Der er 11 kommentarer og
1 løsning

Mystik omkring oprettelse af en commandbar button

Til brug for at en hurtig indsættelse af fotos i en word rapport har jeg flikket det her sammen fra nettet og placeret det i NORMAL.DOT:

Sub setup_button()
'checker lige at den ikke er oprettet i forvejen ;-)
For Each c In CommandBars
  If c.Name = "IndsætFoto" Then
      c.Visible = True
      Exit Sub
  End If
Next

'Opretter toolbaren
Application.CommandBars.Add(Name:="IndsætFoto").Visible = True
'Opretter knappen
Set myButton = Application.CommandBars("IndsætFoto").Controls _
  .Add(Type:=msoControlButton)
  With myButton
    .FaceId = 280
    .Caption = "Indsæt Foto"
    .OnAction = "InsPic"
  End With
End Sub

Sub InsPic()
Application.Dialogs(wdDialogInsertPicture).Show
End Sub

Problemet er,
når jeg åbner et nyt dokument kan commandbaren godt være der den første gang med icon. Næste gang er commandbaren tom ( intet icon og no action). Selvom jeg sletter baren kan den godt dukke op igen  - altså to "IndsætFoto" tomme ved siden af hinanden.

Det pudsige er, at i starten hed den "Menubar" i stedet for "IndsætFoto". En sådan dukker igen og igen selvom jeg har slettet den og de to "IndsætFoto".

1) Hvorfor forsvinder min action og icon
2) Hvorfor dukker "menubar" op selvom den er slettet og der ikke ligger kode synligt med ordet "menubar" i ???
Avatar billede Lene Fredborg Ekspert
04. september 2008 - 11:22 #1
Når du opretter commandbars mm., bliver de gemt i den aktuelle CustomizationContext, og hvis du ikke selv sørger for at sætte den, kan det være hvad som helst af tilgængelige dokumenter og skabeloner - det afhænger at, hvad du ellers har foretaget dig.

I forbindelse med sletning og oprettelse af commandbars og controls i commandbars er det derfor meget vigtigt, at du først fortæller Word via din kode, hvor ændringerne skal laves. Det gør du ved at sætte CustomizationContext. Eksempel:

Hvis ændringerne skal laves i Normal.dot, så indsæt denne line _før_ den kode, der ændrer noget:

CustomizationContext = NormalTemplate

Du kan læse mere om CustomizationContext i hjælpen i VBA.

Hvis du pga. manglende styring af CustomizationContext har fået oprettet commandbar og control i tilfældige dokumenter, vil de dukke op deri, indtil du sletter dem.
Avatar billede hnteknik Novice
04. september 2008 - 12:31 #2
Du har nok et point der, men jeg får stadig 2 + 1 blanke iconer (dvs en af dem havde første gang en blank actionknap), selvom jeg sletter dem igen og igen. De dukker op i det blanke dokument, når WORD åbnes, så det må stamme fra normat.dot.

Hvordan kommer jeg tilbage til normal !! tilstand og får lagt knappen ind rigtig.
Avatar billede hnteknik Novice
04. september 2008 - 12:51 #3
Jeg har kørt denne her (fra et andet spg her) for de 2+1 menubarer, men de dukker op igen ved genstart af WORD:

Const BAR_NAME = "MenuBar"
Do While True
On Error GoTo errorHandler
Application.OrganizerDelete NormalTemplate, BAR_NAME, wdOrganizerObjectCommandBars
Loop
errorHandler:
On Error Resume Next
Avatar billede Lene Fredborg Ekspert
04. september 2008 - 13:16 #4
Er dine commandbars væk, når du har kørt ovenstående makro? (Det lyder det til, at de er). Når de dukker op igen, tyder det på, at ændringerne ikke er blevet gemt.

Sørg for at gemme Normal.dot, lige efter, at du har kørt ovenstående. Du har ikke skrevet noget om Word-version. Hvis det er Word 2003 eller tidligere:
1. Hold Skift nede og vælge Filer > Gem alt (File > Savle All).
2. Svar ja, hvis du bliver spurgt, om du vil gemme ændringer til Normal.dot.
Avatar billede hnteknik Novice
04. september 2008 - 17:46 #5
Hej Lene
Ja det er 2003. Noget tyder på, at det ikke er gemt. Jeg må prøve i morgen.
Avatar billede hnteknik Novice
08. september 2008 - 15:14 #6
Hej Lene - haft lynende travlt.
Det ser ud til at virke nu.
Sjovt nok starter den nu hver gang i Office11 mappen og husker ikke mappen fra gang til gang som den gjorde før.
Tak for hjælpen - smid et svar.

Henrik
Avatar billede Lene Fredborg Ekspert
08. september 2008 - 15:46 #7
Godt det lykkedes. Her er et svar.
Avatar billede hnteknik Novice
02. oktober 2008 - 11:09 #8
Hej Lene
Det virker fint, men efter at være gemt i normal.dot starter den hver gang i Office11 mappen og ikke mappen, hvor den hentede det sidste billede. Denhar tilsyneladende glemt alt om hvor den sidst var. Har du et bud på det ??

Henrik
Avatar billede hnteknik Novice
02. oktober 2008 - 11:26 #9
Ok - jeg kan sætte default folder for fotos under
tools -> options -> File Locations
Men jeg vil gerne have den til at huske, hvor den var sidst.
Avatar billede Lene Fredborg Ekspert
02. oktober 2008 - 13:18 #10
Du kan ændre:

Sub InsPic()
Application.Dialogs(wdDialogInsertPicture).Show
End Sub

til følgende (hvor jeg har skrevet kommentarer i koden - ret "C:\" til den ønskede sti:

Sub InsPic()
Dim strOldPath As String

'Save current default picture path
strOldPath = Options.DefaultFilePath(wdPicturesPath)
'Change path
Options.DefaultFilePath(wdPicturesPath) = "C:\"

'Open dialog box
Application.Dialogs(wdDialogInsertPicture).Show

'Reset picture path
Options.DefaultFilePath(wdPicturesPath) = strOldPathEnd Sub
Avatar billede hnteknik Novice
02. oktober 2008 - 13:27 #11
Løsning:
Global strFotoSti As String
Sub InsPic()
If Len(strFotoSti) > 0 Then
        Options.DefaultFilePath(Path:=wdPicturesPath) = strFotoSti
End If
Application.Dialogs(wdDialogInsertPicture).Show
strFotoSti = Options.DefaultFilePath(Path:=wdPicturesPath)
End Sub
Avatar billede hnteknik Novice
02. oktober 2008 - 13:29 #12
Hej Lene
Ups - jeg så ikke, at du havde svaret. Denne her ser ud til at virke.

Tak for svaret.

Henrik
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
Tag et kursus i Word og øg effektiviteten

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