Den bedste måde at lære/lave formatering i word fra access er at oprette en makro i word - lave det du ønsker udført i små bidder og tjekke hvilken kode makroen opretter i word. Den kode vil du kunne overføre til din accesskode, som så udfører det når word åbnes. Der vil måske være brug for at lidt tilpasning.
Jeg har gjort det på den måde at jeg har nogle tomme Word-skabeloner der bliver kopieret til den nye sti. Her er sidehoved, overskrifter osv. defineret inden mam går i gang.
Du kan meget let få Word selv til at hjælpe dig: - Start et nyt Word dokument - Start makro-optageren - Simuler de handlinger, du vil køre fra Access - Stop makro-optageren
Nu har du en række kommandoer, som du kan klippe direkte over i VBA. Du skal bare sætte din objword reference foran, f.eks. vil objword.Selection.TypeText Text:=DinTekst indsætte en tekst osv.
Bemærk, at Word benytter konstanter, der ikke er kendt udenfor Word. Dem kan du afkode i Immediate vinduet (Ctrl-G), når du er i Words Visual Basic Editor.
Ser du f.eks. Selection.Font.Bold = wdToggle i din Word makro, taster du Ctrl-G og skriver ?wdToggle Word svarer med 9999998 Du skal alstå i din Access kode skrive objword.Selection.Font.Bold = 9999998 hvis du vil slå fed skrift til/fra. OK?
... og for at sætte teksten ind et bestemt sted, kan du benytte bogmærker. Du finder sikker hurtigt ud af, at det kan betale sig at have en lille rutine, der hopper til at bogmærke og sætter en tekst ind, f.eks.
Sub IndsætTekstVedBogmærke(B as String, T as String) objword.Selection.GoTo What:=wdGoToBookmark, Name:=B objword.Selection.Find.ClearFormatting
objword.Selection.TypeText Text:=T End Sub
På samme måde kan du skrive rutiner til fed, kursiv, skrifttypevalg osv. ... men igen - stjæl den færdige kode fra Words makro-optager.
(ovenstående kode er ikke testet - skal bare give dig en ide om hvor enkelt det kan gøres)
Ang. de konstanter som ikke bruges i word. I stedet for at have numre stående, som man ikke kan huske betydningen af kan du bruge dine egne konstanter som f.eks. Const WD_Character = 1 'WdUnits Const WD_Cell = 12 'WdUnits Const WD_Line = 5 'WdUnits Const WD_Row = 10 'WdUnits Const WD_Column = 9 'WdUnits Const WD_Word = 2 'WdUnits Const WD_PreferredWidthAuto = 1 Const WD_PreferredWidthPercent = 2 Const WD_PreferredWidthPoints = 3 Const WD_Extend = 1 'WdMovementTypes Const WD_Move = 0 'WdMovementTypes Const WD_Centimeters = 1 'WdMeasurementUnits Const WD_Inches = 0 'WdMeasurementUnits Const WD_Milimeteres = 2 'WdMeasurementUnits Const WD_Picas = 4 'WdMeasurementUnits Const WD_Points = 3 'WdMeasurementUnits Const WD_Word8TableBehavior = 0 'WdDefaultTableBehavior Const WD_Word9TableBehavior = 1 'WdDefaultTableBehavior Const WD_CellAlignVerticalBottom = 3 'WdCellVerticalAlignment Const WD_CellAlignVerticalCenter = 1 'WdCellVerticalAlignment Const WD_CellAlignVerticalTop = 0 'WdCellVerticalAlignment Const WD_AutoFitContent = 1 'WdAutoFitBehavior Const WD_AutoFitFixed = 0 'WdAutoFitBehavior Const WD_AutoFitWindow = 2 'WdAutoFitBehavior Const WD_AlignParagraphCenter = 1 'WdParagraphAlignment Const WD_AlignParagraphDistribute = 4 'WdParagraphAlignment Const WD_AlignParagraphLeft = 0 'WdParagraphAlignment Const WD_AlignParagraphRight = 2 'WdParagraphAlignment Const WD_ColorGray15 = 14277081 'WeColor Const WD_ColorAutomatic = -16777216 'WdColor Const WD_LineStyleNone = 0 ' Const WD_LineStyleSingle = 1 ' Const WD_BorderTop = -1 'WdBorder Const WD_BorderBottom = -3 'WdBorder Const WD_BorderHorizontal = -5 'WdBorder Const WD_BorderVertical = -6 'WdBorder Const WD_BorderRight = -4 'WdBorder Const WD_BorderLeft = -2 'WdBorder
I stedet for wdBorderLeft skriver du WD_borderleft svarende til talværdien -2. En vigtig ting er at så er du også sikker på at dine kode virker, hvis den kører på maskiner, der har andre versioner af word end du selv har. Det kræver dog at du bruger "late binding" når du starter word i modsætning til "early binding" som du gør nu.
Dim oDoc As Object 'late binding Dim oWord As Object 'late binding eller Dim oDoc As Word.Document 'early binding Dim oWord As Word.Application 'early binding
Hastigheden er knap så god med early binding, til gengæld slipper man for problemer med brudte referencer til word hvis din database skal køre på andre computere. Det afhænger af dit behov.
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.