Typen komen niet overeen

Status
Niet open voor verdere reacties.

Joop555

Gebruiker
Lid geworden
8 jun 2012
Berichten
16
datum = Workbooks("bestand.xls").Worksheets("blad1").Cells(4, 2)
(In mijn geval is datum nu 26)
a = 5
datumaantal = datum + " " + a + " x"

Nu hoop ik te krijgen: 26 5 x

Op een of andere manier gaat er iets fout en geeft hij de volgende melding:
fout 13 tijdens uitvoering:
Typen komen niet met elkaar overeen.

Als ik alleen invoer:
datumaantal = datum
geeft hij wel de waarde 26 voor datumaantal
Wie weet waarom het hier fout gaat en hoe ik dit kan voorkomen?

Joop
 
Wampier bedankt, het werkt op deze manier wel.
Kan iemand uitleggen wanneer je + en wanneer & moet gebruiken?

Gr. Joop
 
De oplossing is normaal niet zo strikt. + betekend optellen & betekend aan elkaar plakken.

Het probleem ligt in het feit dat mensen typen vaak niet definiëren in VBA. Wanneer je "datumaantal" specifiek definieert als "string" hoeft VBA niet te gokken wat je wil. Een & impliceert een string en daarom kiest VBA het juiste type zonder definitie. bij een + wil je blijkbaar iets optellen. je telt een getal bij wat tekens op. VBA is nu in de war over wat je wilt bereiken en geeft de 13 error.
 
Wampier
Bedankt voor je uitleg. Het definieren van de typen doe ik niet zo strikt, vandaar dus af en toe die conflicten. Moet eens goed uitzoeken hoe ik alles moet noemen, want ik zou een getal weer definieren als integer, terwijl jij nu over string hebt.
Maar ben blij dat ik nu weet waar ik het moet zoeken.
Thanx.
 
Datumaantal is een string. datum is een long of double. (integer moet je eigenlijk niet gebruiken in VBA omdat het backwards compatible is gehouden met 16-bits)

je originele voorbeeld datumaantal = datum + " " + a + " x" is voor VBA:

??? = long + string/byte + long + string

met concat (&) is het resultaat automatisch een string:

string = string(long) & string & string(long) & string

Stel je hebt:
??? = 10 + 20

Het resultaat hiervan is een "long" met waarde 30

??? = 10&20
het resultaat hiervan is een string met waarde 1020

Het verschil is echter als je eerst definieert:
string = 10 +20
het resultaat is een string met waarde 30
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan