• 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.

Validatie lijst ZOOM

Status
Niet open voor verdere reacties.

JanJantje

Gebruiker
Lid geworden
19 apr 2007
Berichten
101
Hallo,

Ik heb onlangs deze Link van Wigi bekeken.
En vond het wel interessant.

Ik heb de volgende code geschreven voor het inzoomen bij een validatie.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim Id As Long

On Error Resume Next
Id = Target.Validation.Type

    If Id <> 0 Then
       ActiveWindow.Zoom = 120
    Else
       ActiveWindow.Zoom = 90
    End If
    
End Sub
Nu mijn vragen:

Hoe kan ik ervoor zorgen dat:
- deze "zoom" alleen bij een lijst word toegepast?
- bij een detectie, dat het niet zomaar naar het midden van de scherm inzoomt maar wel ervoor zorgt dat de geselecteerde cel in het midden van de scherm komt?
- als het geen lijst is naar de oorspronkelijke "zoom" gaat en niet dus alleen maar naar 90
maw ik wil 90 variabel maken.

Iemand een idee?

Alvast bedankt,

JanJantje
 
- als het geen lijst is naar de oorspronkelijke "zoom" gaat en niet dus alleen maar naar 90
maw ik wil 90 variabel maken.

Maak binnen de Else tak van de If een nieuwe If ... Then ... Else

De andere vragen waren niet helemaal duidelijk voor mij.

Wigi
 
Zoom

Beste Jan

Heb er een msgbox ingevoegd zodat je zelf de grootte van de zoom kan bepalen, misschien is dit wat je bedoelt.

Groetjes Danny
 

Bijlagen

@ Danny

Bedankt, maar niet helemaal wat ik zocht. :)
Ik wil het niet invullen maar ervoor zorgen dat er een soort "geheugen" is.
Dat het mijn oorspronkelijke zoom bijhoud...


Maak binnen de Else tak van de If een nieuwe If ... Then ... Else
Is proberen... :)
De andere vragen waren niet helemaal duidelijk voor mij.

Wigi


- deze "zoom" alleen bij een lijst word toegepast?
Hiermee bedoelde ik dat de zoom alleen bij "valideren - lijst" moest inzoomen en niet bij de andere functies van "valideren"...
Bvb het zoomt ook in "aangepaste" cellen, ik wil dat het alleen bij "lijsten" inzoomt.

- bij een detectie, dat het niet zomaar naar het midden van de scherm inzoomt maar wel ervoor zorgt dat de geselecteerde cel in het midden van de scherm komt?

Hiermee bedoelde ik bvb als er een "validatie" cel helemaal rechts van onder je scherm zit. En je hier op klikt dan zoomt het scherm in maar deze cel blijft helemaal rechts van onder...
Is het mogelijk om deze te centreren in het midden van de beeld?
 
- als het geen lijst is naar de oorspronkelijke "zoom" gaat en niet dus alleen maar naar 90
maw ik wil 90 variabel maken.
Voila,
Eentje is al opgelost :)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Id As Long
Dim Z As Long

[Z1] = ActiveWindow.zoom
  
    If [Z1] < 120 Then
       Z = [Z1]
       [Z2] = Z
    End If
   
On Error Resume Next
   Id = Target.Validation.Type

        If Id <> 0 Then
                   ActiveWindow.zoom = 120
                   Else
                   ActiveWindow.zoom = [Z2]
        End If
End Sub
 
De rest ook opgelost:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim Id As Long
Dim Z As Long

Application.EnableEvents = False
[Z1] = ActiveWindow.Zoom
    If [Z1] < 120 Then
       Z = [Z1]
       [Z2] = Z
    End If
 
On Error Resume Next
Id = Target.Validation.Type
    If Id = 3 Then
        ActiveWindow.Zoom = 120
        CenterOnCell ActiveCell
    Else
        ActiveWindow.Zoom = [Z2]
    End If
Application.EnableEvents = True
End Sub

Oplossingen:
- deze "zoom" alleen bij een lijst word toegepast?
Hiermee bedoelde ik dat de zoom alleen bij "valideren - lijst" moest inzoomen en niet bij de andere functies van "valideren"...
Bvb het zoomt ook in "aangepaste" cellen, ik wil dat het alleen bij "lijsten" inzoomt.
Blijkbaar moest ik gewoon "Id" gelijk stellen aan 3...
- bij een detectie, dat het niet zomaar naar het midden van de scherm inzoomt maar wel ervoor zorgt dat de geselecteerde cel in het midden van de scherm komt?

Hiermee bedoelde ik bvb als er een "validatie" cel helemaal rechts van onder je scherm zit. En je hier op klikt dan zoomt het scherm in maar deze cel blijft helemaal rechts van onder...
Met deze functie is het probeleem opgelost "CenterOnCell" ActiveCell

Zie link voor "CenterOnCell" >> Link

Ik dank iedereen die mij heeft proberen te helpen :thumb:

JanJantje
 
Er zaten nog kleine problemen,
Zoals:
- Je kon niet in een lijst hoger dan 120 inzoomen
- Je kon niet in je werkblad hoger dan 120 inzoomen

Maar dat is opgelost met de volgende code ;)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim Id As Long
Dim Z As Long

Application.EnableEvents = False
[Z1] = ActiveWindow.Zoom
    If [Z1] < 120 Then
        Z = [Z1]
        [Z2] = Z
    ElseIf [Z3] <> "Zoomed" Then
        [Z2] = [Z1]
    End If
 
On Error Resume Next
Id = Target.Validation.Type
    If Id = 3 Then
        If ActiveWindow.Zoom >= 120 Then
            ActiveWindow.Zoom = ActiveWindow.Zoom
            CenterOnCell ActiveCell
        Else
            ActiveWindow.Zoom = 120
            CenterOnCell ActiveCell
        End If
        [Z3] = "Zoomed"
    Else
        ActiveWindow.Zoom = [Z2]
        [Z3] = "Zoom"
    End If
Application.EnableEvents = True

End Sub
 
Beste Janjantje

Zit er soms geen fout in je code want ik krijg steeds de melding Sub of Function is niet definieërd.
Bij mij lukt het alvast niet, bij jou wel

Groetjes Danny
 
Beste Danny

Een post terug had ik een link gegeven voor "CenterOnCell"

Je moet deze code ook gebruiken als je wilt dat de geklikte (validatie) cel gecentreerd word:
Code:
Sub CenterOnCell(OnCell As Range)

Dim VisRows As Integer
Dim VisCols As Integer

Application.ScreenUpdating = False
'
' Switch over to the OnCell's workbook and worksheet.
'
OnCell.Parent.Parent.Activate
OnCell.Parent.Activate
'
' Get the number of visible rows and columns for the active window.
'
With ActiveWindow.VisibleRange
    VisRows = .Rows.Count
    VisCols = .Columns.Count
End With
'
' Now, determine what cell we need to GOTO. The GOTO method will
' place that cell reference in the upper left corner of the screen,
' so that reference needs to be VisRows/2 above and VisCols/2 columns
' to the left of the cell we want to center on. Use the MAX function
' to ensure we're not trying to GOTO a cell in row <=0 or column <=0.
'
With Application
    .Goto reference:=OnCell.Parent.Cells( _
        .WorksheetFunction.Max(1, OnCell.Row + _
        (OnCell.Rows.Count / 2) - (VisRows / 2)), _
        .WorksheetFunction.Max(1, OnCell.Column + _
        (OnCell.Columns.Count / 2) - _
        .WorksheetFunction.RoundDown((VisCols / 2), 0))), _
     scroll:=True
End With

OnCell.Select
Application.ScreenUpdating = True

End Sub
Anders wis je gewoon "CenterOnCell"

JanJantje
 
Beste Janjantje

Had vorige bericht met de link naar "CenterOnCell" niet gezien :eek:

Groetjes Danny
 
Klein vraagje:

Als ik met de pijltjes beweeg, wordt excel erg traag; zeker als ik uitgezoomed ben.

Is er een verkeerd gebruik van application.enableevents?
Of heeft het te maken met Worksheet_SelectionChange?
Hoe kan ik dit oplossen?

Alvast bedankt

JanJantje
 
Is er een verkeerd gebruik van application.enableevents?
Of heeft het te maken met Worksheet_SelectionChange?
Hoe kan ik dit oplossen?

Kan beide zijn.

Welke code gebruik je voor Worksheet_SelectionChange?

Wigi
 
Deze

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim Id As Long
Dim Z As Long

Application.EnableEvents = False
[IU1] = ActiveWindow.Zoom
    If [IU1] < 120 Then
        Z = [IU1]
        [IU2] = Z
    ElseIf [IU3] <> "Zoomed" Then
        [IU2] = [IU1]
    End If
 
On Error Resume Next
Id = Target.Validation.Type
    If Id = 3 Then
        If ActiveWindow.Zoom >= 120 Then
            ActiveWindow.Zoom = ActiveWindow.Zoom
            CenterOnCell ActiveCell
        Else
            ActiveWindow.Zoom = 120
            CenterOnCell ActiveCell
        End If
        [IU3] = "Zoomed"
    Else
        ActiveWindow.Zoom = [IU2]
        [IU3] = "Zoom"
    End If
Application.EnableEvents = True

End Sub
 
1. Dat is redelijk veel code om uit te voeren bij elke wijziging van de cursor.

2. de code kan wel beter. Begin daarmee.

Wigi
 
Enige wat me opkwam was een with invoegen... Maar dat helpte niet..

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim Id As Long
Dim Z As Long

Application.EnableEvents = False
    With ActiveWindow
        [IU1] = .Zoom
            If [IU1] < 120 Then
                Z = [IU1]
                [IU2] = Z
            ElseIf [IU3] <> "Zoomed" Then
                [IU2] = [IU1]
            End If
 
        On Error Resume Next
        Id = Target.Validation.Type

            If Id = 3 Then
                If .Zoom >= 120 Then
                    .Zoom = .Zoom
                    CenterOnCell ActiveCell
                Else
                    .Zoom = 120
                    CenterOnCell ActiveCell
                End If
                    [IU3] = "Zoomed"
            Else
                .Zoom = [IU2]
                [IU3] = "Zoom"
            End If
    End With
Application.EnableEvents = True

End Sub

Wat kan bvb beter? Wat is overbodig? :confused:

Edit: Of is er een manier om dit te laten oproepen alleen als er op een Validatie lijst geklikt word?
 
Laatst bewerkt:
Begin met je variabelen a) een goede naam te geven (de huidige namen zeggen niets)
b) goed te declareren.

Wigi
 
zo beter?

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim TypeVal As Long
Dim ZoomGeheugen As String

Application.EnableEvents = False        
    With ActiveWindow                   
             [IU1] = .Zoom
            If [IU1] < 120 Then
                ZoomGeheugen = [IU1]
                [IU2] = ZoomGeheugen
            ElseIf [IU3] <> "Zoomed" Then
                [IU2] = [IU1]
            End If
 
        On Error Resume Next
        TypeVal = Target.Validation.Type

            If TypeVal = 3 Then                            '3 staat voor lijst
                If .Zoom >= 120 Then
                    .Zoom = .Zoom
                    CenterOnCell ActiveCell
                Else
                    .Zoom = 120
                    CenterOnCell ActiveCell
                End If
                    [IU3] = "Zoomed"
            Else
                .Zoom = [IU2]
                [IU3] = "Zoom"
            End If
    End With
Application.EnableEvents = True

End Sub
 
En wat is [IU1] en al de rest?

Die naam zegt niets, en bovendien declareer je ze niet.

Wigi
 
[IU1] verwijst rechtstreeks naar het cel IU1

Het lukte me niet met gedeclareerde waarden. Daarom heb ik cellen gebruikt.
 
Een verandering laten doen pas na de detectie van het validatie lijst heeft het aanzienlijk sneller gemaakt. :)

Code:
Private Sub Worksheet_selectionChange(ByVal Target As Range)

Application.EnableEvents = False     

Dim TypeVal As Long
Dim ZoomGeheugen As String

On Error Resume Next
TypeVal = Target.Validation.Type           
 With ActiveWindow                         
    If TypeVal = 3 Then                    
        [IU1] = .Zoom              
        If [IU1] < 120 Then         
            ZoomGeheugen = [UI1]
            [IU2] = ZoomGeheugen
        ElseIf [IU3] <> "Zoomed" Then
            [IU2] = [IU3]
        End If
       
        If .Zoom >= 120 Then                        
            .Zoom = .Zoom
        Else
            .Zoom = 120                             
        End If
            CenterOnCell ActiveCell                 
            [IU3] = "Zoomed"              
    Else
        .Zoom = [IU2]
        [IU3] = "Zoom"           
    End If
End With

Application.EnableEvents = True
End Sub

Het mag natuurlijk altijd sneller, als iemand nog iets weet... ;)

Alvast bedankt

Jantje
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan