Range Selectie op basis van Kolomnummers werk niet / Waarom?

  • Onderwerp starter Onderwerp starter Wocky
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Wocky

Gebruiker
Lid geworden
22 feb 2014
Berichten
192
Beste,

Kan iemand mij vertellen waarom onderstaande 1ste code-blok niet werkt?
Maar de volgende 2 codeblokken wel werken?
In het 1ste code-blok refereer ik naar een eigen gemaakt range-object.
In het 2de code-blok refereer ik naar een range-object die ik niet zelf heb gemaakt
In het 3de code-blok refereer ik naar een eigen gemaakt range-object.

Alvast bedankt
Wocky

Ik krijg volgende foutmelding
Knipsel.PNG

Deze Code Werkt Niet
Code:
Sub TestRange()
    Dim LaatsteRij As Long
    Dim laatsteKolom As Long
    Dim MyRange As Range
    
    LaatsteRij = 10
    laatsteKolom = 3
    Set MyRange = Range(Cells(1, 1), Cells(LaatsteRij, laatsteKolom))
    
    MyRange(Columns(1), Columns(3)).Select
    
End Sub

Deze Code Werkt Wel
Code:
Sub TestRange()
    Dim LaatsteRij As Long
    Dim laatsteKolom As Long
    Dim MyRange As Range
    
    LaatsteRij = 10
    laatsteKolom = 3
    Set MyRange = Range(Cells(1, 1), Cells(LaatsteRij, laatsteKolom))
    
    Range(Columns(1), Columns(3)).Select
    
End Sub

Deze Code Werkt Wel
Code:
Sub TestRange()
    Dim LaatsteRij As Long
    Dim laatsteKolom As Long
    Dim MyRange As Range
    
    LaatsteRij = 10
    laatsteKolom = 3
    Set MyRange = Range(Cells(1, 1), Cells(LaatsteRij, laatsteKolom))
    
    MyRange.Select
    
End Sub
 
Je hebt de range toch al ingesteld. Het lijkt me dan onzinnig om er nog een keer een Range mee aan te duiden.
 
De vraag is vooral "waarom" hier een foutmelding komt...

Het is niet altijd onzinnig, aangezien in code-blok 2, de volledige Kolommen worden geselecteerd, terwijl "MyRange" slechts tot Rij 10 gaat.
Het doel is om een bereik te kunnen aanduiden met kolomnummers, in een gedefinieerde range.
In dit voorbeeld selecteer ik alle kolommen, maar kan evengoed kolom 2 tot 3 zijn bvb.

Groeten Wocky.
 
Laatst bewerkt:
Laat ik het anders formuleren. In VBA is "Range" toch bedoeld om een range mee aan te duiden. Waarom maak je dan zelf een variabele aan waarmee je dit wilt doen?

En het waarom? Bij een Rangevariabele kan je volgens mij niet simpelweg de range erachter zetten, maar zal je, zoals in jouw derde blok hebt gedaan, deze eerst moeten instellen en daarna kan je er mee aan de slag.
 
Beste,

Ben niet helemaal mee...
In m'n eerste blok heb ik toch ook MyRange ingesteld?

Ik ben zelf niet echt een pro, maar lijkt me toch handig als je een Range in een Range-Variabele stopt, dat dit dan gemakkelijk moet zijn om kolommen hiervan te kunnen selecteren, op basis van hun kolomnummer?

Groeten wocky.
 
Misschien heeft de fout te maken met de manier waarop ik "MyRange" heb aangeduid...

Aangezien de "hint" een andere syntax geeft bij "MyRange" tov "Range"...

Afbeelding "Range"
1.jpg

Afbeelding "MyRange"
2.jpg

Groeten Wocky
 
Wat is de bedoeling van dit al?
Code:
Sub VenA()
  Set MyRange = Cells(1).Resize(10, 3)
  MsgBox Union(MyRange.Columns(1), MyRange.Columns(3)).Address
End Sub
 
De bedoeling is enkel het kolombereik selecteren van de range die werd aangeduid.
Maar ik weet hoe het kan, maar ik vraag me alleen af waarom ik die foutmelding krijg.
Wat is de reden waarom het niet lukt zoals in code-blok 1.

En ik stel die vraag, om te begrijpen waarom het niet werkt, en dus vba beter te begrijpen.

Ik begrijp niet waarom krakdezelfde syntax wel werkt als je gewoon "Range" typt.
Terwijl als je "MyRange" definieert als "Range", waarom het dan niet werkt als je "MyRange" typt.

