• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

1 VBA button - dezelfde opdracht bij twee aparte ranges

Status
Niet open voor verdere reacties.

dewes86

Gebruiker
Lid geworden
15 nov 2010
Berichten
33
Goedemorgen allemaal,



Ik hoop dat iemand mij kan helpen. Ik werk in een document met verschillende VBA’s en dat werkt precies zoals ik het wil.

Nu heb ik recentelijk het document uit moeten breiden waardoor ik een tab heb moeten toevoegen. Qua lay-out, kolomstructuur en indeling komen deze twee tabs in grote lijnen overeen en mijn doel is nu dat bepaalde VBA’s met 1 button dezelfde opdracht uitvoert op beide tabs. Ik heb twee voorbeelden:



Code:
Private Sub ToggleButton1_Click()

With Range("Mous")

.Select

.EntireRow.Hidden = Not .EntireRow.Hidden

End With

End Sub



Ik zou dus willen dat deze button deze opdracht gaat geven aan zowel de range ‘Mous’ (tab1) als ‘Mous 2’ (tab2).



Een ander voorbeeld die ik heel lastig vind:

Alle rijen met de waarde ‘Niet ingevuld’ in kolom 4 worden verborgen bij het gebruik van deze button. Ook hier wil ik dat hij exact hetzelfde gaat doen bij tab2. Dus bij gebruik van deze button worden alle rijen verborgen in de desbetreffende kolom bij zowel de eerste als de tweede tab.



Code:
Sub VenA()

DrawingObjects:=False, _

Contents:=True, _

Scenarios:=False, _

AllowFormattingCells:=False, _

AllowFormattingColumns:=False, _

AllowFormattingRows:=False, _

AllowInsertingColumns:=True, _

AllowInsertingRows:=True, _

AllowInsertingHyperlinks:=False, _

AllowDeletingColumns:=False, _

AllowDeletingRows:=False, _

AllowSorting:=True, _

AllowFiltering:=True, _

AllowUsingPivotTables:=False

Dim r As Range, cl As Range

For Each cl In Columns(4).SpecialCells(2)

If cl = "Niet ingevuld" Then

If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)

End If

Next cl

If Not r Is Nothing Then r.EntireRow.Hidden = True

End Sub


Is er iemand die mij zou kunnen helpen? Mijn dank is groot!



Hartelijke groet,



Wesley
 
Laatst bewerkt door een moderator:
En dan zal iedereen om een voorbeeldbestand gaan vragen.
 
En als je coode plaatst, zet deze dan in code tags.
 
Je voorbeeld heeft andere range namen, maar goed.
Voor je eerste vraag:
Code:
Private Sub ToggleButton1_Click()
    ShowHide "Mousserend"
End Sub

Private Sub ToggleButton2_Click()
    ShowHide "Moussort"
End Sub

Sub ShowHide(rng As String)
    With Range(rng)
        .EntireRow.Hidden = Not .EntireRow.Hidden
    End With
End Sub

Van je 2e vraag zie ik niks in het je voorbeeld document.
 
Goedemiddag Ed,

Bedankt voor je reactie. Wat betreft de eerste vraag, op het eerste blad gebeurt er iets. Bij het tweede blad nog niet. Ik heb het bestand voor de volledigheid nog een keer toegevoegd en de range die ik op de tweede tab wil laten verbergen 'Japie' genoemd. Dus met 1 druk op de knop wil ik zowel de ranges 'Mousserend' als 'Japie' verbergen. Beide dus op een ander blad. De rangenaam aanpassen in de door jouw gegeven code lukt daarbij niet.

De tweede vraag heeft betrekking op de andere button. Dus als celwaarde 'niet ingevuld' is in een bepaalde kolom, dan worden de rijen verborgen op het eerste blad. Ik zou graag willen dat dit met een en dezelfde klik ook bij het tweede blad ('Kaart2') zal gebeuren. Het heeft betrekking op dit stukje VBA/code:

Code:
Sub VenA()

Dim r As Range, cl As Range
For Each cl In Columns(4).SpecialCells(2)
    If cl = "Niet ingevuld" Then
        If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)
    End If
Next cl
If Not r Is Nothing Then r.EntireRow.Hidden = True
End Sub

Te vinden bij Macros en dan de macro 'Beveiliging' (heeft verder niks met beveiliging te maken maar dit is een knipsel van het originele bestand).

Nogmaals veel dank voor je hulp zover!
 

Bijlagen

Kleine edit! Het is eerste is gelukt met de volgende code:


Code:
Private Sub ToggleButton1_Click()
    ShowHide "Mousserend"
    ShowHide "Japie"
End Sub

Sub ShowHide(rng As String)
    With Range(rng)
        .EntireRow.Hidden = Not .EntireRow.Hidden
    End With
End Sub

Nu rest alleen mij nog de vraag met het verbergen van de 'Niet ingevulde' velden bij beide bladen tegelijk.

Veel dank voor je hulp en op weg helpen!
 
