Vraag & Antwoord

Programmeren

VBA: EXCEL en WORD: hoe versie te detecteren

5 antwoorden
  • Hoi, Ik heb in vba een script gemaakt dat gegevens uit excel in een worddocument schrijft. Dit werkt allemaal prima. Alleen is er een klein probleem. De macro gaat gebruikt worden in verschillende office versies. Om te kunnen communiseren met ms word gebruik ik de Microsoft Word x.x library. In office 2000 is dit 9.0 en in office 97 is dit 8.0 (logisch he :wink: ) Het probleem is nu als volgt. Als het document is office 2000 geopend is, wordt het automatisch de 9.0 libraray. Wordt het document daarna in office 97 geopend dan kan ie de library niet vinden en krijg ik dus foutmeldingen. Hoe kan ik voorkomen dat dit gebeurd. Ik wil dus de office versie kunnen detecteren en dan op een of andere manier de juiste library laden. Kan iemand me helpen? Alvast bedankt Rob
  • In de help van VBA gezocht naar [i:4a9f199a97][b:4a9f199a97]versie[/b:4a9f199a97][/i:4a9f199a97], geeft als resultaat: [i:4a9f199a97][b:4a9f199a97]Version, property [/b:4a9f199a97][/i:4a9f199a97](eigenschap) (zowel in Word als Excel)
  • [quote:13445b4e85="Rob van Esch"]Om te kunnen communiseren met ms word gebruik ik de Microsoft Word x.x library. In office 2000 is dit 9.0 en in office 97 is dit 8.0 (logisch he :wink: ) Het probleem is nu als volgt. Als het document is office 2000 geopend is, wordt het automatisch de 9.0 libraray. Wordt het document daarna in office 97 geopend dan kan ie de library niet vinden en krijg ik dus foutmeldingen. Hoe kan ik voorkomen dat dit gebeurd.[/quote:13445b4e85] Gebruik je OLE ofzo? Kun je een stukje relevante code geven?
  • Hieronder een stukje code wat ik gebruik om word te benaderen en een document te openen. [code:1:1531084d71] Public Function Schrijf_word(text As Integer) On Error GoTo errHandler 'object maken voor word Dim objWordrapport As New Word.Application 'document openen objWordrapport.Documents.Open ("Rapport 1.doc") 'text schrijven objWordrapport.Selection.TypeText text 'document opslaan objWordrapport.Documents.Save 'document sluiten en word sluiten objWordrapport.Documents.Close objWordrapport.Quit 'object vernietigen Set objWordrapport = Nothing 'alles gelukt Schrijf_word = true Exit Function errHandler: 'er is een fout, objecten vernietigen en functie beeindigen objWordrapport.Quit False Set objWordrapport = Nothing Schrijf_word = false End Function [/code:1:1531084d71] Door de verschillende versies van de word-library in vba werkt dit dus niet bij een nieuwere versie. Ik heb bij extra/verwijzingen (references) microsoft word x.x object library aangevinkt. Afhankelijk van de office versie is dit 8.0 of 9.0. Hoe kan ik nu de juiste module laden. Ik kan nu dus de versie van office detecteren maar nu moet ik dus nog weten hoe ik een module kan laden. Ik heb de cd van office niet bij de hand, anders had ik wel in de helpfiles gekeken :( Alvast bedankt Rob
  • Aangepaste code [code:1:264d823896] Public Function Schrijf_word(text As String) As Boolean On Error GoTo errHandler Dim objWord as Object Dim objDocRapport as Object Schrijf_word = False ' Creeer Word document Set objWord = CreateObject("Word.Application") 'document openen objDocRapport = objWord.Documents.Open ("Rapport 1.doc") 'text schrijven objDocRapport.Selection.TypeText text 'document opslaan objWord.Documents.Save 'document sluiten en word sluiten objWord.Documents.Close objWord.Quit 'object vernietigen Set objDocRapport = Nothing Set objWord = Nothing 'alles gelukt Schrijf_word = true Exit Function errHandler: 'er is een fout, objecten vernietigen en functie beeindigen if (not (objWord is Nothing)) then objWord.Quit False Set objDocRapport = Nothing Set objWord = Nothing end if End Function [/code:1:264d823896] Dit maakt de code wel iets langzamer. Trager dan traag kan-ie toch niet worden :lol: En die library's heb je dacht ik nu ook niet meer nodig. Zelf ff checken... zo uit m'n hoofd.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.