Archief - VBA vraagje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ByTEsPaWn

Legacy Member
Ik heb een klein vraagje over Visual Basic in Excell (kga het niet op het programmeerforum zetten omdat het zo verschrikkele basis is).
Ik wil een array met 2 variabelen declareren, waarvan het bereik onbekend is. Dus bv:
Dim Array(A, B) As String
...waarbij A en B onbekend zijn, hoe doe ik dit? Opzoekwerk op internet levert me iets wat ik ook al geprobeerd heb omdat het logisch klinkt, namelijk:
Dim Array( , ) As String
Als ik dit probeer krijg ik echter een foutmelding:
Compileerfout:
verwacht: expressie

De komma tussen de haakjes word geslecteerd.
Ik weet echt niet hoe ik dit kan gaan oplossen, iemand een idee?

TiZon

Legacy Member
Dim f(1,1) 'bovenaan

'rest van programma hier

ReDim f(g1,g2)

Of toch zo iets :)

daVinci

Legacy Member
Eerst en vooral is Array een voorbehouden woord binnen Excel VBA, en kan je dus niet zonder problemen een variabele maken met die naam. Daarom uw naar wijzigen in bv. arrTest.

De declaratie is dan als volgt.

Dim arrTest() as string

Later in uw code Redim gebruiken of Redim Preserve als de waarden dienen behouden te
worden.
Weet wel dat enkel de laatste dimensie vergroot of verkleind kan worden binnen Excel VBA.
Je kan enkel de grootte veranderen, niet het datatype van de Array behalve als deze als Variant is gedeclareerd.


Uittreksel uit Excel VBA help:

Met het sleutelwoord Preserve kunt u alleen de laatste matrixdimensie wijzigen. U kunt het aantal dimensies in het geheel niet wijzigen. Als de matrix bijvoorbeeld slechts één dimensie heeft, kunt u de grootte van deze dimensie aanpassen omdat dit de laatste en enige dimensie is. Als de matrix echter twee of meer dimensies heeft, kunt u alleen de grootte van de laatste dimensie wijzigen en toch de inhoud van de matrix behouden. Het volgende voorbeeld geeft aan u hoe de grootte van de laatste dimensie van een dynamische matrix kunt wijzigen zonder bestaande gegevens te verwijderen die in de matrix zijn opgenomen.

ByTEsPaWn

Legacy Member
daVinci zei:
Eerst en vooral is Array een voorbehouden woord binnen Excel VBA, en kan je dus niet zonder problemen een variabele maken met die naam. Daarom uw naar wijzigen in bv. arrTest.

De declaratie is dan als volgt.

Dim arrTest() as string

Later in uw code Redim gebruiken of Redim Preserve als de waarden dienen behouden te
worden.
Weet wel dat enkel de laatste dimensie vergroot of verkleind kan worden binnen Excel VBA.
Je kan enkel de grootte veranderen, niet het datatype van de Array behalve als deze als Variant is gedeclareerd.


Uittreksel uit Excel VBA help:

welja ik gebruikte "array" maar als voorbeeld, in de subprocedure zelf gebruik ik de naam "kader". Kzal het eens uitproberen en zien of het werkt.

EDIT: het werkt nog altijd niet, ik krijg een andere foutmelding, maar ik zal even de situatie schetsen.

Het is de bedoeling van het begin van het programma dat er twee woorden ingelezen worden uit het excell werkblad, allemaal geen probleem, maar de grootte van de array is m x n met als m de lengte van het ene woord, en n de lengte van het andere. Dit is een stukje letterlijk gekopieerde code

Code:
Dim reeks1 As String, reeks2 As String, kader(1, 1) As Integer
Dim m As Integer, n As Integer

reeks1 = Cells(1, 1)
reeks2 = Cells(2, 1)
m = Len(reeks1)
n = Len(reeks2)

ReDim kader(m, n)

De foutmelding die ik nu krijg gaat als volgt:
Compileerfout:
Het aantal dimensies van de matrix is al bepaald.

Het vreemde zit hem erin dat bij de foutmelding het hier in het vet aangeduide stukje geslecteerd wordt; ReDim kader(m, n)
Alsof de ", n)" niet meer gelezen wordt?

Ook als ik alles vervang door "0 to m" en "0 to n" blijft het probleem.
Als je de volledige picture wilt weten, de eindbedoeling van het programma is de levenshteinafstand tussen twee woorden bepalen.

daVinci

Legacy Member
Je kan best die kader eerst als volgt declareren.

kader() as integer

ipv

kader(1,1) as integer

ik heb je link niet grondig bestudeerd, maar momenteel tracht je beide dimensie van kader eentje groter te maken dan de lengte van de woorden. nl. van 0 to len(woord). Als dit niet nodig is kan je dit gebruiken: redim kader(1 to m, 1 to n) dan maak je hem zo groot als de woorden.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan