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

Maximaal aantal velden bij tabvolgorde

Status
Niet open voor verdere reacties.

Donisfield

Gebruiker
Lid geworden
26 aug 2013
Berichten
13
Hallo,

Ik wil graag mijn eigen tabvolgorde bepalen. Nu heb ik al verschillende artikelen gezien en de onderstaande code gevonden.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static lastCellIndex As Integer
    Dim Addresses_InOrder As Variant
    If Target.Count = 1 Then
        Addresses_InOrder = Array("$A$1", "$F$5", "$B$12", "$A$6")
        lastCellIndex = lastCellIndex + 1
        If lastCellIndex > UBound(Addresses_InOrder) Then _
        lastCellIndex = LBound(Addresses_InOrder)
        If lastCellIndex < LBound(Addresses_InOrder) Then _
        lastCellIndex = LBound(Addresses_InOrder)
        Application.EnableEvents = False
        Range(Addresses_InOrder(lastCellIndex)).Select
        Application.EnableEvents = True
    End If
End Sub

Ik heb alleen een groot aantal velden die ik achter elkaar wil plaatsen, ongeveer 3500. Probleem is dat ik die code niet in VBA krijg. Mijn eigen volgorde gaat als volgt:
Code:
"$D$58", "$C$58", "$B$58", "$H$58", "$I$58", "$J$58", "$D$59", "$C$59", "$B$59", "$H$59", "$I$59", "$J$59", "$D$60", "$C$60", "$B$60", "$H$60", "$I$60", "$J$60", "$D$61", "$C$61", "$B$61", "$H$61", "$I$61", "$J$61", "$D$62", "$C$62", "$B$62", "$H$62", "$I$62", "$J$62", "$D$63", "$C$63", "$B$63", "$H$63", "$I$63", "$J$63", "$D$64", "$C$64", "$B$64", "$H$64", "$I$64", "$J$64", "$D$65", "$C$65", "$B$65", "$H$65", "$I$65", "$J$65", "$D$66", "$C$66", "$B$66", "$H$66", "$I$66", "$J$66", etc etc.

Wie heeft er een oplossing?

Groeten,
Don
 
Door 3500 cellen dmv tabvolgorde wandelen lijkt mij een beetje onzinnig. Zet jouw data in een tabel van D58 t/m J58 en het aantal rijen dat nodig is. Zet de kolommen in de juiste volgorde en je kan er doorheen wandelen dmv tab. Anders graag even een voorbeeldje van hoe jouw sheet eruit ziet.
 
vertaal je probleem eens als de tabvolgorde van de kolommen is DCBHIJ en dan de volgende rij D etc en dat voor de rijen 59 tot ...
je probleem wordt een stuk eenvoudiger.
zet dit in de module van je blad
Code:
Public sLastCell As String
Const MijnKolommen = "DCBHIJ"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim Splits, sRichting, c As Range, c1 As Range, i As Integer
  If Target.Count = 1 Then
    If sLastCell <> "" Then
      Set c = Me.Range(sLastCell)                          'laatste geselecteerde cel
      Splits = Split(c.Address, "$")                       'adres splitsen op de "$"
      Select Case Splits(2)                                'het rijnummer
        Case 59 To 100, 102 To 500                         'vorig geselecteerde cel in van die rijen, beetje moeilijk doen, moesten het geen aaneengesloten gebieden zijn
          i = InStr(1, MijnKolommen, Splits(1))            'vorig geselecteerde cel in 1 van die kolommen
          If i <> 0 And c.Column < 26 Then                 'kolom komt voor in mijnkolommen
            On Error Resume Next
            If Target.Offset(, -1).Address = sLastCell Then sRichting = "R"  'je deed stap naar rechts (dus TAB of pijltje rechts)
            If Target.Offset(, 1).Address = sLastCell Then sRichting = "L"  'je deed stap naar links (dus shift+TAB of pijltje links)
            If Target.Offset(1).Address = sLastCell Then sRichting = "U"  'je deed stap naar boven
            If Target.Offset(-1).Address = sLastCell Then sRichting = "D"  'je deed stap naar boven
            On Error GoTo 0
            Application.EnableEvents = False
            Select Case sRichting                          'met de tabtoets kan je alleen maar naar rechts of naar links gaan
              Case "R": Set c1 = Me.Range(Mid(MijnKolommen, IIf(i < Len(MijnKolommen), i + 1, 1), 1) & Target.Row - (i = Len(MijnKolommen)))
              Case "L": Set c1 = Me.Range(Mid(MijnKolommen, IIf(i = 1, Len(MijnKolommen), i - 1), 1) & Target.Row + (i = 1))
            End Select
            If Not c1 Is Nothing Then c1.Select
            Application.EnableEvents = True
          End If
      End Select
    End If
    sLastCell = ActiveCell.Address
  Else
    sLastCell = ""
  End If
