celbereik declareren buiten een procedure

Status
Niet open voor verdere reacties.

aarse011

Nieuwe gebruiker
Lid geworden
2 mrt 2009
Berichten
4
Goedenavond,

Ik probeer een stukje code te schrijven dat middels een aantal knoppen en comboboxen bepaalde rijen in mijn excel sheet verbergt. Dit gaat opzich prima, echter in elke private sub van een knop of combobox start ik nu met een dim bereik en set ik een range voor dat bereik. Dit is bij meerdere private subs dezelfde range.

Als ik vervolgens in mijn excel sheet ergens een rij toevoeg, wijzigen al deze bereieken in mijn VBA code niet, waardoor ik deze voor elke private sub opnieuw moet instellen. Ik hoop dat iemand dit nog volgt.

Wat ik graag zou willen is een range definieren in de declaraties dus buiten een procedure om. als ik daar een constante zou kunnen definieren die een bepaald bereik/range voorstelt dan hoef ik alleen het celbereik van deze constante te wijzigen wanneer er ergens in mijn excel sheet een rij wordt toegevoegd.

Ik heb dit al bij meerdere topics gelezen, echter nog geen oplossing. Als iemand een idee heeft zou dat erg helpen. Bij voorbaat dank, een beginnende VBA gebruiker.
 
Waarom geen bereik een naam geven in Excel, bvb. de naam Bereik verwijst naar A10.

Die schuift mee op bij verwijderen of toevoegen van rijen boven rij 10.

Je gebruikt dat: Range("Bereik") en werkt daarmee verder.

Alternatief:

Code:
Public Const sBereik As String = "A10"

bovenaan in een module plaatsen.

Wigi
 
Bedankt voor de reactie.

Echter krijg ik het nog niet voor elkaar. ik geef opzich de bepaalde range ook wel een naam, echter moet ik dit nu in elke private sub doen.

Zodra ik een range een naam probeer te geven in de declaraties krijg ik een compileerfout en de melding dat "constanten, reeksen met een vaste lengte,....niet zijn toegestaan als openbare leden van objectmodules.

Als voorbeeld onderstaande code. In deze code stel ik rij4 = range (B33:B54"). Dit doe ik voor in totaal 6 verschillende comboboxen in mijn sheet. Als ik vervolgens besluit om in mijn sheet een rij toe te voegen tussen rij 33 en 54 moet ik in mn VB code bij elke sub, de B54 aanpassen naar B55, wat een hoop werk is, vandaar dat ik dit graag al in de declaraties zou kunnen, maar volgens mij kan dat helemaal niet. Iemand een idee?

Code:
Private Sub ComboBox1_Change() 
Dim rij4 As Range        
Set rij4 = Sheets("Basisgegevens").Range("B33:B54")
rij4.Select
Selection.EntireRow.Hidden = True
For Each cell In rij4
If cell.Value = ComboBox1.Value Then
cell.Select
Selection.EntireRow.Hidden = False
End If
Next
end sub

Private Sub ComboBox2_Change() 
Dim rij4 As Range        
Set rij4 = Sheets("Basisgegevens").Range("B33:B54")
rij4.Select
Selection.EntireRow.Hidden = True
For Each cell In rij4
If cell.Value = ComboBox2.Value Then
cell.Select
Selection.EntireRow.Hidden = False
End If
Next
end sub
 
Doet hetzelfde:

Code:
Private Sub ComboBox1_Change() 
  For Each cl In Sheets("Basisgegevens").Range("B33:B54")
    cl.entirerow.hidden=(cl.value=combobox1.value)
  Next
end sub
 
Laatst bewerkt:
Doet hetzelfde:

Code:
Private Sub ComboBox1_Change() 
  For Each cl In Sheets("Basisgegevens").Range("B33:B54")
    cl.entirerow.hidden=(cl.value=combobox1.value)
  Next
end sub

Bedankt voor de tip, heb deze even geprobeerd en hij doet niet helemaal hetzelfde, maar als je in cl.value=combobox1.value het = teken vervangt door <> doet hij inderdaad hetzelfde. :thumb:

Wat me wel erg opvalt is dat de code daardoor veel korter wordt wat netjes is, echter het uitvoeren van de code wordt bij mij trager :confused:

Overigens is dit helaas nog niet echt een antwoord op mijn oorspronkelijke vraag. Iemand nog een suggestie???
 
Je kunt daarvoor natuurlijk ook beter de ingebouwde autofilterfunktie gebruiken

Code:
sheets(1).range("B33:B54").autofilter 1,combobox1.value

En voor variabele gebieden: kijk eens bij currentregion, of usedrange.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan