14. februar 2008 - 09:15Der er
55 kommentarer og 1 løsning
Indsæt billeder i sidehoved vha, makro
Hej
Det er måske lidt indviklet dette spørgsmål, men jeg prøver alligevel... Jeg skal have lavet en makro i word, som henter et billede og sætter det ind i sidehovedet men ikke på side 1, for der skal der være et andet billede. Samtidig skal det sættes et billede ind i sidefoden på side 1. Billederne skal have bestemte størrelser og placering. kan dette lade sig gøre?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
På første side er det specielt. Der skal være et billede i sidehovedet og et i sidefoden. Ellers på alle de andre sider, skal der være det samme billede i sidehovedet. Det må gerne kunne være sådan at brugeren selv skal kunne vælge om vedkommende vil - på første side, have det billede med, som skal være i sidefoden - giver det mening
Det er et bestemt billede til sidehovedet på side 1 - et bestemt billede til sidefoden på side 1 og 1 bestemt billede til alle de andre siders sidehoveder. I alt 3 billeder, hvis jeg forstår dig ret. Det er word 2003 - er der forskel på makroer i 2003 og 2007 da?
Njaeh, det er ikke så meget forskellen på makroerne, men forskellen i autotekster/building blocks, der er interessant i dette tilfælde.
Jeg vil anbefale dig at indsætte og placere de billeder, som du har behov for, på de rigtige steder i sidehoved/sidefod. Derefter skal du gemme dem som autotekster i skabelonen. Sæt også skabelonen op til at være forskellig 1. side, hvis du ikke allerede har gjort det.
Derefter laver du følgende kode (ret navnene på autoteksterne til, så de passer med det, du har kaldt dem):
Public Sub IndsætBilleder() Dim objHeader As Range Dim objFooter1 As Range Dim objHeader1 As Range
With ActiveDocument.Sections(1) Set objHeader1 = .Headers(wdHeaderFooterFirstPage).Range Set objHeader = .Headers(wdHeaderFooterPrimary).Range Set objFooter1 = .Footers(wdHeaderFooterFirstPage).Range End With
With ActiveDocument.AttachedTemplate .AutoTextEntries("BilledeSide1Hoved").Insert where:=objHeader1 .AutoTextEntries("BilledeHoved").Insert where:=objHeader If MsgBox("Ønsker du at medtage billede i sidefoden?", vbQuestion + vbYesNo, "Billede i sidefod") = vbYes Then .AutoTextEntries("BilledeSide1Fod").Insert where:=objFooter1 End If End With End Sub ********** Obs! Vær opmærksom på, at ovenstående medfører, at evt. andre ting i header/footer fjernes. Hvis du har andre objekter i header/footer, skal du collapse ranget, inden autoteksterne indsættes.
jeg prøver lige dit forslag, men er desværre ikke hjemme i weekenden, men jeg skriver lige når jeg har afprøvet - det med skabelonen havde jeg ikke overvejet, men det er smart...:)
En autotekst er typisk en standardtekst el.lign., som man gerne vil bruge flere steder. Man behøver så kun at lave den én gang, gemme den og så kan man indsætte den andre steder.
Markér det, der skal gemmes (f.eks. et billede placeret det rigtige sted i sidehovedet). Vælg Rediger, Autotekst, Autotekst, skriv et navn til din autotekst, sørg for at vælge den rigtige skabelon i "bunden af dialogen". Klik på Tilføj.
Nu kører koden, men jeg kan ikke se at den virker...det er nok mig som er lidt amatør, men skulle jeg ikke kunne se "makroen" under makroer, for at kunne bruge denne kode i et vilkårligt dokument?
Hvad mener du med, at koden kører? Hvis du ikke kan se den under makroer, hvordan starter du den så? (den kan selvfølgelig startes fra kodevinduet, men det er vel ikke der, du starter den eller hvad?)
Har du placeret makroen i en skabelon og derefter lavet et nyt dokument på baggrund af den skabelon?
Jeg har placeret makroen i en skabelon. Men jeg ahr aldrig prøvet at lave et dokument på baggrund af en skabelon. det kan godt virke i et dokument der allerede er opretttet ikke?
Det kan godt være at jeg misforstår, men har aldrig prøvet det med skabeloner før..
Alle Word-dokumenter er baseret på en skabelon; men du vil så typisk have oprettet dine dokumenter på baggrund af Normal.dot (hvis du ikke selv vælger en skabelon, bruges Normal.dot).
Hvis du har et eksisterende dokument, som nu skal bruge kode, som er placeret i en anden skabelon end den, dokumentet er oprettet på baggrund af, skal du koble den nye skabelon på dit dokument, førend du kan bruge autoteksterne og koden i skabelonen.
Funktioner - Skabeloner og tilføjelsesprogrammer. Klik på vedhæft. Find din nye skabelon og klik OK.
Nu har jeg vedhæftet skabelonen og åbnet et nyt dokument, derefter har jeg fundet makroen, og prøvet at køre den, men nu kommer den med en fejl "Run-time error". hvad kan det skyldes?
Jeg har tilføjet skabelonen, så der burde da ikke være noget problem?
Har du lavet autoteksterne? Og enten rettet i koden eller navngivet autoteksterne på samme måde som i koden?
Ellers må du fortælle mig hvilken linje der forårsager fejlen. Det gør du ved at steppe koden igennem linje for linje (gå ind i koden, start den ved at trykke på F8, brug F8 for hver linje), indtil fejlen opstår.
Nu har jeg fået det til at virke, men den sætter kun det billede ind, som jeg havde på side 2 og det er også den forkerte sideopsætning, som jeg angav i skabelonen.
Skal jeg, hver gang jeg går ind i word vedhæfte skabelonen?
Den sideopsætning, som du har i skabelonen, vil kun gælde for nye dokumenter. Sideopsætningen bliver ikke ændret i eksisterende dokumenter.
Nej, du skal ikke vedhæfte skabelonen i hvert dokument. Det sker automatisk, når du danner nye dokumenter baseret på din skabelon.
Hvis du har "gamle" dokumenter, hvor du gerne vil have den nye sideopsætning, kan du lave et nyt dokument og derefter indsætte den gamle fil heri. På den måde får du den nye sideopsætning samt den rigtige skabelon vedhæftet.
Husk at sætte 1. side speciel - det er formentlig det, der er problemet, hvis du kun får "side 2-grafikken".
Den sletter den skabelon, som jeg har vedhæftet, hver gang jeg går ud af word og derefter ind igen. Skulle sideopsætningen fra skabelonen ikke følge med over i det nye dokument?
Den sætter rigigt nok billederne ind (perfekt!), men den nye sideopsætning følger ikke med.
hvis ikke jeg vil have den nye sideopsætning i et gammelt dokument, men bare vil have billederne i sidehovedet/foden erstattet med den nye skabelon, skal jeg så bare køre makroen?
Hvad mener du med, at den sletter skabelonen? Skabelonen ligger jo der, hvor du har gemt den. Og hvis du tænker på dine gamle dokumenter, så beholder de fint koblingen til den nye skabelon, hvis du gemmer filen.
Sideopsætningen ændres ikke i et eksisterende dokument, blot fordi man hæfter en anden skabelon (det ville også give uoverskuelige problemer i mange dokumenter) - se min kommentar af 21:40:05.
Du er nødt til at ændre sideopsætningen i de gamle dokumenter til at have speciel 1. side. Ellers eksisterer den specielle side jo ikke, og der kan derfor heller ikke sættes grafik ind på den specielle side. Men der er vel heller ikke noget problem i at ændre denne ene lille ting i sideopsætningen. Du er jo hverken i gang med at ændre margener, papirstørrelse eller andre "sjove" ting.
Nu har jeg prøvet nogle gange, men skabelonen forsvinder, så snart jeg lukker et dokument ned og på ny starter word.
problemet er så bare at sideopsætningen, heller ikke behøver at blive ændret, men det billede der kommer ind, kommer til at sidde "skævt" hvis du forstår hvad jeg mener? , som det er nu, kan jeg ikke se den ene side af det indsatte billede, da den pludselig ligger uden for dokument-grænsen. SÅ kan jeg selvfølgelig gå op og ændre det manuelt, men det skulle jeg jo helst ikke:)
Nu tager vi én ting ad gangen. Fortæl mig, hvad du mener med, at skabelonen forsvinder. Skabelonen er en fil, som ikke forsvinder, medmindre du sletter den.
Når Word åbner, er det tomme standard-dokument, som Word altid starter med, baseret på Normal.dot. Dvs. at når du skal lave et nyt dokument, baseret på en helt anden skabelon, så skal du enten dobbeltklikke på skabelonen eller du skal have gemt skabelonen et sted, hvor du kan bruge Filer-Ny og få vist skabelonen.
ok. Jeg har nok ikke helt styr på det endnu. Men det jeg mener er: Når jeg går ind og vedhæfter skabelonen, så bliver den rigtigt vedhæftet og når jeg så kører makroen, så kommer billederne ind.
Hvis jeg så går ud af dokumentet - helt ud af word, og lader som om jeg starter et helt nyt dokument op. Så skal jeg gå ind og vedhæfte skabelonen igen, da det kun er normal.dot, som er vedhæftet - kan det være rigtigt?
ok jeg forstår... det er jo ok. Problemet er så bare at når makroen indlæser skabelonen, så ligger billederne skævt i de gamle dokumenter. Kan det lade sig gøre at makroen, selv indlæser skabelonen, der skal bruges og erstatter det som der står i sidehovedet/foden i forvejen med det nye ?
Jeg prøvede det i et gammelt dokument med en tekst på sidehovedet på side 2, men der kom mit billede ikke ind (Kun på den specielle side 1, hvor der i forvejen ikke stod noget kørte fint). Du skrev noget om at collapse ranget i starten kan det have noget med det at gøre.
Den kode, som jeg har lavet, fjerner det, der står i sidehovedet/foden i forvejen.
Hvis dine billeder står forkert, når de bliver sat ind, er det, fordi de er oprettet forkert. Prøv at lave dine autotekster om og fokusér lidt på, hvordan de er placeret.
Makroen ligger jo i skabelonen, så du har ikke fat i den, førend skabelonen er vedhæftet. Og jo, man kan godt lave mange krumspring for at få Word til selv at koble skabelonen på, men det vil (for at sige det lige ud) være en for stor mundfuld for dig på nuværende tidspunkt.
Jeg har fundet ud af hvorfor billederne står skævt. Sideopsætningen i de gamle dokumenter er jo ikke den samme som i skabelonen...:)
Et sidste problem (håber jeg) er at hvis jeg i et gammelt dokument bruger skabelonen med makro. Sætter den kun billederne ind på den specielle første side. De andre sider forbliver uberørte.
Har du sektionsskift i de gamle dokumenter efter 1. side? For så er det derfor - koden indsætter kun i sektion 1.
Mht. sideopsætning, så er det muligt at placere grafik i forhold til papirkant i stedet for margen. Det vil gøre, at du kan få placeret grafikken f.eks. 13 cm inde på papiret, uanset margen.
jeg har sektionsskift, men dem kan jeg ikke slette, for så kommer dokumentet til at se anderledes ud... er der noget jeg kan gøre for at tvinge den til at indsætte?
Det ville være en super idé at placeren i forhold til papirkant
Ja, det kan det godt. Står de i hovedet eller foden? Og vær lige opmærksom på, at når sidetallene ikke må fjernes, så bliver der heller ikke fjernet andet i det specifikke hoved/fod.
Public Sub IndsætBilleder() Dim objHeader As Range Dim objFooter1 As Range Dim objHeader1 As Range Dim i As Integer
With ActiveDocument.Sections(1) Set objHeader1 = .Headers(wdHeaderFooterFirstPage).Range Set objFooter1 = .Footers(wdHeaderFooterFirstPage).Range
With ActiveDocument.AttachedTemplate .AutoTextEntries("BilledeSide1Hoved").Insert where:=objHeader1
If MsgBox("Ønsker du at medtage billede i sidefoden?", vbQuestion + vbYesNo, "Billede i sidefod") = vbYes Then .AutoTextEntries("BilledeSide1Fod").Insert where:=objFooter1 End If End With End With
For i = 1 To ActiveDocument.Sections.Count Set objHeader = .Headers(wdHeaderFooterPrimary).Range objHeader.Collapse wdCollapseStart ActiveDocument.AttachedTemplate.AutoTextEntries("BilledeHoved").Insert where:=objHeader Next i
Set objHeader = Nothing Set objHeader1 = Nothing Set objFooter1 = Nothing End Sub
Når billedet på sidehovedet, fra side og frem, bliver sat ind, kommer det ind i den forkerte side (højre, det skal sidde i venstre - har jeg selvfølgelig ikke fortalt før nu..sorry) og på samme sidehoved er der både en tekst, men også et sidetal. Den tekst der står, skal erstattes af billedet.
Det er jo dig, der bestemmer, hvor billedet skal være og ikke mig. Du bestemmer det via placeringen på billedet, når du gemmer det som autotekst.
Jeg kan ikke erstatte teksten og lade sidenummereringen stå. Du må vælge én af delene. Hvis du ønsker at få teksten erstattet, fjerner du den linje, hvor der står Collapse - og så må du indsætte sidenummereringen igen efter at makroen er kørt.
Jeg forstår det ikke, fordi i min skabelon står billederne rigtigt, men ikke når jeg bruger makroen. Har du en guide til hvor jeg ser placeringen af de autotekster, som jeg har gemt?
Hvis du nu har sat billederne i forhold til margen på et dokument, hvor venstre margen er 2 cm, og du efterfølgende sætter billederne ind i et dokument, hvor venstre margen er 4 cm - tjaeh, så står billedet altså et andet sted.
Sæt dit billede ind. Højreklik på billedet, vælg formater billede. Vælg et layout enten foran tekst eller bag tekst (jeg bruger som regel bag tekst). Herefter kan du nemlig sætte positionen fuldstændig for billedet. Du har flere muligheder (bl.a. afsnit/kolonne, margen, papirkant). Du skal bestemme positionen i forhold til papirkant. Gem derefter billedet som autotekst igen og overskriv derved den eksisterende autotekst.
Er det det som hedder Tegn/linje eller det som hedder side? Jeg har prøvet begge to, men den indsætter billederne forkert igen og når jeg så i det dokument hvor jeg bruger makroen kigger på layoutet kan jeg se at de ikke har det samme layout som det jeg gav dem i skabelonen.
Har du husket at gemme det i den rigtige skabelon? Hvis ikke du har gjort som i en af mine oprindelige kommentarer, har du nemlig blot gemt autoteksterne ned i Normal.dot og IKKE i din "kørende" skabelon.
Jeg ved ikke, hvad termerne er præcist i en dk-version, da jeg kører UK, så jeg har oversat ordene direkte fra den engelske version. Uanset hvad så skal du have sat dit billede ind i forhold til papirkant både fra venstre og fra top (horisontalt og vertikalt).
Mht. Excel, så er det jo ikke et tekstbehandlingsprogram og du har ikke de muligheder, som du har i Word. Du kan godt oprette en standardfil med ark med logo, men så er løbet vist også i det store hele overstået (i hvertfald med min Excel-viden). Men du kan jo prøve at smide spørgsmålet i Excel-kategorien og se, om der er en, der kan hjælpe.
Det behøver du nu ikke at udlove ekstra point for.
Men vær opmærksom på, at hvis du laver det som en global skabelon i stedet for, så skal du måske have lidt styr på speciel 1. side et andet sted (eller vil du have den både som en global skabelon og som en "normal" skabelon?).
Den skal nok være en global- og normal skabelon. Det er bare fordi at hvis det jo er en global skabelon så skal den kun tilføjes én gang og så ligger den i systemet.
Nu spørger jeg lige om en ting..... Kan det lade sig gøre at putte koden ind i Normal.dot så vi ikke taler om makrosikkerhed mv.
Der er nogle flere der skal bruge makroen og hvis det bare var sådan at de ikke skulle tilføje skabelonen, men bare bruge makroen, tror det kunne lade sig gøre, eller vil de billeder som ligge i skabelonen automatisk komme med når man åbner et nyt dokument?
Jeg forstår ikke dit sidste afsnit, men mht. makrosikkerhed så bør det ikke være et problem, hvis du har placeret den globale skabelon i Words startup-folder og din "alm." skabelon i f.eks. folderen med arbejdsgruppeskabeloner (indtil Office 2003).
så jeg gemmer skabelonen igen, som en global skabelon? Så der både ligger én skabelon i arbejdsgruppen, men også i sartup-folderen?
mht. til makrosikkerhed, så er det fordi på de computere, hvor denne kode skal bruges er makrosikkerheden høj og derfor skal den ændres når jeg skal bruge den nye skabelon.
Du skal bare have skabelonen liggende 2 steder (henholdsvis arbejdsgruppeskabeloner og startup).
Nu kører jeg 2007, hvor der er ændret på makrosikkerhed/niveauer, men jeg mener, at hvis du i f.eks. Word 2003 bruger skabeloner, der er placeret i en af de 2 foldere, som vi taler om i denne sammenhæng, så bliver de anset som trustede foldere og kode bliver afviklet automatisk.
Mht. Normal.dot, så er det jo brugerens egen skabelon, og det at placere kode i hver enkelt brugers Normal.dot er et halvt mareridt, specielt hvis det skal opdateres på et tidspunkt.
Office 2007: Office-knappen, Word indstillinger, Avanceret, Filplaceringer
Her kan de i øvrigt også ændres.
Synes godt om
Ny brugerNybegynder
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.