VBA verwijzingen

Start

Deze toepassing kent een zogenaamde UserForm welke fungeert als Graphical User Interface, afgekort als GUI.

Deze GUI handelt alle interacties af tussen de toepassing en de gebruiker.

Alle verwijzingen naar andere applicaties zijn gebaseerd op vroege bindingen vanuit Office 2013 (32 bits). Dit betekent dat deze toepassing niet zal werken onder eerdere versies zonder de nodige aanpassingen. In dit artikel worden deze aanpassingen toegelicht, alsmede het verschil tussen vroege en late bindingen.

Voorts kan een verwijzing (vroege binding) naar een bibliotheek worden gemaakt via [Extra | Verwijzingen] in de Visual Basic Editor.
'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 28-3-2017
' Object        : frmContactpersonen
' Doel          : GUI voor toepassing
' Opmerking     : ontwikkeld in Office 2013 m.b.v. 'vroege binding' verwijzingen
'-----------------------------------------------------------------------------------------------------------------------

Option Explicit

Dim blnNieuw As Boolean

Dim bronINI As clsTekstINI
Dim bronCSV As clsTekstCSV
Dim bronWord As clsWord
Dim bronExcel As clsExcel
Dim bronOneNote As clsOnenote
Dim bronOutlook As clsOutlook
Dim bronADO As clsADO

Private Sub UserForm_INItialize()
    
'   Eigenschappen listbox contactpersonen

    With lsbContactpersonen
        .ColumnCount = 3
        .ColumnWidths = "20;50;50"
    End With
    
'   Bronnen toevoegen

    With cmbBron
        .AddItem "INI"
        .AddItem "CSV"
        .AddItem "Word"
        .AddItem "Excel"
        .AddItem "OneNote"
        .AddItem "Outlook"
        .AddItem "Access"
        .AddItem "MariaDB"
        .ListIndex = 0
    End With
    
'   Bepalen of er opgeslagen mag worden
    
    bepaalOpslaan
    
'   Geselecteerde bron laden
    
    laadBron
    
End Sub

Private Sub cmbBron_Change()
    
'   Geselecteerde bron laden
    
    laadBron

End Sub

Private Sub cmdNieuw_Click()
    
'   Nieuwe rij toevoegen met nieuw nummer (max + 1)
    
    Dim i As Integer
    Dim intTmp As Integer
    Dim intMax As Integer
    
    blnNieuw = True
    
    For i = 0 To lsbContactpersonen.ListCount - 1
    
        With lsbContactpersonen
            intTmp = .List(i, 0)
            If intTmp > intMax Then intMax = intTmp
        End With
    
    Next i
    
    With lsbContactpersonen
        .AddItem intMax + 1
        .ListIndex = .ListCount - 1
    End With
    
    txtVoornaam.SetFocus

End Sub

Private Sub cmdOpslaan_Click()

'   Nieuw of gewijzigde contactpersoon opslaan

    Dim strNummer As String
    Dim strVoornaam As String
    Dim strAchternaam As String

'   Invoer verplicht
    
    If txtVoornaam = "" Or txtAchternaam = "" Then
        MsgBox "Kan niet opslaan!", vbCritical
        Exit Sub
    End If
    
'   Nummer achterhalen uit lijst en namen uit tekstvakken
    
    With lsbContactpersonen
        strNummer = .List(lsbContactpersonen.ListIndex, 0)
        strVoornaam = txtVoornaam
        strAchternaam = txtAchternaam
    End With
    
'   Bron afhankelijk opslaan of wijzigen
    
    Select Case cmbBron.Text
        Case Is = "INI"
            If blnNieuw = True Then
                bronINI.Toevoegen strNummer, strVoornaam, strAchternaam
            Else
                bronINI.Wijzig strNummer, strVoornaam, strAchternaam
            End If
        Case Is = "CSV"
            If blnNieuw = True Then
                bronCSV.Toevoegen strNummer, strVoornaam, strAchternaam
            Else
                bronCSV.Wijzig strNummer, strVoornaam, strAchternaam, False
            End If
        Case Is = "Word"
            If blnNieuw = True Then
                bronWord.Toevoegen strNummer, strVoornaam, strAchternaam
            Else
                bronWord.Wijzig strNummer, strVoornaam, strAchternaam
            End If
        Case Is = "Excel"
            If blnNieuw = True Then
                bronExcel.Toevoegen strNummer, strVoornaam, strAchternaam
            Else
                bronExcel.Wijzig CInt(strNummer), strVoornaam, strAchternaam
            End If
        Case Is = "OneNote"
            If blnNieuw = True Then
                bronOneNote.Toevoegen strNummer, strVoornaam, strAchternaam, ""
            Else
                bronOneNote.Wijzig strNummer, strVoornaam, strAchternaam
            End If
        Case Is = "Outlook"
            If blnNieuw = True Then
                bronOutlook.Toevoegen strNummer, strVoornaam, strAchternaam
            Else
                bronOutlook.Wijzig strNummer, strVoornaam, strAchternaam
            End If
        Case Is = "Access", "MariaDB"
            If blnNieuw = True Then
                bronADO.Toevoegen CInt(strNummer), strVoornaam, strAchternaam
            Else
                bronADO.Wijzig CInt(strNummer), strVoornaam, strAchternaam
            End If
    End Select
    
'   Waarde weer herstellen
    
    blnNieuw = False
    
