Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

VBA: EXCEL en WORD: hoe versie te detecteren

Rob van Esch
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

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