Doorgaan naar hoofdcontent

Posts

Posts uit 2015 weergeven

Excel: Tijdlijn, nieuw voor draaitabellen en draaigrafieken vanaf versie 2013

In Excel 2013 is voor draaitabellen en draaigrafieken een nieuwigheid toegevoegd. De tijdlijn. Buitengewoon handig en zeer visueel.

Ik heb een voorbeeld gemaakt met de tabellen Klanten, Orders en Order details uit de database Noordenwind. In Excel 2013 kun je deze tabellen nu ook aan elkaar koppelen via Relaties, ook een leuke nieuwe functie in deze versie.

Van deze drie tabellen heb ik een draaitabel en een draaigrafiek gemaakt van de omzet per jaar per bedrijf.


Aan deze draaitabel en draaigrafiek ga ik nu een tijdlijn toevoegen.
Klik in de draaitabel of op de draaigrafiek.Klik op Analyseren => Tijdlijn. Er verschijnt dan een dialoogvenster:

De functie stelt automatisch vast in welke kolommen datums staan en biedt deze als keuzemogelijkheid aan. Vink Orderdatum aan. Een tijdlijn wordt dan toegevoegd, door mij hier wat groter gemaakt:

Op deze tijdlijn kunnen we dan een maand of een aaneengesloten periode kiezen (met de SHIFT toets). Draaitabel en draaigrafiek passen zich dan uiteraar…

Excel: mail versturen via outlook met VBA zonder onderbreking

Ik liep van de week tegen een probleem aan met het versturen van e-mail vanuit Excel met VBA via Outlook. Outlook wil dan voor het verzenden van elk mailtje expliciet toestemming hebben. Bijzonder lastig als je een hele serie e-mail wil versturen.

Op internet vind je dan wel oplossingen die je niet veel verder helpen. Normaal gesproken gebruik je een dergelijk script met het Send commando voor de werkelijke versturing:

With OutMail
   .To = email
   .CC = emailcc
   .BCC = emailbcc
   .Subject = "Subject"
   .HTMLBody = "Tekst"
   .Send
End With

Heel veel voorbeelden van scripts zijn te vinden bij Ron de Bruin: http://www.rondebruin.nl/win/s1/outlook/mail.htm

Het is het Send commando evenwel dat toestemming vereist van Outlook. Een alternatief is dan het Display commando in combinatie met Sendkeys:

