loop-volgorde items userform

Status
Niet open voor verdere reacties.

jofred

Gebruiker
Lid geworden
16 dec 2006
Berichten
172
Ik heb een userform in Excel gedefinieerd, waarin een aantal aanvraaggegevens worden uitgevraagd.
Vervolgens wil ik de info uit de besturingselementen die beginnen met txt wegschrijven naar een nieuw Excel-bestand (wsAanvraag), wat op zich wel lukt, maar ik ben nog niet tevreden over de volgorde.
Hieronder heb ik een stuk van de relevante code opgenomen

Code:
For Each pPage In Me.mpCategorie.Pages
    For Each Ctrl In pPage.Controls
        If Left(Ctrl.Name, 3) = "txt" Then
            strControl = Ctrl.Name
            strControlwaarde = Me(strControl).Value
            If strControlwaarde <> vbNullString Then
                i = i + 1
                wsAanvraag.Cells(i, 1).Value = pPage.Caption & " - " & Mid(strControl, 4)
                With wsAanvraag.Cells(i, 2)
                    If LCase(strControl) Like "*datum*" And strControlwaarde <> vbNullString Then
                         .NumberFormat = "dd-mm-yyyy"
                         .Value = CDate(strControlwaarde)
                    Else
                        .Value = strControlwaarde
                   End If
                End With
                wsAanvraag.Cells(i, 3).Value = Ctrl.TabIndex
                wsAanvraag.Cells(i, 4).Value = Ctrl.ControlTipText
            End If
        End If
    Next Ctrl
    i = i + 1
Next pPage
Ik had min of meer verwacht dat het uitlezen van de textboxen in de tabvolgorde zou plaatsvinden, maar dat gebeurt niet.
Kan iemand mij helpen om het uitlezen van de besturingselementen te laten plaatsvinden in dezelfde volgorde als de tabvolgorde?
 
Laatst bewerkt:
Met de naam van de teksvakken kun je exact de volgorde van lezen bepalen.
Bijv. de namen tekst1, tekst2, tekst3, tekst4

Code:
for j=1 to 4
  cells(1,j)=me("tekst" & j).Text
next

maar vaak is dit eenvoudiger (want beperkt het aantal schrijfakties in een werkblad):

Code:
cells(1,1).resize(,4)=split(tekst1.text & "|" & tekst2.text & "|" & tekst3.text & "|" & tekst4.text,"|")
 
SNB,

Dank voor je reactie. Ik zie echter wel bezwaar van deze oplossing.
Als er een veld wordt tussengevoegd, moet je de namen van de velden gaan aanpassen.
En aangezien in het formulier nl nogal wat code naar de velden verwijst, kan dat nogal bewerkelijk worden.
Zijn er nog andere mogelijkheden?

Jofred
 
Bestudeer mijn 2e suggestie nog eens grondig.
Daarop is zeker jouw 'bezwaar' niet van toepassing.
 
SNB,

Ik heb je 2e oplossing nog eens heel grondig bestudeerd, maar kon er niet zo mee uit de voeten.
Het heeft me wel even verder aan het denken gezet.
Ik heb nu de oplossing wel gevonden. Ik maak a.d.h.v het nummer van het tabblad en het tabindexnummer van het formulier veld een sorteersleutel in een hulpkolom.
Na het verlaten van de loop sorteer ik het geheel en verwijder de sorteerkolom.

Code:
i = 1
With wsAanvraag
    .Cells(i, 1).Value = "Onderdeel"
    .Cells(i, 2).Value = "Waarde"
    .Cells(i, 3).Value = "Sorteersleutel"
End With
For Each pPage In Me.mpCategorie.Pages
    For Each Ctrl In pPage.Controls
        If LCase(TypeName(Ctrl)) = "textbox" Then
            strControl = Ctrl.Name
            strControlwaarde = Me(strControl).Value
            If strControlwaarde <> vbNullString Then
                i = i + 1
                With wsAanvraag
                    .Cells(i, 1).Value = pPage.Caption & " - " & Mid(strControl, 4)
                    With .Cells(i, 2)
                        If LCase(strControl) Like "*datum*" _
                           And strControlwaarde <> vbNullString Then
                             .NumberFormat = "dd-mm-yyyy"
                             .Value = CDate(strControlwaarde)
                        Else
                            .Value = strControlwaarde
                       End If
                    End With
                    .Cells(i, 3).Value = (pPage.Index + 1) * 10 & Right("0" & Ctrl.TabIndex, 2)
                End With
            End If
        End If
    Next Ctrl
Next pPage

wsAanvraag.Range(Cells(1, 1), Cells(i, 3)).Sort Key1:=Range("C2"), Order1:=xlAscending, _
    Key2:=Range("A2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
    :=xlSortNormal
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan