Avatar billede henrik1975 Nybegynder
17. april 2005 - 12:40 Der er 6 kommentarer og
1 løsning

Åbner word fra acces - men mangler formattering

Jeg har brug for lidt hjælpe til at formatere et word-dokument. Jeg åbner word fra access

Dim objword As New Word.Application
Dim WordDoc As New Word.Document
Set WordDoc = objword.Documents.Add("C:\test.doc")

og skriver derefter indholdet af en forespørgsel ind i dokumentet test.doc.

Men hvordan laver jeg formatering? Dvs. vælger f.eks. skrifttypen verdana, og sætter samtidig noget af indeholdet til at blive skrevet med bold?

Nogen der har et eksempel på hvordan wordformatering klares fra VB eller en henvisning til et sted på nettet, hvor jeg kan finde det jeg skal bruge?
Avatar billede sjap Praktikant
17. april 2005 - 13:14 #1
Det er godt nok ikke Access, men måsk kan det bruges som inspiration alligevel:

http://www.vbdotnetheaven.com/Code/Jun2003/2071.asp
Avatar billede jesperfjoelner Nybegynder
17. april 2005 - 14:32 #2
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.
Avatar billede kasper_knaldperle Nybegynder
17. april 2005 - 20:26 #3
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.
Avatar billede fdata Forsker
17. april 2005 - 23:48 #4
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?
Avatar billede fdata Forsker
17. april 2005 - 23:54 #5
... 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)
Avatar billede jesperfjoelner Nybegynder
18. april 2005 - 00:04 #6
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.
Avatar billede fdata Forsker
29. december 2005 - 16:01 #7
A blast from the past! Tak for point.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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