With OutMail
   .To = email
   .CC = emailcc
   .BCC = emailbcc
   .Subject = "Subject"
   .HTMLBody = "Tekst"
   .Display
        Application.Wait (Now + TimeValue(…

Access: lint aanpassen met XML en VBA

Aanpak Maak een nieuwe database met de naam Ribbon.
Maak in die database een tabel tblRibbon met de volgende velden:


Stop het volgende XML script in het veld RibbonXML.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="true">
<tabs>  
<tab idMso="TabHomeAccess" visible="true" /> 
<tab id="Acties" visible="true" label="Mijn Tab"/>
</tabs>
</ribbon>
</customUI>

Met startFromScratch="true" geven we aan dat we met het lint met een schone lei willen beginnen. TabHomeAccess verwijst naar de tab Start. Die laten we zien. Verder komen we met een nieuwe, eigen tab die als id Acties heeft en als label Mijn Tab.

Type de naam HesselKoert in het veld RibbonName.
Sluit de tabel tblRibbon.

Maak een formulier met de naam frmstart.
Plaats achter de gebeurtenis Bij openen de volgende VBA code:

Private Sub Form_Open(Cancel As Integ…

Report Builder: Filtering Records With An Empty (NULL) Field

A short while ago, I got the request to filter on a field which contained, beside regular values, also NULL values. They wanted to be able to filter on NULL values as well as regular values. Choosing multiple values should be an option as well.

The direct functionality of Report Builder did not offer me a solution. SQL was needed.

My example is based on the Northwind database of SQLServer.

I created two datasets. dsRegion provides thedata for the parameter parRegion. The SQL looks like this:

SELECT region FROM customers
UNION
SELECT ' Empty' 
ORDER BY region

Before ' Empty' I have put a space to get it at the top when sorted.

The parameter looks like this:


Allow multiple values is checked. Available Values is just the region in the Value field.

The SQL for the second dataset, dsCustomer, looks like this:

SELECT *
FROM
  Customers
WHERE ISNULL(region,' Empty')  IN (@parRegion)

Mind the space before Empty.

Now, the solution is there. It is possible to filter the records w…

Excel: performance of hoe optimaliseer ik grote spreadsheets III

Onderzoek bij een groot bedrijf: Excel binnen netwerk Na een onderzoek bij een groot bedrijf in Zwolle naar performance problemen bij het gebruik van Excel, is me eens te meer duidelijk geworden dat we onderscheid moeten maken tussen de performance van losse spreadsheets en de performance van Excel in een netwerkomgeving met veel gebruikers.

In dit geval is er sprake van een Citrix omgeving. Probleem hier is dat diverse servers regelmatig onderuitgehaald worden het gebruik van Excel. De oorzaken waren niet duidelijk.
Bevindingen Na onderzoek blijkt Excel door een beperkt aantal mensen met enige regelmaat gebruikt te worden voor het analyseren van zeer grote hoeveelheden data (tot wel een miljoen regels). Gevolg: zeer grote bestanden met flinke aantallen berekeningen. Zowel laad- als opslagtijd lopen dan flink op. Ook het herberekenen van formules leidt tot een forse piekbelasting. Binnen de Citrix omgeving ondervinden andere gebruikers hier flink last van.
AanbevelingenExcel is in de…

Access: koppelen aan tabellen uit de SQL Server

Access kan zijn gegevens ook aan een externe database ontlenen. Hier gaan we bekijken hoe we Access kunnen koppelen aan de SQL Server.

Allereerst hebben we een ODBC koppeling naar de juiste database in SQL Server gemaakt.

Vervolgens kiezen we in Access de tab EXTERNE GEGEVENS.
Dan kiezen we ODBC-database.

We krijgen:



We klikken de onderste optie aan.
We klikken op OK.

We krijgen:



We kiezen Computergegevensbron.
We kiezen daar de juiste Data Source Name.
Hier kiezen we in ons geval Noordenwind.

We krijgen dan:



We kiezen daar de bovenste acht tabellen.
We klikken dan op OK.

Het volgende dialoogvenster verschijnt dan:



Het is van belang dat we hier een uniek record-id kiezen. Doen we dit niet, dan zijn de tabellen niet bij te werken in Access!

Kies voor elke tabel een unieke sleutel en klik op OK.

Als we dit proces volttoid hebben, verschijnen alle gekoppelde tabellen in Access.



Desgewenst kunnen we de namen van de tabellen nog aanpassen door bijvoorbeeld dbo_ weg te halen. Dit …

Excel: Which Graph To Show?

The question is how can somebody just pick the graph he/she wants to see without seeing the other graphs? Nice to have for your Excel dashboard.

Something like this:


How did I do this?

I created one sheet called graphs with three different graphs. Then I created three names One, Two and Three referring to a range containing the graphs One, Two and Three respectively. Like this:

one = graphs!$G$1:$O$16
two = graphs!$G$17:$O$33
three= graphs!$G$33:$O$48

On a second sheet called whichgraphtoshow in cell A2 I then created a picking list containing one, two and three.
Yet another name refers to this cell:
graphLookup=INDIRECT(whichgraphtoshow!$A$2)
On the same sheet I then inserted a picture. The picture refers to the name graphLookup
And it is all working!

You can download ExcelWhichGraphToShow.xlsx via:

https://drive.google.com/folderview?id=0B7HgkOwFZtdZVmhRQUZFM28yc1U&usp=sharing

Excel: performance of hoe optimaliseer ik grote spreadsheets II

Excel en performance Ik krijg de laatste tijd herhaaldelijk verzoeken om een blik te werpen op Excel spreadsheets die te traag en onhandelbaar zijn geworden. Men vraagt mijn dan als VBA expert, maar is VBA altijd de (enige) oorzaak?

Laten we eens de factoren op een rijtje zetten die invloed hebben op de snelheid.

Grootte van het bestand. Dit is misschien wel de belangrijkste factor. Zodra een bestand erg groot wordt, kan het opslaan en openen erg lang gaan duren. Het XML formaat heeft bestanden weliswaar flink verkleind, maar tegelijkertijd is het grotere aantal rijen en kolommen ook een uitnodiging geweest nog veel meer gegevens op ter nemen.

Herkomst van de data. Data kunnen verschillende herkomst hebben, bijvoorbeeld:

In Excel zelf; voorbeeld 121.317 regels uit SalesOrderDetail van AdventureWorks: grootte 9.625 kb.Koppeling met een ander Excel bestand.Via Microsoft Query en ODBC; voorbeeld 121.317 regels uit SalesOrderDetail van AdventureWorks: grootte 9.414 kb.Via Power Query en S…

DATA: VAN DATA NAAR RAPPORT: EEN CHECKLIST

1Inleiding Als we een rapport moeten maken, ligt de focus vaak vooral op de uitkomst van de analyse en de presentatie daarvan. Allerlei andere zaken die noodzakelijk zijn voor een rapport, komen vaak gedurende het maakproces aan de orde. We gaan deze zaken hier onder de loep nemen.
2De toegankelijkheid van de data Het is een basisvoorwaarde voor een rapport dat de data beschikbaar en analyseerbaar zijn.

Waar komen de data vandaan?
Data kunnen uit diverse bronnen komen. Ze kunnen opgeslagen liggen in databases, in losse bestanden zoals Excel en bestanden in CSV formaat, van webpagina’s komen of zelfs los verzameld moeten worden.

Hebben we directe toegang tot de data? 
Data kunnen opgeslagen liggen in databases van derden waarbij het de vraag is of we rechtstreeks bij deze data kunnen of dat het indirect moet gebeuren via koppelingen (zoals ODBC) of exportbestanden (zoals CSV, EXCEL).

Hebben we een overzicht van de structuur van de data?
Als data niet direct toegankelijk zijn, bijvoorb…

Friesland: oude grafzerken in de kerk van Wolsum weer tevoorschijn

Kerk van Wolsum De huidige kerk van Wolsum is gebouwd in 1867. De kerk is de vervanger van een middeleeuws exemplaar. Van deze middeleeuwse kerk is een tekening uit het jaar 1703 bewaard gebleven.


Uit deze oude kerk is een aantal eeuwenoude grafzerken overgebleven. In 1962 zijn er door Harmen de Vries foto's genomen van deze oude zerken. De teksten van deze zerken zijn om onbekende reden nooit eerder gepubliceerd. Nu ligt de vloer opnieuw open; het interieur van de kerk wordt momenteel gerestaureerd.

Op 23 september 2015 zijn een aantal leden van de grêfskriftekommisje in de kerk geweest om de huidige stand van de zerken te inventariseren. Dit heeft het volgende opgeleverd.
De familie Remstra1. Een grote steen van de familie Remstra, genoemd naar het gehucht Remswert.

Foto Melle Koopmans

Op deze steen de volgende teksten:

Mary Sybrens huisvrouw van Lieuwe Uijlkes leit hier begraven

Dese vier graven naest malkander die zullen niet mogen geopent worden voor het iaer 1812

Anno 1712 den …

Access: Smart Object Names Combined With Smart VBA Functions

Introduction When I create object in Access I try to be as consistent as possible. For instance, when I create a table containing customers, I create names like this:

Object Name Table tblCustomers Form frmCustomers Query qryCustomers Command button cmdCustomers
It is not just that I like the Hungarion Notation (invented by Simonyi Károly from Hungary), it also enables me to use smart functions while programming VBA. Smart Functions For instance when I create a command button which should lead me to the form frmCustomers, I call the command button cmdCustomers. After that I attach a function to the On Click event:

Because it refers to the active control, it will automatically transfer the name of the command (cmdCustomers) tot the function cmdCommandClick.
The VBA of the function cmdCommandClick looks like this:
Public Function cmdCommandClick(strFrmName As String)      DoCmd.OpenForm "frm" & Mid(strFrmName, 4) End Function
So, now I can easily copy such a command button, change the…

Access: Overcoming The Max Length (64) of DoCmd.TransferText

The Problem The other day I ran into a problem with DoCmd.TransferText: it will not accept text files having longer names that 64 characters. Possibly, because 64 characters is the maximum length of an object name in Access.

You will get an error message:



So I tried to find a work around.
My Work Around First, I created a table in Access to store information about the text files, in this particular case, CSV files.
The I created a VBA script which actually store the information in the table
strMapCSV = CurrentProject.Path & "\"
Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(strMapCSV)
For Each f1 In f.files  If Right(f1.Name, 3) = "csv" And Left(f1.Name, 4) <> "file" Then    strSQL = "insert into tblCSVfiles (CSVname, CSVsize,CSVdate,CSValias) "    strSQL = strSQL & " VALUES ('" & Replace(f1.Name, "'", "`") & "'," & f1.Size & ", #…

Friesland: Skeeler Elfstedentocht 2015

Het elfstedenregister Iedereen die een elfstedentocht zoals op de skeelers heeft volbracht, kan zich aanmelden bij mijn elfstedenregister. De skeeler-elfstedentocht groep Iedereen die meegedaan heeft aan of geïnteresseerd is in de tocht kan zich aansluiten bij de groep. De voorbereiding Vorig jaar heb ik de elfstedentocht gewandeld en met de kano afgelegd. Dit jaar stond voor mij in het teken van de stepelfstedentocht. Die wilde ik halen en dat is gelukt.

Maar dan was er ook nog de skeeler elfstedentocht op 29 augustus ... Dat zou mijn vijfde verschillende elfstedentocht kunnen worden.

Ik heb sinds 1997 duizenden kilometers geskeelerd. Misschien wel zo'n 25.000 totaal. Qua techniek geen probleem. De afgelopen jaren heb ik onder andere door de training voor de andere elfstedentochten weinig kilometers op de skeelers gemaakt. Zou dit zowel lukken?

Bartlehiem skeelertocht 10 jaar geleden

Eind mei, direct na het halen van de stepelfstedentocht heb ik nieuwe skeelers gekocht met wielen…