'   Gewijzigde bron opnieuw laden
    
    laadBron
    
End Sub

Private Sub cmdVerwijderen_Click()

'   Enkele contactpersoon in bronbestand verwijderen

    Dim strNummer As String

'   Laatste contactpersoon niet verwijderen i.v.m. eventuele fouten
    
    If lsbContactpersonen.ListCount = 1 Then
        MsgBox "U kan de laatste contactpersoon niet verwijderen!", vbCritical
        Exit Sub
    End If

'   Nummer contactpersoon achterhalen

    strNummer = lsbContactpersonen.List(lsbContactpersonen.ListIndex, 0)
    
'   Aan de hand van nummer contactpersoon verwijderen

    Select Case cmbBron.Text
        Case Is = "INI"
            bronINI.Verwijder strNummer, False
        Case Is = "CSV"
            bronCSV.Verwijder strNummer, False
        Case Is = "Word"
            bronWord.Verwijder strNummer, False
        Case Is = "Excel"
            bronExcel.Verwijder strNummer, False
        Case Is = "OneNote"
            bronOneNote.Verwijder strNummer, False
        Case Is = "Outlook"
            bronOutlook.Verwijder strNummer, False
        Case Is = "Access", "MariaDB"
            bronADO.Verwijder CInt(strNummer), False
    End Select
    
'   Gewijzigde bron opnieuw laden
    
    laadBron
    
End Sub

Private Sub lsbContactpersonen_Change()

'   Bepalen of er opgeslagen mag worden

    bepaalOpslaan

End Sub

Private Sub laadBron()

'   Lijst met contactpersonen laden afhankelijk van selectie

    Dim A, B
    
    A = Timer

'   Eerst alles opschonen
    
    lsbContactpersonen.Clear

    Set bronINI = Nothing
    Set bronCSV = Nothing
    Set bronWord = Nothing
    Set bronExcel = Nothing
    Set bronOneNote = Nothing
    Set bronADO = Nothing
    Set bronOutlook = Nothing

'   Opnieuw laden
    
    Select Case cmbBron.Text
        Case Is = "INI"
            Set bronINI = New clsTekstINI
            bronINI.Laden lsbContactpersonen
        Case Is = "CSV"
            Set bronCSV = New clsTekstCSV
            bronCSV.Laden lsbContactpersonen
        Case Is = "Word"
            Set bronWord = New clsWord
            bronWord.Laden lsbContactpersonen
        Case Is = "Excel"
            Set bronExcel = New clsExcel
            bronExcel.Laden lsbContactpersonen
        Case Is = "OneNote"
            Set bronOneNote = New clsOnenote
            bronOneNote.Laden lsbContactpersonen
        Case Is = "Outlook"
            Set bronOutlook = New clsOutlook
            bronOutlook.Laden lsbContactpersonen
        Case Is = "Access", "MariaDB"
            Set bronADO = New clsADO
            bronADO.Openen cmbBron.Text
            bronADO.Laden lsbContactpersonen
    End Select
    
'   Lijstindex niet instellen bij geen items
    
    If lsbContactpersonen.ListCount > 0 Then
        lsbContactpersonen.ListIndex = 0
    Else
        txtVoornaam = ""
        txtAchternaam = ""
    End If
    
    B = Timer
    
    lblStatus.Caption = "Geladen in " & FormatNumber(B - A, 2) & " seconden..."

End Sub

Private Sub bepaalOpslaan()
        
'   Alleen opslaan bij selectie
        
    If lsbContactpersonen.ListCount = 0 Then
        cmdOpslaan.Enabled = False
        Exit Sub
    Else
        cmdOpslaan.Enabled = True
        txtVoornaam = lsbContactpersonen.List(lsbContactpersonen.ListIndex, 1)
        txtAchternaam = lsbContactpersonen.List(lsbContactpersonen.ListIndex, 2)
    End If

End Sub

Naast deze standaard GUI wordt er nog gebruik gemaakt van de module modBronBestanden. Hier kunnen de locatie en bestandsnamen van de verschillende bronnen achterhaald worden.

'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 31-3-2017
' Object        : modBronBestanden
' Doel          : bronbestanden staan in de map ../Bronnen (relatief)
'------------------------------------------------------------------------------------------------------------------------

Option Explicit

Function StandaardMap()

'   Locatie toepassing (sjabloon) achterhalen

    Dim t As Template

    For Each t In Application.Templates

        If t.Name = "Applicatie.dotm" Then
            StandaardMap = t.Path & Application.PathSeparator & "Bronnen" & Application.PathSeparator
            Exit Function
        End If

    Next

End Function

Function TekstBestandINI()

    TekstBestandINI = StandaardMap & "Contactpersonen.ini"

End Function

Function TekstBestandCSV()

    TekstBestandCSV = StandaardMap & "Contactpersonen.csv"

End Function

Function TekstBestandCSVtijdelijk()

    TekstBestandCSVtijdelijk = StandaardMap & "Contactpersonen_tmp.csv"

End Function

Function WordBestand()

    WordBestand = StandaardMap & "Contactpersonen.docx"

End Function

Function ExcelBestand()

    ExcelBestand = StandaardMap & "Contactpersonen.xlsx"

End Function

Function OneNoteLocatie()

    OneNoteLocatie = StandaardMap & "Notitieblok"

End Function

Function AccessBestand()

    AccessBestand = StandaardMap & "Databank.accdb"

End Function