Category Archives: VBA

Active X controls werken niet meer in excel

Na een update van Windows bleken mijn active x controls in excel niet meer te werken.
Gelukkig is er google.

C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\Word8.0\MSForms.exd

Of course the application (Excel, Word…) must be closed in order to delete this file.

Link naar originele oplossing.

Controle op ISBN met VB(A)

Een ISBN nummer ofte International Standard Book Number bevat net zoals een bankrekening, btw nummer, barcode,… een welomschreven structuur.

De juistheid van het nummer kan men met onderstaande functie controleren.

Function test_isbn(isbn) as boolean
Dim vl_isbn1 As Integer
Dim vl_isbn2 As Integer
Dim vl_isbn3 As Integer
Dim vl_pos As Integer

test_isbn = 0

If IsNull(isbn) Then
Exit Function
End If

If Len(isbn) = 13 Then
If Not IsNumeric(Left$(isbn, 12)) Then
Exit Function
End If
vl_isbn2 = Val(Right(isbn, 1)) ' controlegetal = laaste getal van de isbn

vl_isbn1 = 0
For vl_pos = 1 To 12
If vl_pos Mod 2 = 0 Then
' indien de modulus van de positie 0 is (dus even is, het getal op die positie maal 3)
vl_isbn1 = vl_isbn1 + Mid(isbn, vl_pos, 1) * 3
Else
' is de positie oneven, nemen we de waarde van het getal op die positie
vl_isbn1 = vl_isbn1 + Mid(isbn, vl_pos, 1)
End If

Next vl_pos
' 10 verminderen met de restwaarde van het bekomen getal gedeeld door 10
vl_isbn3 = 10 - (vl_isbn1 Mod 10)

If vl_isbn3 = vl_isbn2 Then
test_isbn = True
End If

End If
End Function

Inputmask in access

Soms is het wel eens noodzakelijk dat er aan een tekstveld een invoermasker (inputmask) wordt toegekend.
Dit zorgt ervoor dat de gebruiker de gegevens op de correcte wijze invoert.
Neem bvb de gegevens van de breedtegraad(Latitude), die dient als “99.999999” worden ingevoerd.
Lat en Lon gegevens kunnen immers gebruikt worden om op de website, in google maps een bepaald icoontje te plaatsen op de gewenste breedte- en lengtegraad.
Standaard wordt een inputmask niet naar de tabel geschreven, een waarde als 51.123456 zal dus als 51123456 opgeslagen worden. Uiteraard kunnen we hier niet mee akkoord gaan.
Plaats hiertoe in het form load event van het formulier onderstaande code:

txtLan.InputMask = “99.999999;0”
De ;0 zorgt ervoor dat het invoermasker als dusdanig zal worden opgeslagen.

Handige sneltoets

Uiteraard heb je als programmeur massa code in jou project.

En je maakt natuurlijk ook gebruik van een library waarin functies staan die vanuit verschillende formulieren worden opgeroepen.

Het is echter niet zo eenvoudig om snel de functie terug te vinden dmv de zoekfunctie.
De combinatie shift F2 kan hierin echt wel handig zijn. Plaats de cursor op het woord waarvan je de definitie wenst te kennen (de identifier, dit kan zowel een functie, sub of declaratie zijn) en druk op Shift en F2.

De cursor zal zich nu verplaatsen naar daar waar de variabele gedeclareerd werd of naar daar waar de functie of subroutine geschreven werd.

Access – Runcode

Als je in een macro het commando runcode opneemt vergeet dan niet de haakjes bij de functie te plaatsen.

Bvb:
Je hebt een functie die ervoor zorgt dat een messagbox opent die vraagt of je het programma wenst af te sluiten.

In een module heb je zodoende een functie Quit_program.

Function Quit_program()
If MsgBox(“Programma verlaten?”, vbInformation + vbYesNo) = vbYes Then
Application.Quit
End If
End Function

De macro (aangemaakt door bvb het Switchboard), roept deze code als volgt op:
Action= Runcode
Arguments= Quit_program()
Bij arguments dus de haakjes niet vergeten na de functie naam. Indien de haakjes niet aanwezig zijn, zal access de functie niet vinden en een foutmelding geven. ‘The object doesn’t contain the Automation object ‘Quit_program’.

Een bookmark in een footnote

In office word is het eenvoudig om bookmarks te plaatsen en die vervolgens dmv VBA van de nodige tekst uit bijvoorbeeld een database te voorzien.
Dit kan in VBA dmv
Dim apWord As New Word.Application
With apWord
With .Selection
.Goto wdGoToBookmark, Name:="MijnBookmarkNaam1"
.TypeText rsTabel!Veldnaam
End With

End With
set apWord = nothing

Maar wat als je een bookmark in een footnote dient te voorzien van dynamische data?

We werken het eerste voorbeeld verder uit:

Dim apWord As New Word.Application
With apWord
With .Selection
.Goto wdGoToBookmark, Name:="MijnBookmarkNaam1"
.TypeText rsTabel!Veldnaam
End With
.ActiveWindow.View.SeekView = wdSeekFootnotes
.Goto wdGoToBookmark, Name:="MijnBookmarkInEenFootnoteNaam1"
.TypeText rsTabel!voetnoottekst
End With
set apWord = nothing