VBA verwijzingen

Word

De onderstaande klassenmodule leest een tabel uit in een Word-document. Daar er wordt gewerkt met een nieuwe instantie van het Word object wordt het proces volledig op de achtergrond uitgevoerd.

Het maken van een verwijzing naar de Object Library van Word is niet nodig gezien deze al standaard zit opgenomen in Word toepassingen.

Bronnen zoals deze kunnen een uitkomst bieden bij primaire registratiesystemen die alleen de mogelijkheid hebben om Word-brieven te printen.

In de plaats van het ontwikkelen van een brief kan een gegevensbestand worden ontwikkeld met behulp van een tabel. De gebruiker kan dit document dan naar de persoonlijke schijf wegschrijven in de plaats van te printen. Op deze manier kan dit bestand dan fungeren als gegevensbestand.
'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 28-3-2017
' Object        : clsWord
' Doel          : waarden laden, wijzigen en verwijderen uit WordBestand
' Verwijzing    : Microsoft Word X Object library
' Objecten      : 1. Word applicatie
'                 2. Word document
'                 3. Word tabel
'-----------------------------------------------------------------------------------------------------------------------

Option Explicit

Dim objWord As Word.Application
Dim objDocument As Word.Document
Dim objTabel As Word.Table

Private Sub Class_Initialize()

'   Initialisatie Word-objecten

    Set objWord = New Word.Application
    Set objDocument = objWord.Documents.Open(WordBestand)
    Set objTabel = objDocument.Tables(1)

End Sub

Public Sub Laden(lsb As ListBox)

'   Waarden uitlezen uit tabel

    Dim i As Integer
    
    For i = 2 To objTabel.Rows.Count
    
        With lsb
            .AddItem
            .List(i - 2, 0) = verwijderTekens(objTabel.Cell(i, 1).Range.Text)
            .List(i - 2, 1) = verwijderTekens(objTabel.Cell(i, 2).Range.Text)
            .List(i - 2, 2) = verwijderTekens(objTabel.Cell(i, 3).Range.Text)
        End With
        
    Next
    
End Sub

Public Sub Toevoegen(strNummer As String, strVoornaam As String, strAchternaam As String)

'   Nieuwe rij toevoegen

    With objTabel
        .Rows.Add
        .Cell(objTabel.Rows.Count + 2, 1).Range.Text = strNummer
        .Cell(objTabel.Rows.Count + 2, 2).Range.Text = strVoornaam
        .Cell(objTabel.Rows.Count + 2, 3).Range.Text = strAchternaam
    End With

End Sub

Public Sub Wijzig(strNummer As String, strVoornaam As String, strAchternaam As String)

'   Aan de hand van nummer rij wijzigen

    Dim i As Integer
    
    For i = 2 To objTabel.Rows.Count
    
        If verwijderTekens(objTabel.Cell(i - 2, 1).Range.Text) = strNummer Then
            objTabel.Cell(i - 2, 2).Range.Text = strVoornaam
            objTabel.Cell(i - 2, 3).Range.Text = strAchternaam
            Exit For
        End If
    
    Next i

End Sub

Private Function verwijderTekens(waarde)

'   Waarden uit cellen komen met overbodige tekens, zoals bijvoorbeeld  = chr(7) en enters (11 en 13)

    verwijderTekens = Replace(waarde, Chr(7), "")
    verwijderTekens = Replace(verwijderTekens, Chr(11), "")
    verwijderTekens = Replace(verwijderTekens, Chr(13), "")

End Function

Public Sub Verwijder(strNummer As String, blnAlles As Boolean)

'   Alle rijen verwijderen (exclusief kop) of aan de hand van nummer
    
    Dim i
    
    For i = objTabel.Rows.Count To 2 Step -1
    
        If blnAlles = True Then
        
            objTabel.Rows(i).Delete
        
        Else
    
            If verwijderTekens(objTabel.Cell(i, 1).Range.Text) = strNummer Then
            
                objTabel.Rows(i).Delete
            
            End If
            
        End If
        
    Next

End Sub

Private Sub Class_Terminate()
    
'   Deinitialisatie Word-objecten
    
    objDocument.Close (False)
    objWord.Quit
    
    Set objTabel = Nothing
    Set objDocument = Nothing
    Set objWord = Nothing

End Sub