Sietoebie
Software solutions and questions blog-
Excel en #N/B (#N/A)
Posted on January 28th, 2010 No commentsIn excel vind ik het een vies gegeven dat we een #N/B = niet beschikbaar(in het Engels een #N/A = not available) waarde terugkrijgen. Hierdoor worden eventuele verdere functies zoals sommen niet mooi afgemaakt.
De fout komt er doordat bvb een vertikale opzoeking geen resultaat oplevert.
De weergave van de #N/B kan onderdrukt worden dmv de functie ISNBBvb:
=ALS(ISNB(VERT.ZOEKEN(B5;'[MyOtherExcelSheet.xls]Pagina1'!$A$3:$B$212;2;0));"";VERT.ZOEKEN(B5;'[MyOtherExcelSheet.xls]pagina1'!$A$3:$B$212;2;0))In excel 2007 kan je gebruik maken van
als.fout(VERT.ZOEKEN(B5;'[MyOtherExcelSheet.xls]Pagina1'!$A$3:$B$212;2;0));"") -
Een modale messagebox
Posted on September 7th, 2009 No commentsDe msgbox functie in Visual Basic is modaal.
Uw programma zal niet verder gaan zolang de gebruiker geen interactie had met het programma dmv het antwoord te geven.Niet handig dus als je bvb met timers werkt die tijdsgebonden zijn.
Stel dat in dit geval de msgbox niet weggeklikt wordt dan blijft het programma gewoon hangen.De oplossing die ik hiervoor gebruik is om de msgbox op een nieuw form te laten verschijnen. Retourwaarden van de msgboxfunctie kunnen makkelijk aan het oproepende formulier doorgegeven worden. O ja, en zo kun je eventueel zelf de layout van je msgbox gaan bepalen. Design maar eens een form met enkele buttons (bvb ja/nee) en een label erop waarop de vraag ingevuld werd.
-
Mollom, een wordpress antispam plugin
Posted on March 26th, 2009 No commentsMet de nieuwe look van dit blog heb ik ook een nieuwe antispam geïnstalleerd.
Af en toe liet askimet hier nog eens een spambericht tussen de mazen van het net glippen en aangezien Mollom ontworpen bent door iemand die ik persoonlijk al mocht ontmoeten was mijn keuze snel gemaakt. -
Spelen met Firefox
Posted on March 25th, 2009 No commentsGebruik je ook firefox als favoriete browser? Dan vind je hier enkele tips om firefox te optimaliseren.
-
Update eID middleware
Posted on December 10th, 2008 No commentsFenomeen: Bepaalde eID’s worden niet meer ingelezen door de software.
Oorzaak: Recent werden de certificaten van de overheid hernieuwd. Oude eID software, die deze certificaten nog niet kent, zal de nieuwe eID kaarten niet (h)erkennen.
Oplossing: Upgraden naar eID MW v3.5. bijv via QuickInstaller -
XSD en XML
Posted on December 4th, 2008 No commentsIk zit al een tijdje te zwoegen op het inlezen van een XML bestand dat moet voldoen aan de normen van een XSD bestand.
Ik doe dit in VB6.0Als ik mijn variabelen als volgt declareer :
' maak een referentie naar microsoft xml4.0 (project - references)
' declareer variabelen
Dim sSchemaFile As String
Dim sWorkFile As String
sSchemaFile = txtSchemaPath.Text
sWorkFile = txtPath.Text
Dim schemaCache As MSXML2.XMLSchemaCache40
Set schemaCache = New MSXML2.XMLSchemaCache40
' toevoegen van de namespace aan de schemacache
schemaCache.Add "http://mijnnamespace.be/xml", sSchemaFile
Dim xml_document As MSXML2.DOMDocument40
Set xml_document = New MSXML2.DOMDocument40
Set xml_document.Schemas = schemaCache
Dan wordt de XML file getoetst door
Set xml_document.Schemas = schemaCacheInlezen van het bestand in onze variabele:
xml_document.async = False
If Not xml_document.Load(sWorkFile) Then
MsgBox "Error - : " & xml_document.parseError.reason
Exit Sub
End IfMaar als ik nu een enkele node of een reeks nodes in een nodeobject wens in te lezen dan krijg ik steeds een ‘Nothing’ als return waarde.
' declareer node objecten
Dim values_node As IXMLDOMNode ' single node
Dim values_nodelist As IXMLDOMNodeList ' nodelijst (array)Set values_node = xml_document.SelectSingleNode("form//contactperson/name") --> Nothing
Set values_node = xml_document.SelectSingleNode("form//contactperson/name") --> Nothing
Ik heb de namespace dan toegevoegd aan de eigenschappen van het xml object (xml_document in mijn geval)
xml_document.validateOnParse = True 'nodig vooraleer we de namespace property instellen
xml_document.setProperty "SelectionNamespaces", "xmlns:x='http://mijnnamespace.be/xml'"We gebruiken x als prefix.
Uitlezen:
Set values_node = xml_document.SelectSingleNode("x:form//contactperson/nom") --> Nothing
' Attributen uitlezen:
Set values_nodelist = xml_document.SelectNodes("x:form//@bedrag") --> array van bedragen
(Tijdelijke) Work around om ook die single node uit te lezen.
' in plaats van naar domdocument40 te refereren:
'Set xml_document.Schemas = schemaCache
Set xml_document = New MSXML2.DOMDocument
'Het xml_document valideren dmv de validate functie
Validate sWorkFile, sSchemaFilePrivate Function Validate(ByVal strXMLPath As String, _
ByVal strXSDPath As String) As BooleanDim objSchemas As MSXML2.XMLSchemaCache40
Dim objXML As MSXML2.DOMDocument40
Dim objXSD As MSXML2.DOMDocument40
Dim strNamespace As String
Dim objErr As MSXML2.IXMLDOMParseError' load XSD as DOM to populate in Schema Cache
Set objXSD = New MSXML2.DOMDocument40
objXSD.async = False
If Not objXSD.Load(strXSDPath) Then
Err.Raise 1, "Validate", "Load XSD failed: " & objXSD.parseError.reason
Else
' get namespace name from XSD targetNamespace attribute
strNamespace = objXSD.documentElement.getAttribute("targetNamespace")
End If' populate schema cache
Set objSchemas = New MSXML2.XMLSchemaCache40
objSchemas.Add strNamespace, objXSD' load XML file (without validation - that comes later)
Set objXML = New MSXML2.DOMDocument40
objXML.async = False
objXML.validateOnParse = False
objXML.resolveExternals = False' load XML, without any validation
If Not objXML.Load(strXMLPath) Then
Err.Raise 1, "Validate", "Load XML failed: " & objXML.parseError.reason
End If' bind Schema Cache to DOM
Set objXML.Schemas = objSchemas' does this XML measure up?
Set objErr = objXML.Validate()' any good?
Validate = (objErr.errorCode = 0)
If objErr.errorCode <> 0 Then
Err.Raise 1, "Validate", objErr.reason
End IfEnd Function
En dit werkt dus wel. Ook al vind ik het maar een beetje viesjes.
-
Openen van een visual basic project
Posted on November 27th, 2008 No commentsAls je een Visual Basic project opent, is de kans groot dat al de forms die je de laatste keer bezoek bewerkt hebt, zich openen in de Editor.
Ik ben voorstander om een project te openen in een cleane werkomgeving.
Om dat te doen volstaat het om het vbw (Visual Basic Workspace) bestand van het project read only te maken.
Open het vbw bestand met een externe editor (vb notepad). Verwijder al de tekst die in het bestand staat en maak er een read only bestand van.Als je nu de volgende keer jou visual basic project opstart, zal de editor geen forms meer openen.
-
Werken met een inifile
Posted on October 31st, 2008 1 commentIn het ‘oude’ visual basic werkte ik regelmatig met een inifile waarin veel settings stonden.
Omdat ik af en toe wel bezoek over de vloer krijg met als zoektermen visual basic6 of bestanden + visual basic geef ik hier graag de werkwijze weer om gegevens van en naar een inifile te schrijven.Declaratie van functies:
Declare Function GetPrivateProfileString Lib "kernel32" Alias _
"GetPrivateProfileStringA" (ByVal lpApplicationName _
As String, ByVal lpKeyName As Any, ByVal lpDefault _
As String, ByVal lpReturnedString As String, ByVal _
nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias _
"WritePrivateProfileStringA" (ByVal lpApplicationName _
As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Gegevens uit een inifile halen:
Public Function sGetINI(sINIfile As String, sSection As String, sKey _
As String, sDefault As String) As StringDim sTemp As String * 256
Dim nLength As IntegersTemp = Space$(256)
nLength = GetPrivateProfileString(sSection, sKey, sDefault, sTemp, _
255, sINIfile)
sGetINI = Left$(sTemp, nLength)End Function
Gegevens naar een inifile schrijven
Public Sub writeINI(sINIfile As String, sSection As String, sKey _
As String, sValue As String)Dim n As Integer
Dim sTemp As StringsTemp = sValue
'Replace any CR/LF characters with spaces
For n = 1 To Len(sValue)
If Mid$(sValue, n, 1) = vbCr Or Mid$(sValue, n, 1) = vbLf _
Then Mid$(sValue, n) = " "
Next nn = WritePrivateProfileString(sSection, sKey, sTemp, sINIfile)
End Sub
-
De eindeloze wordpress login loop
Posted on October 21st, 2008 No commentsOp mijn to do lijstje stond al een tijdje (met stip) dat ik voor dit blog de eindeloze login loop diende op te lossen. De eindeloze login loop kwam er nadat ik wordpress upgrade naar 2.6.2. Username en paswoord invullen en ik kwam terug op hetzelfde login scherm uit.
Zo tussen de soep en patatjes door ging ik dan eens googelen maar niets kon mij echt helpen. Temeer de mogelijke oplossingen steeds wezen naar een fresh install. En daar had ik niet echt zin in.Toen ik eraan dacht dat ik de plugins niet gedeactiveerd had bij het upgraden naar 2.6.2 begon er zowaar een lichtje branden.
Wat zou er gebeuren mocht ik nu, manueel, in de database de plugins deactiveren.
Via het phpMyAdmin panel ging ik dus op zoek naar de actieve plugins.
Ik dacht dat het wel in mijn wp_options te vinden zou zijn dus keerde ik die tabel binnenstebuiten.
En daar kwam ik het veld active_plugins tegen. Dat veld bevatte enkele waarden. Dus dacht ik, ik ga ervoor en ga dat veld leegmaken. Opslaan en dan terug proberen inloggen.
En kijk, ik kreeg de melding dat de database een upgrade diende te ondergaan en even later was ik deze post aan het schrijven.[tags]wordpress, login loop, phpmyadmin[/tags]
-
Een recordset snel naar excel exporteren
Posted on September 24th, 2008 No commentsMet visual basic kan je natuurlijk door een ganse recordset loopen en record per record naar excel gaan wegschrijven.
Gemakkelijker gaat het als je de recordset in één keer, in zijn geheel exporteert naar excel.
Dim RS As New ADODB.Recordset
CREATERECORDSETONSERVER RS, dbOCMW ' function to create a recordset on the serversideRS.Open "select * from MyQuery where jaar = " & cmbJaar.Text
'Start a new workbook in Excel
Dim oApp As New Excel.Application
Dim oBook As Excel.Workbook
Dim oSheet As Excel.WorksheetSet oBook = oApp.Workbooks.Add
Set oSheet = oBook.Worksheets(1)'Add the field names in row 1
Dim i As Integer
Dim iNumCols As IntegeriNumCols = RS.Fields.Count
For i = 1 To iNumCols
oSheet.Cells(1, i).Value = RS.Fields(i - 1).Name
Next'Add the data starting at cell A2
oSheet.Range("A2").CopyFromRecordset RS'Format the header row as bold and autofit the columns
With oSheet.Range("a1").Resize(1, iNumCols)
.Font.Bold = True
.EntireColumn.AutoFit
End WithoApp.Visible = True
oApp.UserControl = True'Close the Database and Recordset
RS.CloseIn a module we have
Sub CREATERECORDSETONSERVER(rs)
Set rs = New ADODB.Recordset
rs.ActiveConnection = db ' is the active connection with the database
rs.CursorLocation = adUseServer
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
End Sub
[tags]visual basic, excell, microsoft office[/tags]



Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.