VBA verwijzingen

CSV

Een CSV-bestand is net zoals een INI-bestand een tekstbestand. Veel dumps vanuit primaire registratiesystemen zoals bijvoorbeeld SAP worden gegenereerd in dit format. Kenmerkend voor dit format is dat de waarden worden gescheiden door een scheidingsteken, veelal is dit de “;”.

CSV staat Comma Separated Value maar wordt soms ook aangeduid als Character Separated Value.

Voor deze bron hoeft geen extra verwijzing gemaakt te worden. Daarnaast is het ook niet noodzakelijk om een extra module op te nemen.

De gebruikte functies in deze klassenmodule zitten in de standaard bibliotheek "Visual Basic for Applications".

Voorts kent het CSV-format ook geen specifieke hiërarchie, de waarden worden van links naar rechts weggeschreven gescheiden door het scheidingsteken.

'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 10-4-2017
' Object        : clsTekstCSV
' Doel          : waarden laden, wijzigen en verwijderen uit TekstBestandCSV
' Opmerking     : waarden worden gescheiden door ";"
'-----------------------------------------------------------------------------------------------------------------------

Option Explicit

Public Sub Laden(lsb As ListBox)

'   Waarden per regel uitlezen m.b.v. split

    Dim i As Integer
    Dim strRegel As String
    Dim strItem() As String
    Dim strNummer As String
    Dim strVoornaam As String
    Dim strAchternaam As String
    
    Open TekstBestandCSV For Input As #1
        
        Do Until EOF(1)
        
            Line Input #1, strRegel
            
            strItem = Split(strRegel, ";")
            
            strNummer = strItem(0)
            strVoornaam = strItem(1)
            strAchternaam = strItem(2)
            
            If IsNumeric(strNummer) Then
            
                With lsb
                    .AddItem
                    .List(i, 0) = strNummer
                    .List(i, 1) = strVoornaam
                    .List(i, 2) = strAchternaam
                End With
                
                i = i + 1
                
            End If
        
        Loop
    
    Close #1

End Sub

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

'   Toevoegen aan einde van bestand m.b.v. append
   
    Open TekstBestandCSV For Append As #2
        
        Print #2, strNummer & ";" & strVoornaam & ";" & strAchternaam
    
    Close #2

End Sub

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

'   Itereren door origineel bestand en tegelijkertijd regels kopieren naar tijdelijk bestand
'   Indien nummer voorkomt regel niet kopieren maar nieuwe regel wegschrijven met de gewijzigde waarden
'   Origineel bestand verwijderen en tijdelijk bestand opslaan als originieel bestand

    Dim strRegel As String
    Dim strItem() As String

    Open TekstBestandCSV For Input As #3
        
        Open TekstBestandCSVtijdelijk For Output As #4
        
            Do Until EOF(3)
            
                Line Input #3, strRegel
                
                strItem = Split(strRegel, ";")
                
                If strItem(0) = strNummer Then
                    If blnVerwijder = False Then
                        strNummer = strItem(0)
                        Print #4, strNummer & ";" & strVoornaam & ";" & strAchternaam
                    End If
                Else
                    Print #4, strRegel
                End If
                
            Loop
            
        Close #4
            
    Close #3
    
    Kill TekstBestandCSV
    Name TekstBestandCSVtijdelijk As TekstBestandCSV

End Sub

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

'   Verwijderen door regel in zijn geheel niet mee te kopiëren via procedure Wijzig

    If blnAlles = True Then
        Open TekstBestandCSV For Output As #5
            Print #5, "Naam;Voornaam;Achternaam"
        Close #5
    Else
        Wijzig strNummer, "", "", True
    End If
    
End Sub