End Sub
 
Laatst bewerkt:
Als de volgorde van de werkbladen in sheet2 in cel A1 t/m A4 staat, gebruik je deze code:

Code:
Sub M_snb()
    For j = 2 To 4
       Sheets(Sheet2.Cells(j, 1).Value).Move , Sheets(Sheet2.Cells(j - 1, 1).Value)
    Next
End Sub
 
En zou dit ook met de Enter toets kunnen? Om het praktisch aan te beschrijven: Het gaat om een sheet met dartgegevens en we gebruiken een apart nummeriek toetsenbord met entertoets om de scores bij te houden, vandaar.

Verder gaat het uiteindelijk om 3 legs per game en 6 games, oftewel 18 tabellen. Deze vinden in meerdere kolommen naar elkaar plaats. Het kan ook zijn dat ik mijn tabellen anders moet opbouwen om het veel makkelijker te maken, maar dan hoor ik dat graag.
 
wat doet je excel na een enter ?
kijk even in extra>opties voor excel>geavanceerd en bij "selectie verplaatsen nadat enter is gedrukt" kies je voor "rechts", vinkje is aangevinkt en OK
Als je nu in een cel een enter doet, dan ga je naar rechts en gebruik dan eens bovenstaande macro.
 
in VBA is het toch net te technisch voor mij. Kan ik mijn excel delen om te laten zien wat ik bedoel?
 
mijn vorige reactie is geen VBA, het is enkel een instelling aanpassen in de opties van excel. Ik weet niet precies welke versie van excel je gebruikt en dus waar het precies staat, maar kijk eens in het lint naar extra of opties of zoiets en zoek daarin verder naar wat ik hierboven aangaf.
Lukt het niet, dan zet je hier anders eens je bijlage.
 
dank voor de snelle reactie. ik had de code getest en de volgorde aangepast, maar hij doet nog net niet wat ik in gedachten heb. Maar misschien moet ik mijn invoertabel anders maar aanpassen. Als dat het beste is, laat maar weten.
Om het duidelijk te maken voeg ik een foto toe van een deel van het invoerscherm. Er staan 3 tabellen, voor 3 te spelen legs. Er staan nog een 5 extra games met 3 legs onder elkaar, dus in totaal 18 stuks. Ik wil in elke tabel een vast patroon hebben waarbij de 1e en de 3e leg de 1e speler begint en in de 2e leg begint de 2e speler. (het lastige denk ik dat ik erbij gemaakt heb is dat ik a la de offline versie het van binnen naar buiten heb gemaakt) Oftewel de volgorde in tabel 1 is D58, C58, B48, H58, I58, J58 en dan is volgende beurt weer met D59, C59 etc. Dit geldt dus ook voor de 3e leg met AF, AE, AD vervolgd door AJ, AK AL. In de middelste leg begint de 2e speler op regel 58 op V, W, X gevolgd door R, Q, P waarna het op regel 59 weer verder gaat met V, W, X etc.

Maakt dit mijn vraag helderder?
voorbeeld darttabel.jpg
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan