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