Code:
Private Sub ToggleButton1_Click()
    With Sheets("Wijnkaart").Range("Mousserend")
        .EntireRow.Hidden = Not .EntireRow.Hidden
    End With
    With Sheets("Kaart2").Range("Mousserend")
        .EntireRow.Hidden = Not .EntireRow.Hidden
    End With
End Sub

Sub VenA()
    VenASheet ("Wijnkaart")
    VenASheet ("Kaart2")
End Sub

Sub VenASheet(sht)
    Dim r As Range, cl As Range
    For Each cl In Sheets(sht).Columns(4).SpecialCells(2)
        If cl = "Niet ingevuld" Then
            If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)
        End If
    Next cl
    If Not r Is Nothing Then r.EntireRow.Hidden = True
End Sub
 
Laatst bewerkt:
Ik ging er vanuit dat je op beide werkbladen een eigen wisselknop wilde.
Niet goed gelezen ;)
 
Laatst bewerkt:
Het kan ook met VBA:

- 1 Userform per bestand
- geen overvloed aan benoemde gebieden
- doordachte naamgeving van knoppen
- geen overbodige macromodules
 

Bijlagen

Ik loop bij het implementeren toch nog tegen iets aan. De codes werken perfect alleen om het geheel te laten functioneren zoals ik dat wil dan moet het volgende gebeuren:
- De waarden bij blad "Kaart2" moet gelijk zijn aan het blad "Wijnkaart"
- Dit doe ik met een simpele =formule:
Code:
=Wijnkaart!D4
- De waarde is dan inderdaad in sommige gevallen 'Niet ingevuld" in de cellen
- Echter door de formule in de cel, herkent de VBA code het niet als 'Niet ingevuld'.
- De VBA moet dus op de werkelijke celwaarde uitvoeren en niet op de formule in de cel

Ik heb een voorbeeld toegevoegd waarbij bij blad "Kaart2" de cellen D4 en D5 de =formule bevatten en D6 en D7 niet. Dan zien jullie precies wat ik bedoel vermoed ik.

Iemand de gouden tip?

Nogmaals veel dank!
 

Bijlagen

Probeer het zo eens.
Hi Emields,

Werkt echt perfect dit! Maar hoe implementeer ik dit stapsgewijs? Ik zie dat je in blad1 een code hebt geplaatst. Maar ik krijg de button niet werkend met de VBA. Ik doe ongetwijfeld iets goed verkeerd maar hopelijk zou je mij kunnen helpen!
 
plaats een actieve X knop en noem die knop "verb" en koppel daar de code aan.
 
Goedemiddag! Ik kom er nu achter dat het inderdaad werkt alleen dat het tenminste 40 seconde duurt bij een wat omvangrijker document voordat de opdracht is uitgevoerd. Is er wellicht een wat lichtere versie te bedenken?
Code:
Sub VenA()
    VenASheet ("Wijnkaart")
    VenASheet ("Kaart2")
End Sub

Sub VenASheet(sht)
    Dim r As Range, cl As Range
    For Each cl In Sheets(sht).Columns(4).SpecialCells(2)
        If cl = "Niet ingevuld" Then
            If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)
        End If
    Next cl
    If Not r Is Nothing Then r.EntireRow.Hidden = True
End Sub

De code van Ahulpje is eigenlijk super bruikbaar alleen loop ik tegen het probleem aan zoals in mijn eerdere post omschreven. Dit pakt niet de cellen met 'Niet ingevuld' die door een formule in de cel zijn geplaatst. Iemand wellicht nog een optie? Tot zover enorm bedankt!
 
Leg eens uit waarom je op 2 werkbladen dezelfde gegevens wil hebben.
De grootste vooruitgang van automatisering is nu juist dat dat niet meer hoeft (in tegenstelling tot een kaartenbak)
 
Hi snb, de eerste 3 kolommen moeten qua gegevens min of meer gespiegeld zijn op beide bladen en ook hetzelfde reageren op een en dezelfde VBA. Deze gegevens zijn voor beide bladen relevant en ook belangrijk dat ze exact dezelfde gegevens weergeven. De verdere invulling per blad vertoont verwantschappen maar is qua output wezenlijk anders. Het is nogal een omslachtig proces om dit helemaal uit te leggen maar ik heb hier in dit geval een hele goede reden voor.

Ik heb wel het idee dat ik door de diverse input heel dicht tegen de oplossing zit maar mis het laatste zetje.
 
Maak gebruik van een filter, die hieronder gebruikte ranges kun je vervangen door een van je honderden benoemde ranges;)
Code:
Sub VenA()
    If ActiveSheet.FilterMode Then
        Sheets("Wijnkaart").ShowAllData
        Sheets("Kaart2").ShowAllData
    Else
        Sheets("Wijnkaart").Range("$C$3:$E$13").AutoFilter Field:=2, Criteria1:="<>Niet ingevuld"
        Sheets("Kaart2").Range("$C$3:$E$13").AutoFilter Field:=2, Criteria1:="<>Niet ingevuld"
    End If
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan