Avatar billede garne Nybegynder
17. oktober 2004 - 03:12 Der er 7 kommentarer

Genkendelse af kode når skabelon bliver til dokument

Kære eksperter.

Jeg har fået til opgave at tilrette en word-template således at når man dobbeltklikker et bestemt sted i dokumentet, vil der komme en dialogboks frem og bede om placering af et billede der skal indsættes samme sted i dokumentet.

Jeg har muligvis ikke valgt den mest elegante løsning, men det fungerer således:

I skabelonen har jeg indsat en commandbutton (der ikke er bundet til nogen form) som ved dobbeltklik udfører den nødvendige kode. Dvs den sletter den commandbutton der lige er klikket på og erstatter den med et billede (man behøver kun at kunne gøre det én gang, så det er ikke noget problem at knappen slettes).

Det fungerer fint så længe jeg redigerer skabelonen, men i det øjeblik skabelonen bliver til dokument leder word efter "commandbutton1_dblclick()" i koden til det nye dokument i stedet for koden til skabelonen.

Er der en måde at bevare knappens tilknytnig til den oprindelige kode eller en måde at overføre template-koden til det nyoprettede dokument?

Håber spørgsmålet er nogenlunde forståeligt. På forhånd tak.
Avatar billede supertekst Ekspert
19. oktober 2004 - 09:30 #1
Hej garne

Har prøvet at fremstille en skabelon m/en knap, der blot indsættes et bestemt billede - hvorefter knappen slettes - uden problemer.

Kan problemet være at din control, når du skal slette den - navngives forkert?

Koden ser således ud - i "ThisDocument":

Private Sub CommandButton2_Click()
    ChangeFileOpenDirectory "D:\"
    Selection.InlineShapes.AddPicture FileName:="D:\3kant.bmp", LinkToFile:= _
        False, SaveWithDocument:=True
       
    sletknappen
End Sub
Private Sub sletknappen()
Dim f
    For f = 1 To ActiveDocument.Shapes.Count
        x = ActiveDocument.Shapes(f).Name
        If ActiveDocument.Shapes(f).Name = "Control 2" Then
            ActiveDocument.Shapes(f).Delete
            Exit Sub
        End If
    Next f
End Sub

MVH
Avatar billede garne Nybegynder
20. oktober 2004 - 12:41 #2
Hej Supertekst

Jeg tror ikke problemet er navngivningen. Min første handling er at åbne en dialogbox og det burde den jo altid gøre (og derefter sletter jeg knappen uden at referere til den - når man trykker på den er markeringen automatisk det rigtige sted).
Problemet er mere at koden står under "ThisDocument" under "Templateproject", men så snart skabelonen bliver til dokument, leder Word efter koden under "ThisDocument" under "Project (Document 1)" hvor der af gode grunde er tomt eftersom dokumentet er helt nyt.
Derfor virker det også fint når jeg redigerer skabelonen, men så snart jeg laver et nyt dokument baseret på skabelonen sker der ingenting når jeg trykker på knappen.

Min kode ser ivørigt således ud:

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog( _
FileDialogType:=msoFileDialogFilePicker)
With dlgOpen
    .Title = "Vælg billlede der skal indsættes"
    .Filters.Clear
    .AllowMultiSelect = False
       
    If .Show <> -1 Then GoTo ud:
End With

picname = dlgOpen.SelectedItems(1)
Selection.Delete Unit:=wdCharacter, Count:=1

Selection.InlineShapes.AddPicture FileName:= _
        picname, LinkToFile:=False, SaveWithDocument:=True

ud:
End Sub
Avatar billede supertekst Ekspert
20. oktober 2004 - 14:31 #3
Hej igen

Hvordan er knappen defineret?

I min mini-version er det fra værktøjslinien "Kontrolelementer" - og det virker som sagt. Hvis du har
Avatar billede supertekst Ekspert
20. oktober 2004 - 14:36 #4
Det sidste blev afsendt lidt for hurtigt - fortsættelse:

Hvis du har defineret knappen anderledes var det måske værd at prøve en fra Kontrolelementer.

Hvorfor dobbeltklikke på knappen? Sikkerhedsmæssigt?

Har du en reference i dokument-projektet til skabelonen - i vinduet til venstre?

MVH
Avatar billede garne Nybegynder
21. oktober 2004 - 02:20 #5
Hej igen

For at svare på det sidste spørgsmål først:
1) Ja, jeg har en reference fra "Project (dokcument1)" til skabelonen ("template project").

2) Dobbeltklikket er blot fordi opgaven var formuleret sådan - enketklik kunne for min skyld være lige godt. Jeg tror bare ikke det ville ændre på problemet.

3) Jeg har blot oprettet knappen ved at ved trykke på commandbutton i kontrolelemnt-menuen og derefter skrevt koden i VBA-editoren under CommandButton1_DblClick i "thisdocument" under template-projektet (min egen sprogforvirring er vist total efterhånden)

4) Hvis det virker hos dig, må jeg så spørge om det virker "hele tiden". Forstået på denne måde: Hvis du skifter frem og tilbage mellem design-mode i VBA-menuen inden du trykker på knappen, virker den så stadig?
Jeg har nemlig oplevet at første gang jeg åbner dokumnetet kan den godt køre - men hvis jeg først har skiftet frem og tilbage mellem VBA-design-mode og normal-tilstand kan den ikke længere finde koden det rigtige sted.
Det lyder selvfølgelig også som en underlig ting at gøre, problemet er bare at kundens Word starter op i VBA-designmode og at han derfor er tvunget til at skulle skifte tilstand inden han kan trykke på knappen - og så er det den ikke virker.
Avatar billede supertekst Ekspert
21. oktober 2004 - 08:56 #6
Hej

Tak for din redegørelse.

Hvis jeg trykker Alt+F11 efter at dokumentet er opbygget på basis af skabelonen og Alt+F11 igen - så virker det stadig.

Kan der ligge "noget" i Normal.dot, der forstyrrer?

Har du prøvet min kode, hvis du indsætter et billednavn i stedet for mit?

MVH
PS: Jeg anvender office97
Avatar billede garne Nybegynder
21. oktober 2004 - 15:30 #7
Hej Super

Jeg har nu prøvet din kode og det virker fint (i en ny skabelon), hvilket jeg både forstår og virkelig ikke forstår - men positivt er det da alligevel.
Jeg kan bare ikke grundliggende se nogen forskel på din og min måde at gøre det på.

Det kan muligvis have noget at gøre med den skabelon jeg sætter knappen i (det er ikke én jeg selv har lavet, men den kan måske indeholde noget suspekt jeg ikke har lagt mærke til). Jeg arbejde i øvrigt 2003-udgave.

Er du iøvrigt sikker på at din kode overhovedet sletter nogen knap. Det virker nemlig selvom jeg udkommenterer "sletknappen", hvilket min egen kode også gør selvom jeg ikke aktivt sletter knappen.
"Selection.InlineShapes.AddPicture" erstatter vist bare knappen...

Jeg har siddet og prøvet lidt frem og tilbage mens jeg skrev det her og det bliver mere og mere mystisk. Umiddelbart kan jeg godt få både din og min egen kode til at virke i den skabelon det skal indsættes i, men hvis man et tilstrækkeligt antal gange har været inde i editoren og skiftet frem og tilbage mellem designtilstand og normal virker knappen pludselig ikke. Jeg har ikke helt gennemskuet hvad det er der trigger den til ikke at virke, men har på fornemmelsen at hvis programmet først har "opdaget" at der også kan skrives til selve dokumentet (og ikke kun skabelonen) vil den herefter forsøge at finde koden til knappen under dokument-projektet i stedet for under skabelon-projektet.

Tak for din foreløbige hjælp.
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