Avatar billede Dan Elgaard Ekspert
29. december 2019 - 12:32 Der er 6 kommentarer og
1 løsning

VBA: Find standard font

Jeg forsøger, at finde, hvilken font, der er standard fonten via VBA.

Jeg forsøger med noget i denne stil:
Application.Documents(Application.NormalTemplate.FullName).Styles(-1).Font.Name

Men, det virker ikke.

Hvordan finder jeg standard font i Word via VBA?
Avatar billede lene-fredborg Ekspert
29. december 2019 - 13:15 #1
Opklarende spørgsmål:
Hvad skal du bruge informationen til?

Svaret på dit spørgsmål afhænger af, hvad det helt præcist er, du prøver at finde, og hvad det præcis er, du kalder ”standard font”.

Jeg kan se ud fra den VBA-kode, du har prøvet af, at du forsøger at finde information i Normal.dotm, og at det er fonten i typografien Normal, du prøver at finde.

Word 2003 og tidligere: standardfont (default font) er Times New Roman, 12 pkt.
Word 2007 og senere: standardfont (default font) er Calibri, 11 pkt.

Det vil være ovenstående fonte, der er anvendt i Normal.dotm som udgangspunkt, dvs. i en helt ny Normal.dotm, som Word har oprettet, og som ikke er ændret efterfølgende.

Hvad et dokument som udgangspunkt bruger af font(e), afhænger af, hviklen skabelon (template), dokumentet er baseret på, og hvordan typografier (styles) er defineret deri.

Er det fonten i typografien Normal i den skabelon, som det aktive dokument bruger, du vil finde?
Eller er det fonten i typgografien Normal i skabelonen Normal.dotm, du vil finde, uanset hvilken skabelon, det aktive dokument er baseret på?
Avatar billede Dan Elgaard Ekspert
29. december 2019 - 13:49 #2
Hej Lene,

Det sidste:
Fonten i typgografien 'Normal' i skabelonen 'Normal.DOTm', uanset hvilken skabelon, det aktive dokument er baseret på.

Jeg er med på, at som standard er den font 'Calibri', men dette kan brugeren jo ændre.

Så, jeg har behov for at vide, præcist fonten i typgografien 'Normal' i skabelonen 'Normal.DOTm'.
Avatar billede lene-fredborg Ekspert
29. december 2019 - 15:55 #3
Hvis man ikke kan være sikker på, at der et et aktivt dokument, som er baseret på Normal.dotm, er makrokoden nødt til at åbne Normal.dotm, og den skal åbnes som dokument – ikke som template – da style-objektet skal bruge document-objektet.
Følgende makro vil åbne Normal.dotm som dokument og finde navnet på den Font, style Normal er defineret til at bruge (overføres til variabel strFont) – makroen viser til sidst en dialogboks med font-navnet.

Sub GetFontNameStyleNormalInNormalDotm()
    Dim strFont As String
    Dim oDoc As Document
   
    Set oDoc = Templates(NormalTemplate.FullName).OpenAsDocument
    strFont = oDoc.Styles(wdStyleNormal).Font.name
    oDoc.Close SaveChanges:=wdDoNotSaveChanges
   
    MsgBox strFont
   
    Set oDoc = Nothing
End Sub

VIGTIGT: makroen lukker Normal.dotm UDEN at gemme. Det er kun OK, hvis Normal.dotm med sikkerhed ikke indeholder ændringer, der skal gemmes.
Avatar billede Dan Elgaard Ekspert
29. december 2019 - 18:52 #4
Hej lene,

Jeg tænkte nok, at det var sådan noget vi skulle ud i :-)
Lidt mærkeligt, at 'Templates' ikke har et .Style object, når nu det er der?

Anyway, tak for hjælpen.

Dan
Avatar billede lene-fredborg Ekspert
29. december 2019 - 19:31 #5
Du kan IKKE vælge .styles, hvis det er Templates(xxx), du har fat i. Den kodelinje, du viste først, bruger .Documents (.Documents indeholder alle åbne dokumenter). Det pågældende dokument skal være åbent, for at din kodelinje virker - og det er, hvad .OpenAsDocument sørger for i mit svar #3. Din oprindelige linje virker kun, hvis Normal.dotm er åbnet direkte.
Avatar billede Dan Elgaard Ekspert
29. december 2019 - 19:57 #6
Jeg er HELT med - jeg tænkte blot, at 'Normal.DOTm' er jo altid åben, men det var '.Style' objectet, der manglende :-)
(Du må have mig undskyldt - jeg er jo Excel mand :-)

Jeg har tilladt mig, at optimere din kode lidt.

Dels flimrede skæmen, når dokumentet blev midlertidigt åbnet, hvilet jeg løste ved, at åbne det i en skult 'instance' af Word.
Dernæst tog det alligevel 1-2 sekunder, hvilket jeg synes var for lang tid, da jeg skal bruge denne font en del gange, så nu bliver fonten gemt og kun hentet igen en gang om ugen (jeg antager, at folk ikke skifter den globale standard font så ofte :-)

Endnu engang tusind tak for hjælpen (håber vi ses til et MVP arrangemnet en dag :-)
Avatar billede lene-fredborg Ekspert
29. december 2019 - 21:05 #7
Normal.dotm er ganske vist altid åben som global skabelon, men den er ikke "rigtigt" åben, dvs. at den ikke er en del af Documents.

Min kode indeholdt kun tilstrækkeligt til at vise, hvordan Normal.dotm kunne åbnes - den var ikke forsøgt optimeret på nogen måde. Du kan bruge Application.ScreenUpdating = False til at undgå skærmopdatering (sæt til True igen til sidst).
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

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





CIO
Årets CIO 2022: Nu skal Danmarks dygtigste CIO findes - er det dig? Eller kender du en, du vil indstille?