Groeten Wocky
 
Het werkt niet omdat je een verkeerde syntax gebruikt.

Code:
MsgBox Range(MyRange.Columns(1), MyRange.Columns(3)).Address
 
Ok thanks (toevallig net ook ontdekt).
Maar... waarom mag je in de 1ste "Range" niet "MyRange" gebruiken?

Ik krijg foutmelding dat de "typen" niet overeenkomen.
Ik leid hier uit af dat "Range" & "MyRange" dan niet hetzelfde type is...

Kan je hier meer uitleg over geven wat het verschil juist is?

Alvast bedankt.
Wocky
 
Met set myrange creëer je een nieuw range object. Je hebt dus range nodig om gegevens uit dit object te halen. Klinkt best logisch toch?
 
Hoe ik het had begrepen was:

Voor onderstaande code:
Je bepaald een nieuw bereik via het object "Range".
"Range" is in dit geval nog niet bepaald, maar je bepaald het via 2 grenzen (bereik1 & bereik2).
Bereik1: (linkse grens) in dit geval een kolom van een eerder bepaald bereik (MyRange), maar kan evengoed een cel zijn (bvb "A1")
Bereik2: (rechtse grens) ... zelfde uitleg als bereik1
Code:
Dim MyRange As Range
Set MyRange = Range(Cells(1, 1), Cells(LaatsteRij, LaatsteKolom))

'''''uitleg gaat over deze lijn code'''''
Range(MyRange.Columns(2), MyRange.Columns(3)).Select
'''''uitleg gaat over deze lijn code'''''
Voor onderstaande code:
Je bepaald een nieuw bereik.. deze keer niet via het object "Range", maar via het object "MyRange".
"MyRange" is in dit geval al wel bepaald, maar je bepaald een gedeelte van "MyRange" via 2 grenzen (bereik1 & bereik2).
Bereik1: (linkse grens) in dit geval een kolom van een eerder bepaald bereik (in dit geval hetzelfde bereik (object) als waarmee je aan het werken bent(MyRange)), maar kan evengoed een cel zijn (bvb "A1")
Bereik2: (rechtse grens) ... zelfde uitleg als bereik1
Code:
Dim MyRange As Range
Set MyRange = Range(Cells(1, 1), Cells(LaatsteRij, LaatsteKolom))

'''''uitleg gaat over deze lijn code'''''
MyRange(MyRange.Columns(2), MyRange.Columns(3)).Select
'''''uitleg gaat over deze lijn code'''''

Maar.. nu zeg je me dat de "Range" die je gebruikt vooraan de syntax.. eerder een "actiecommando" is, waarmee je dan vervolgens een bereik kan halen, uit een eerder gedefineerde range (MyRange)...

I'm confused...
Groeten Wocky.
 
Of...
Bepaal je met de code
Code:
Set MyRange = Range(Range1,Range2)

Een instantie van de klasse Range

En met de code (die dus niet werkt)
Code:
MyRange (Range1,Range2)

Is mijn bedoeling een nieuwe instantie te bepalen.. maar dit lukt niet.
Wacht... heb 'm

Deze code werkt wel
Code:
MyRange.Range(MyRange.Columns(2), MyRange.Columns(3)).Select

Dus ik maakte de fout dat de argumenten van "Range" & "MyRange" niet dezelfde zijn.
Namelijk "Range" vraagt 2 rangen "bereiken",
maar "MyRange" vraagt 2 index-nummers(rij & kolom)... Waarom vraagt die 2 index-nummers?.. is de volgende vraag dan.

Groeten Wocky
 
Laatst bewerkt:
Ik denk dat ik het door heb.
Verbeter mij als ik fout zit aub.

als je onderstaande syntax gebruikt, spreek je de Range-"Eigenschap" van de actieve worksheet aan.
Deze Range eigenschap gebruikt "Cellen" (andere ranges) als argument... en geeft een Range"Object" als resultaat.
Code:
Range(cell1,cell2)
of
Application.Range(cell1,cell2)

Application stelt in dit geval de active worksheet van de applicatie voor

Als je onderstaande syntax gebruikt, spreek je een volledig nieuw bepaald Range-"Object" aan.
Een Range-"Object" gebruikt rij- & kolomindex als argument... en geeft ook een Range"Object" als resultaat (een enkele cel)
Code:
Myrange(Rowindex,Columnindex)

Heb ik het door?

Groeten Wocky
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan