Volledig offtopic uiteraard, maar toch:
Dat je het zelden ziet maakt het geen slechtere code.

DE VBA interpreter is gewoon erg vergevingsgezind.
Visual Basic:
1
2
3
4
5
| Dim a as string, b as long
a = "2"
b = 3
debug.print a+1 '?!!
Debug.Print a * b '??!! |
compileert gewoon en geeft als antwoorden 3 en 6. Als je daar aan gewend raakt wordt de overstap naar een striktere taal erg wennen en het helpt ook niet echt bij een beter begrip van wat je aan het doen bent...
code:
1
2
3
4
| Dim cl as Range
Set myrange = Range("A1:E100")
for each cl in myrange
.... |
Is op de keeper beschouwd onzin. Een range is een object en is niet enumereerbaar. Maar de interpreter snapt (dankzij default members) dat je met range("A1:E100") Activesheet.Range("A1:E100") bedoelt en daarvan graag alle items wilt hebben om te enumereren. Het werkt, het is korter te schrijven, maar mooi? Nah. Hetzelfde zie je met het rare:
code:
1
2
| Dim s as string
s=range("A1") |
Huh: een rangeobject wordt aan een string toegewezen? Dat kan natuurlijk niet. De interpreter pakt ook hier het defaultproperty .value, zet die gratis voor je om naar tekst (ook al staat er een datumwaarde of een double in) en kent die toe aan de string. Soms gaat het wel mis en dan is het lastig troubleshooten of je krijgt performanceproblemen. Neem bv het scenario waarin je een rangeobject van columns gebruikt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
| Dim c As Excel.Range
Dim columnRange As Excel.Range
Set columnsRange = ThisWorkBook.Worksheets("exampleSheet").Range("B2:C3").Columns
For Each c In columnsRange
Debug.Print c.Address 'Prints "$B$2:$B$3", "$C$2:$C$3"
Next
For Each c In columnsRange.Cells
Debug.Print c.Address 'Prints "$B$2", "$C$2", "$B$3", "$C$3"
Next |
Je kunt maar beter schrijven wat je wilt.
code:
1
2
3
4
| dim a
set a= range("A1"). 'a bevat het rangeobject A1
a= range("A1") 'a bevat een of andere waarde
a=range("A1").Text 'a bevat een string |
Het is net zoiets als het weglaten van option explicit. Zonder dat compileert het net zo goed, met option explicit dwing je jezelf nauwkeurig te werken en te denken, en dat resulteert meestal in betere code.

Default properties? Lijkt handig, maar geef mij maar een strikte taal.
[
Voor 20% gewijzigd door
Lustucru op 07-10-2020 00:24
]
De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland