Avatar billede lsskaarup Nybegynder
04. november 2004 - 11:07 Der er 16 kommentarer og
1 løsning

Formular og makro (autoudfyldelse)

Jeg har ved at lave en formular, hvor jeg gerne vil have hjælp til 2 ting.

1. Når feltet "tekst1", udfyldes bliver indholdet kopieret til feltet "tekst11".

2. Jeg har lavet en rullelist (Rulleliste1) over forskellige medarbejdere, men vil gerne have, at når der vælges én medarbejder, så kommer vedkommendes telefonnr. med ind i et andet felt (Tekst10).

Hvordan gøres det smartest, jeg tænker på noget med makro, med ved ikke hvordan det skal gøres.

Kunne man eventuelt, til punkt 1, bruge et fill-in felt, så dialogboksen kommer hver gang dokumentet åbnes, og så oplysningerne blive lagt i begge felter. Jeg ved dog ikke helt om det er smart i bruge på denne måde, det kan jeg jo kun finde ud af ved at prøve det  ;-)

Please help
Avatar billede lsskaarup Nybegynder
04. november 2004 - 13:21 #1
Ingen som kan hjælpe?
Avatar billede supertekst Ekspert
05. november 2004 - 08:56 #2
Når du tale om en formular - er det via værktøjslinien "Formularer"? - du omtaler også en dialogboks - er det en VBA userform?

En Userform kan automatisk blive vist, når dokumentet åbnes!

Hvor er telefonnr lagret?

Hvor mange medarbejdere er der tale om?

MVH
Avatar billede supertekst Ekspert
05. november 2004 - 10:26 #3
Hvis vi tager udgangspunkt i anvendelsen af værktøjslinien "Formularer" - så går jeg ud fra, at telefonnr er oprettet i en anden liste - i samme rækkefølge som medarbejdsnavnene.

Kopier nedenstående kode til udklipsholder...

Makro: Opret en makro i dit dokument (ALT+F8) - vælg i feltet "Makroer i:" - dit dokument. Navngiv makroen til XXX - Opret.
I udviklingsværktøjet ses nu den oprettede makro. Marker alt og slet indholdet - indsæt fra udklipsholder nedenstående kode:

Sub kopierIndhold()
    ActiveDocument.FormFields("tekst11").Result = ActiveDocument.FormFields("tekst1").Result
End Sub
Sub findTlfnr()
Dim ix
    ix = ActiveDocument.FormFields("rulleliste1").DropDown.Value
    ActiveDocument.FormFields("tekst3").Result = ActiveDocument.FormFields("rulleliste2").DropDown.ListEntries(ix).Name
End Sub

Du skal selv tilrette navne på "Bogmærkerne" - så de passer til dine - altså  "Rulleliste2" til din for telefonnr.

Gem koden og luk VisualBasic-vinduet.

I dit dokument:
I egenskaber for "tekst1" - Udfør makro ved udgang: vælg KopierIndhold - luk

I egenskaber for "Rulleliste m/medarbejdernavne" - udfør makro ved udgang: vælg FindTlfnr - Luk

Lås og prøv.

MVH
Avatar billede lsskaarup Nybegynder
05. november 2004 - 13:30 #4
Okay, kigger på det.

Jeg har endnu ikke oprettet tlf. nr., for jeg tænkte at det så kunne blive gjort på den rigtige og letteste måde, hvis du/I kunne forslår hvordan det skulle gøres.

Og ja der er tale om formular-værktøjslinien, og fill-in feltet ligger under Indsæt -> Felt -> Brevfletning -> Fill in, men denne kan jeg bare ikke få til at komme hver gang dokumentet åbnes, desværre, det kunne have været godt.

Makroer, er det nogle som kører automatisk, eller skal der tilføjes f.eks. en genvejstast?
Avatar billede supertekst Ekspert
05. november 2004 - 13:35 #5
I dette tilfælde kører det i sammenhænge med de felter i formularen, hvor egenskaben udfyldes med et makronavn - enten ved ind- eller udgang.

Makroer kan køre automatisk - enten når et document åbnes, lukkes eller oprettes og i mange andre forbindelser.

I de formular skal du oprette endnu en rulleliste til telefonnr., således at de oprettes i samme rækkefølge som medarbejderne.

MVH
Avatar billede lsskaarup Nybegynder
05. november 2004 - 15:12 #6
Okay, kopierIndhold fungere godt nok, men findTlfnr synes jeg ikke helt om. Sådan som jeg har forstået det, skulle jeg lave en rulleliste, hvor tlf. nr. står i og i samme rækkefølge som medarbejderne. Men det giver jo 2 rullelister og et tekstfelt, og jeg vil kun have én rulleliste og et tekstfelt som er synligt, kan jeg skjule rulleliste2 på en eller anden måde.

Jeg sidder og overvejer om jeg skulle have oplysningerne om medarbejderne i en simpel access-db, men der skal også tages højde for at brugeren af dokumentet slet ikke har nogle ide om, hverken at rette i formulare eller at rette i en db.
Avatar billede supertekst Ekspert
05. november 2004 - 15:26 #7
Inden du låser - så marker rullelisten m/telefonnr.

Menulinien : Formater/Skifttype/Skjul-checkboksen sæt flueben! - så er den usynlig.

-

At lægge det i en database - ja det villle være en god ide - og det behøver ikke at være et problem for brugeren - for det hele kan styres og ajourføres fra en Userform (VBA Dialogboks) i word-dokumentet - jeg har for mine kunder - konstrueret mange systemet - netop efter denne filosofi... altså det hele styres fra Word - det kender brugerne!!

MVH
Avatar billede lsskaarup Nybegynder
05. november 2004 - 17:32 #8
Okay, selvfølgelig burde jeg havde tænkt på at skjule den sådanne. Så mangler jeg kun at få alle felter til at blive opdateret ved åbning, for det driller lidt.

Skal det ikke bare være:

Private Sub Document_Open()
    ActiveDocument.Fields.Update
End Sub
Avatar billede supertekst Ekspert
05. november 2004 - 17:41 #9
Du skriver at felterne skal være opdateret - undskyld med hvad?

Tekstfelter får jo først "indhold" når du indtaster i dem - med mindre de har en "default-værdi" - eller får tilskrevet en værdi via en makro. Rullelisterne har jo fået en defineret værdi - værdierne skulle kunne ses, når du har låst formularen.

Eller har jeg misforstået noget?

MVH
Avatar billede lsskaarup Nybegynder
05. november 2004 - 17:51 #10
Det er fordi, jeg har et slutflet. Du ved "venlig hilsen" og så af brugeren, men den bliver ikke opdateret automatisk, mærkeligt nok. Nu har jeg prøvet at sætte kodestumpen ind, med den bliver kun afviklet hvis jeg laver den public og aktivt vælger at køre den. Den skulle gerne hente brugerens navn.
Avatar billede lsskaarup Nybegynder
05. november 2004 - 17:55 #11
slutflet = slutfelt ;-)
Avatar billede supertekst Ekspert
05. november 2004 - 17:58 #12
Er der kun een bruger og dennes navn skal stå sidst i dokumentet -
enten skal du give dette felt en standardværdi under egenskaber.

eller skrive

Med venlig hilsen
Brugernavn

på helt normal Word-maner - hvorfor have dette som et felt?
Avatar billede lsskaarup Nybegynder
05. november 2004 - 19:29 #13
Fordi der er flere som skal kunne åbne det og udskrive det, så kan både kunden og firmaet selv også se hvem der havde afsvaret for brevet.
Avatar billede lsskaarup Nybegynder
05. november 2004 - 19:32 #14
Og det er ikke et formularfelt, men indsat via Indsæt -> Felt -> Brugeroplysninger -> UserName
Avatar billede lsskaarup Nybegynder
08. november 2004 - 10:06 #15
supertekst -> Du har ikke nogen løsning til problemet med autoopdatering af brugernavnet? Det driller jeg sgu lidt
Avatar billede lsskaarup Nybegynder
08. november 2004 - 10:09 #16
Ahh, jeg har selv fundet ud af det nu. Den skulle selvfølgelig bare hedde

Private Sub Document_Open()
    ActiveDocument.FormFields("UserName").Update
End Sub

Lægger du et svar, så du kan få dine point?
Avatar billede supertekst Ekspert
08. november 2004 - 10:41 #17
OK - tak for kampen

MVH
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



IT-JOB