maanantai 16. helmikuuta 2015

MS Access 2013 - Viitenumeron laskenta

Hyödyllinen koodinpätkä, jolla voi VBA-scriptissä laskea viitenumeron.
HUOM. Finanssialan keskusliitto (http://www.fkl.fi/teemasivut/sepa/tekninen_dokumentaatio/Dokumentit/kotimaisen_viitteen_rakenneohje.pdf) määrittää, että 
viitenumeron pituus tulee olla vähintään 3 merkkiä + tarkiste.

Seuraava funktio laskee viitenumeron tarkisteen:

Function LaskeViite(ByVal numerosarja As String) As String
    'Muuttujien esittely
    Dim origSarja As String ' alkuperäinen numerosarja
    Dim Laskuri As Byte ' laskuri
    Dim sarjanPituus As Byte ' numerosarjan pituus
    Dim tarkisteNumero As Byte ' tarkistenumero
    Dim sarjanSumma As String ' numerosarjan summa
    Dim kertoimet(2) As Byte ' kertoimet
    Dim i As Integer
    Dim j As Integer
    Dim refnumber As String     'Viitenumero ilman jarjestelyä
    Dim outstr As String
    Dim UusiViite As String     'Viitenumero 5 mrk. ryhmissä

    'muuttujien alustus
    origSarja = numerosarja
    sarjanPituus = Len(numerosarja)
    Laskuri = 0
    sarjanSumma = 0
    tarkisteNumero = 0
    kertoimet(0) = 7: kertoimet(1) = 3: kertoimet(2) = 1

    'tarkistetaan annetun numerosarjan pituus ja sisältö
    If (sarjanPituus < 1 Or sarjanPituus > 19) Or Not IsNumeric(numerosarja) Then GoTo Viite_Error

        'käydään numerosarja lävitse
        Do While Laskuri < sarjanPituus
            sarjanSumma = sarjanSumma + (Mid(numerosarja, sarjanPituus - Laskuri, 1) * kertoimet(Laskuri Mod 3))
            Laskuri = Laskuri + 1 'laskurin inkrementointi
        Loop

    'lasketaan tarkistenumero (sarjan summasta seuraava täysi kymmen - sarjan summa)
    tarkisteNumero = (10 - (sarjanSumma Mod 10)) Mod 10

    'palautetaan kutsuvaan aliohjelmaan alkuperäinen numerosarja ja tarkisteNumero
    LaskeViite = origSarja & tarkisteNumero

    refnumber = origSarja & tarkisteNumero
    strlen = Len(origSarja & tarkisteNumero)
    ' / Järjestetään 5 merkin ryhmiin

    If strlen > 5 Then
    j = 0
    For i = strlen To 1 Step -1
        j = j + 1
        If j = 6 Then
            outstr = outstr & " "
            j = 1
        End If
        outstr = outstr & Mid(refnumber, i, 1)
    Next
    UusiViite = ""
    For i = Len(outstr) To 1 Step -1
        UusiViite = UusiViite & Mid(outstr, i, 1)
    Next i

    LaskeViite = UusiViite

    End If

    Exit Function

Viite_Error:

    On Error GoTo 0
    Err.Raise vbObjectError + 1001, , "Viitenumeroksi laskettava numerosarja virheellinen"
    LaskeViite = ""
    Exit Function

End Function

maanantai 9. helmikuuta 2015

VB.net - Tietojen vieminen Excel.CSV tiedostoon

Excelin CSV- muotoiseen tauluun voi viedä VB.net koodissa dataa. Esim. puolipisteellä erotellaan arvot toisistaaan. Jos haluat viedä yhteen Excel soluun dataa, joka sisältää puolipisteen, se on tehtävä näin hankalan näköisesti:

ExcelSolu = """" & EkaMuuttuja & ";" & TokaMuuttuja & """"