Gebruik van Enter- en pijltjestoets

Status
Niet open voor verdere reacties.

franzeman

Gebruiker
Lid geworden
2 sep 2006
Berichten
98
Beste VBA'ers,

In mijn Excel werkmap staat de instelling van de Enter-toets standaard op omlaag (na gebruik). Dit wil ik graag zo houden.
Echter in een event-macro wil ik in een bepaald bereik, dat de 'MoveAfterReturnDirection' naar rechts gaat. Ik wil zowel de pijltjestoets-naar-rechts als de Entertoets voor de naar rechtsbeweging kunnen gebruiken.

Als ik dit in bijgevoegd bestandje heb gecodeerd, levert dit bij toetsaanslag verschillende resultaten op. De pijltjestoets geeft de juiste datum in de kolom, de Entertoets een dag eerder(?).

Vraag: Wat is de juiste code om na de event na gebruik van de Entertoets de cursor weer omlaag gaat én dat tijdens gebruik bij de event beide toetsen hetzelfde resultaat sorteren.

Graag jullie hulp.

Groetjes van Franzeman
 

Bijlagen

Bedoel je dit event? of iets gelijkaardigs:

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Not Application.Intersect(Target, Range("A10:Q30")) Is Nothing Then
        Application.MoveAfterReturnDirection = xlToRight
    Else
        Application.MoveAfterReturnDirection = xlDown
    End If
End Sub

Wigi
 
Bedoel je dit event? of iets gelijkaardigs:

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Not Application.Intersect(Target, Range("A10:Q30")) Is Nothing Then
        Application.MoveAfterReturnDirection = xlToRight
    Else
        Application.MoveAfterReturnDirection = xlDown
    End If
End Sub

Wigi

Hallo Wigi,

Zoiets bedoel ik inderdaad! (Waarom kom ik daar nou weer niet op!).
De cursor gaat binnen het gestelde bereik inderdaad alleen naar rechts, zoals ik wilde. Maar als ik jouw code toevoeg aan mijn code, dan krijg ik een foutmelding 1004: Methode PasteSpecial van klasse Range mislukt(?). (Ik werk met Office 2003.)

Daar ben ik voorlopig nog niet achter. Wellicht kan jij het probleem duiden in de aangepaste bijlage.

Alvast vriendelijk dank voor het wederom meedenken.

Groetjes van Franzeman
 

Bijlagen

Wat zou dit moeten doen?

Code:
Range(Cells(1, ActiveCell.Column - 1), Cells(1, ActiveCell.Column - 1)).Select

En vermijd selecteren? Niet alleen omdat dat over het algemeen niet nodig is, zeker omdat je ook een macro hebt die actie onderneemt als er een andere cel geselecteerd wordt.

Wigi
 
Bedoel je dit?

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' gebeurtenis macro

    Dim Cell As Range
    Dim row As Long

    If Not Application.Intersect(Target, Range("B10:Q30")) Is Nothing Then

        For Each Cell In Target
            
            With Cell
                
                If Len(.Value) = 0 Then

                    .FormatConditions.Delete
                    .Borders(xlDiagonalDown).LineStyle = xlNone
                    .Borders(xlDiagonalUp).LineStyle = xlNone
                    .Interior.ColorIndex = 0

                Else

                    If .Value = Range("A1").Value Then
                    
                        .FormatConditions.Delete
                        .Borders(xlDiagonalDown).LineStyle = xlContinuous
                        .Borders(xlDiagonalUp).LineStyle = xlContinuous
                        .Interior.ColorIndex = 6

                        If .Value = " " Then    'spatie

                            '  Application.MoveAfterReturnDirection = xlToRight

                            Cells(1, .Column - 1).Copy
                            
                            With Range("A" & .row)
                                .PasteSpecial xlPasteValues    'alleen de waarden
                                .NumberFormat = "dd mmm"
                            End With

                            '  Application.MoveAfterReturnDirection = xlDown

                        End If

                    End If

                End If
            End With
            
        Next Cell
    
    End If
    
    Application.EnableEvents = False
    Target.Select
    Application.EnableEvents = True
    
    Application.CutCopyMode = False

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B10:Q30")) Is Nothing Then
        Application.MoveAfterReturnDirection = xlToRight
    Else
        Application.MoveAfterReturnDirection = xlDown
    End If

End Sub

Wigi
 
Bedoel je dit?

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' gebeurtenis macro

    Dim Cell As Range
    Dim row As Long

    If Not Application.Intersect(Target, Range("B10:Q30")) Is Nothing Then

        For Each Cell In Target
            
            With Cell
                
                If Len(.Value) = 0 Then

                    .FormatConditions.Delete
                    .Borders(xlDiagonalDown).LineStyle = xlNone
                    .Borders(xlDiagonalUp).LineStyle = xlNone
                    .Interior.ColorIndex = 0

                Else

                    If .Value = Range("A1").Value Then
                    
                        .FormatConditions.Delete
                        .Borders(xlDiagonalDown).LineStyle = xlContinuous
                        .Borders(xlDiagonalUp).LineStyle = xlContinuous
                        .Interior.ColorIndex = 6

                        If .Value = " " Then    'spatie

                            '  Application.MoveAfterReturnDirection = xlToRight

                            Cells(1, .Column - 1).Copy
                            
                            With Range("A" & .row)
                                .PasteSpecial xlPasteValues    'alleen de waarden
                                .NumberFormat = "dd mmm"
                            End With

                            '  Application.MoveAfterReturnDirection = xlDown

                        End If

                    End If

                End If
            End With
            
        Next Cell
    
    End If
    
    Application.EnableEvents = False
    Target.Select
    Application.EnableEvents = True
    
    Application.CutCopyMode = False

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B10:Q30")) Is Nothing Then
        Application.MoveAfterReturnDirection = xlToRight
    Else
        Application.MoveAfterReturnDirection = xlDown
    End If

End Sub

Wigi
 
Hij doet het!

Hallo Wigi,

Het werkt!.
Voor jou vanzelfsprekend, voor mij een openbaring.
Heb nog wat dingetjes moeten aanpassen, maar ik kon weer verder.
Bedankt voor het meedenken en excuses voor de late reactie.

Groetjes van Franzeman
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan