05. juli 2006 - 14:02Der er
23 kommentarer og 1 løsning
Styre placeringen af underskrift i dokument
Jeg har lavet en brevskabelon, hvor brugeren via en userform skal indtaste bl.a. modtager af brevet og selve brevet.
Herefter bliver det automatisk sat ind i Word, men der er defineret nogle afstande mellem underskriften (mvh o.s.v.) og selve teksten.
Jeg har nu 22 linier mellem feltet der skal indeholde teksten, og underskriften. Problemet er så at der bliver ved med at være 22 linier imellem dem. Det skal tilpasses og så må underskriften ikke kunne ligge for sig selv på en efterfølgende side.
Tjaaaa, jeg har lige fået en revision af brevskabelonen.
Der skal være 3 linieskift imellem sidste punktum i teksten og underskriften. Så er det smarteste og letteste vel bare at placere underskriften 3 linieskift under teksten?
Jeg har fjernet det, og det ser faktisk fornuftigt nu, men jeg har stadig problemet i de tilfælde hvor underskriften netop ikke kan stå op en foregående side, og hvis jeg bruge "hold sammen...", så kommer hele teksten med over på næste side, og jeg har så kun modtager-informationer på første side.
1) det smarteste er nok at lave 3x Selection.TypeText vbNewLine efter sidste punktum i teksten. Alternativt, hvis du ved hvormange linier der er på 1 side (fontstørrelse, linieafstand, topmargen, bundmargen osv osv er kendt på forhånd og fastlagt), så kan du lave en tæller, og så tælle ned indtil sideskiften kommer. (Ikke så pænt, IMHO)
Ovenstående tager ikke højde for situationen hvor brødteksten fylder så meget at underskriften vil flytte over på side 2 (3 osv.).
Der må/kan du nørkle lidt med at sætte et bogmærke førend underskriften og efter underskriften, og så spørge om deres "Selection.Information(wdActiveEndAdjustedPageNumber)" er forskellig, og hvis ja (dvs. de er adskilt af et sideskifte) så flytte lidt rundt så det står pænt ( = at underskriften ikke står alene på sidste side eller en del af underskriften står alene på sidste side).
1) Jeg tror bare jeg laver 3 linieskift (afsnit) manuelt i dokumentet.
Jeg vil så tilgengæld prøve at bruge det sidste du skriver om, men kan jeg gå ind i teksten og splitte den op, så der kommer lidt tekst med over på efterfølgende side sammen med underskriften. Men hvordan?
Så vidt jeg forstår din problem stilling vil du ikke få det med underskriften til at fungere automatisk i alle tilfælde, hvis hele brevets tekst er indtastet i ET felt.
1) Hmm, hvis jeg nu laver 2 bogmærker, tester på disse og finder ud af at underskriften er på næste side. Kan jeg så ikke lede brevteksten igennem bagfra og finde 2 på hinanden kommende afsnit, og så tvinge dette sidste afsnit med over på side 2? Findes dette så ikke, så må jeg definere at x antal enter fra slutningen skal med over på næste side.
"Kogt meget ned" så kan Sub Footer() NormalTemplate.AutoTextEntries("Side X af Y").Insert _ Where:=Selection.Sections(1).Footers(wdHeaderFooterPrimary).Range End Sub
indsætte "Side ? af ?"
Dog venstrejusteret ;-) Jeg har endnu ikke haft tid til at "lege" med de muligheder & udfordringer det giver.
Alternativt, så burde ActiveDocument.ActiveWindow.View.Type = wdPrintView sætte dit view til udskriftslayout.
Sub ReadLines() Dim lLong As Long Dim EmptyLines() As Long
'Opret nogle linier. For lLong = 1 To 50 If lLong Mod 4 = 0 Then Selection.TypeParagraph Else Selection.TypeText "Tekst " & Str(lLong) & vbNewLine End If Next lLong
ReDim EmptyLines(0) 'Gå til starten af dokumentet. Selection.HomeKey Unit:=wdStory, Extend:=wdMove For lLong = 1 To ActiveDocument.BuiltInDocumentProperties(wdPropertyLines) ActiveDocument.Bookmarks("\LINE").Select 'Debug.Print Trim(Selection) 'Hvis du vil se indholdet af linien. If Trim(Selection) = Chr(13) Then ReDim Preserve EmptyLines(UBound(EmptyLines) + 1) EmptyLines(UBound(EmptyLines)) = lLong End If Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdMove Next lLong For lLong = 1 To UBound(EmptyLines) Debug.Print EmptyLines(lLong) & " er en tom linie." Next lLong End Sub
Det giver dig lidt af svaret ;-), du skal så "bare" vælge hvilken line der skal have et sideskift indsat.
Alt dette lyder meget besværlgt. Hvad med at prøve at retænke det hele (her tænker jeg på det med userformen). Hvis der ikke sker alt muligt andet i userformen, så har du faktisk ikke brug for den... Du kunne i stedet arbejde med formularfelter, der styrer din tekstplacering meget nøjagtigt og så lade brugeren indtaste direkte i dokumentet, mens det er beskyttet - på den måde skal du umiddelbart slet ikke programmere noget :-)
Jeg er enig med rvm, det er besværligt, og hvis muligt bør løsningen genovervejes. Sidestyring via VBA er, IMHO, ret besværligt, og for de brev-skabeloner jeg har lavet, så bliver det i 99% af situationerne overladt til brugerne selv at indsætte sideskift de "pæne" steder. I tilfælde af at det drejer sig om dokumenter der går direkte til print, uden brugeren kan påvirke det, så tyr jeg til de bøvlede og besværlige løsninger :-)
Det vel jeg give jer ret i, men jeg synes bare ikke rene formularfelter i et beskyttet dokument, giver helt de samme redigeringsmuligheder. Hvordan skal man bl.a. lave punktopstillinger?
Jeg har kigget lidt på din seneste kode, men fik den ikke til at virke helt, men jeg tror også jeg dropper det, så må brugeren selv tilrette dokumentet, hvis det ikke ser rigtigt ud.
Du skal have tak for hjælpen, og så får du lidt ekstra oveni, når du har smidt et svar, leaningvba.
Et ekstra spørgsmål, hvor har du tillært dig disse kundskaber? Jeg har søgt efter en bog eller webside, hvor der målrette info om VB(A) til Word, men har ikke kunnet finde noget.
Ekstra spørgsmål: Søgemaskiner (Google), stædighed og relaterede arbejdsopgaver :-), og så ellers "låne" og redigere.
Bedste steder at finde hjælp er en blanding af referencesider (bla. Microsoft og http://mvps.org), indbygget hjælp i Word og debat-foraer som f.eks. eksperten.dk, samt ikke mindst Word indbyggede makro-optager :-))
Pyt med point, dels var det mest hints du fik og dels fik du ikke helt løst din opgave.
Nu er det ikke en beskyttet brevskabelon, forstået på den måde, at de åbner dokumentet, og deri så er en masse formularfelter som er det eneste de kan skrive i.
Når jeg udføre VBA'en, så bliver alle felter overskrevet af indhold i et nyt dokument, på baggrund af skabelonen.
Nå, der kommer ikke et svar, så må jeg jo lukke spørgsmålet.
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.