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å?
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.
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.
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 :-)
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).
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.