Dubbele naam ingave voorkomen in userform

Status
Niet open voor verdere reacties.

rayda39

Gebruiker
Lid geworden
20 mrt 2009
Berichten
84
Beste VBA leden,

Momenteel heb ik een userform die in het algemeen goed loopt (ook dankzij het form).
Als ik de userform open en op datum klik (lbldatum) dan opent een kalender waar ik een datum kan selecteren.
Hierna selecteer ik een naam in het box (ComboBox1), in de label werkuren komt dan het aantal werkuren voor die dag van die persoon.
Ik kan dus niet de uren van die dag overschrijden als ik mijn uren in vul, dit werkt prima.

Mijn stappen zijn :

  1. ik klik op de datum en selecteer bv 4-7-2019
  2. Dan klik ik op de naam bv aap
  3. ik vul als taak in orde en netheid
  4. en als uren 8
  5. Hierna klik ik op controleren (het userform controleerd de totaal uren)

Dan komt het knopje uren verwerken naar voren.
Ik klik hier op en de uren worden op het tabblad Urren 3446 weggeschreven

Het kan echter voor komen dat de persoon die het userform invult 2 keer de zelfde persoon op 1 dag invult, ik heb hier op het tabblad Uren 3446 wel een formule gemaakt die dit controleerd (zie kollom K).(niet moeders mooiste)

Is het mogelijk dat dit al in het userform kan?

Dus als op 4-7-2019 op het tabblad Uren 3446 de naam Aap is weggeschreven dat je dan bv een melding krijgt dat deze al is gebruikt op 4-7-2019.

Ik hoop dat ik het goed genoeg heb uitgelegd.

Tevens heb ik het userform met fictieve namen toegevoegd
 

Bijlagen

  • Urenstaat in Excel 2019 Versie 2.20(Office 2007-2016) 3446.xlsb
    452,7 KB · Weergaven: 34
zoiets?
 

Bijlagen

  • Urenstaat in Excel 2019 Versie 2.20(Office 2007-2016) 3446.xlsb
    186,4 KB · Weergaven: 47
Beste SjonR,

Een woord wauw.
Dit was mij niet gelukt. :thumb:
Ik heb er kleinigheid erbij gezet in de code

Code:
ComboBox1 = Clear

In het volgende stuk (van u)

Code:
arr = Sheets("Uren 3446").Cells(1).CurrentRegion

For i = 2 To UBound(arr)
    If arr(i, 1) = CDate(LblDatum.Caption) Then
        If arr(i, 2) = ComboBox1.Value Then
            MsgBox "Voor deze persoon zijn alle uren ingevoerd op " & LblDatum.Caption
            ComboBox1 = Clear
            Exit For
        End If
    End If
Next

De naam bleef staan in de combox, en dan kon ik alsnog de uren invullen, nu moeten ze een andere naam zoeken.

Ps "Blij met de oplossing? Klik dan hier en maak onze penningmeester blij!" dit is geregeld, jullie maken mij echt blij en ik leer ook een beetje :thumb:
 
Dat is mooi. Dank voor uw dankbaarheid :thumb:
 
Wanneer ga je alle overbodige code eens opruimen? Als de gegevens al volledig ingevuld zijn dan kan je beter de naam niet voor laten komen in de combobox. Scheelt weer een onzinnige melding en andere code.
Zonder alles door te wroeten kan je er zoiets van maken.
Code:
Private Sub LblDatum_Click()
  Kalender.Show
  Label1.Visible = True
  Werkuren.Visible = True
  ComboBox1.List = Sheets("informatie").Cells(1).CurrentRegion.Offset(1).SpecialCells(2).Resize(, 4).Value 'hsv
  ComboBox1.Visible = True
   If ComboBox1.ListIndex > 0 Then Werkuren.Caption = ComboBox1.Column(3)
    ar = Sheets("Uren 3446").Cells(1).CurrentRegion
      For j = ComboBox1.ListCount - 1 To 0 Step -1
        For j1 = 2 To UBound(ar)
          If CDate(ar(j1, 1)) = CDate(LblDatum) And ComboBox1.List(j, 0) = ar(j1, 2) Then ComboBox1.RemoveItem (j)
        Next j1
      Next j
End Sub
 
Beste Vena,

Ja inderdaad, ik moet een kijken wat ik kan weg halen, maar ik ben er heel voorzichtig mee.
Ik ben al blij dat het werkt.
Ik heb u code geprobeerd alleen loopt hij vast als ik een oude datum gebruikt.
Als ik bv een datum in de toekomst gebruikt is er geen probleem en werkt u code prima :thumb:

Als ik een datum in het verleden gebruikt loopt hij vast.
Ik heb dan u hele code overgenomen.
Code:
Private Sub LblDatum_Click()
  Kalender.Show
  Label1.Visible = True
  Werkuren.Visible = True
  ComboBox1.List = Sheets("informatie").Cells(1).CurrentRegion.Offset(1).SpecialCells(2).Resize(, 4).Value 'hsv
  ComboBox1.Visible = True
   If ComboBox1.ListIndex > 0 Then Werkuren.Caption = ComboBox1.Column(3)
    ar = Sheets("Uren 3446").Cells(1).CurrentRegion
      For j = ComboBox1.ListCount - 1 To 0 Step -1
        For j1 = 2 To UBound(ar)
          If CDate(ar(j1, 1)) = CDate(LblDatum) And ComboBox1.List(j, 0) = ar(j1, 2) Then ComboBox1.RemoveItem (j)
        Next j1
      Next j
End Sub

Hij loopt vast op het volgende stukje.

Code:
 If CDate(ar(j1, 1)) = CDate(LblDatum) And ComboBox1.List(j, 0) = ar(j1, 2) Then

Ik krijg dan de melding : Run time error "381": Could not get the list property. Invalid property array index.
Zo ver mijn kennis gaat lijkt hij dat hij geen lijst meer kan vinden?, kunt u mij de juiste richting in helpen?

Mvg
 
Wat bedoel je met een oudere datum? Kan je dat even in een voorbeeldje laten zien?
 
Beste VenA,

Ik zal hieronder uitleggen wat ik bedoel.
Ik heb het bestand toegevoegd als attachment.
Alle namen zijn fictief.

Als ik het userform open en de datum 10-7-2019 selecteer is er geen probleem, dit komt omdat er (naar mijn beste weten) nog namen zijn die ingevuld moeten worden.

Voorbeeld (als het goed gaat) : geselecteerd is datum 10-7-2019 en de naam Aart is nog niet ingevult, dan kan ik gewoon op de knop controleren klikken en dan op verwerken, vervolgens klik ik in het keuze menu op Yes om nog een naam in tevullen.


Voorbeeld (als het fout gaat) : Ik selecteer de datum 9-7-2019 (alle namen zijn dan al ingevuld, en ik denk dat dat ook het probleem is) dan krijg ik het volgende.

Run time error "381": Could not get the list property. Invalid property array index

debug.PNG

Ik klik vervolgens op Bedug.

En ik zie dan het onderstaande.

vast gelopen code.PNG

Code hieronder los :
Code:
Private Sub LblDatum_Click()
  Kalender.Show
  Label1.Visible = True
  Werkuren.Visible = True
  ComboBox1.List = Sheets("informatie").Cells(1).CurrentRegion.Offset(1).SpecialCells(2).Resize(, 4).Value 'hsv
  ComboBox1.Visible = True
   If ComboBox1.ListIndex > 0 Then Werkuren.Caption = ComboBox1.Column(3)
    ar = Sheets("Uren 3446").Cells(1).CurrentRegion
      For j = ComboBox1.ListCount - 1 To 0 Step -1
        For j1 = 2 To UBound(ar)
          If CDate(ar(j1, 1)) = CDate(LblDatum) And ComboBox1.List(j, 0) = ar(j1, 2) Then ComboBox1.RemoveItem (j)
        Next j1
      Next j
End Sub

Zo ver ik het zie wil de code een item weghalen op basis van de datum, echter alle namen zijn al weg. Dit kan verwarring scheppen als met perongeluk een datum selecteerd waar alle namen al zijn ingevuld.
Zou het mogelijk zijn dat er dan een melding komt met B.v alle namen zijn van deze dag al ingevuld.

Mvg
 

Bijlagen

  • Urenstaat in Excel 2019 Versie 2.20(Office 2007-2016) 3446.xlsb
    159 KB · Weergaven: 38
De boel even op de kop gegooid. Test het maar eens.
 

Bijlagen

  • Urenstaat in Excel 2019 Versie 2.20(Office 2007-2016) 3446 (2).xlsb
    146,1 KB · Weergaven: 41
Beste Vena,

Dit ziet er zeer goed uit.
Ik kan alleen maar zeggen :thumb::thumb:.
Dit kan ik zeer goed gebruiken, mijn dank is groot.
Ik ga het deze week testen en overzetten naar mijn originelen file.

Mvg
 
Laatst bewerkt:
Beste Vena,

Nogmaals bedankt voor de aanpassing, helaas loop ik tegen iets vreemd aan.
Zodra ik op het tabblad "informatie" een andere naam in geef dan er stond dan werkt het niet meer.
Ik zal uit leggen wat ik hiermee bedoel.

Ik heb de file nu "testfile" genoemd en bijgevoegd als attachment.

Ik heb op het tabblad "informatie" de eerst naam veranderd naar mijn eigen naam R.Huveneers.
Zodra ik deze invulde op de datum 15-7-2019 kwam het ook gewoon op het tabblad "uren 3446".
Zodra ik een andere naam op 15-7-2019 wil in vullen blijf mijn naam wel in de "ComboBox1"staan.

Doe ik het zelfde met namen die er al stonden zoals "Aadi" dan verwdijnt deze wel uit de "Combobox1".
Ik heb ook de naam "B.Huveneers" op het tabblad " informatie" gezet, deze naam komt helemaal niet voor in de "combobox1".

Mijn vraag is :

Moet ik ergens iets ressetten? ( ik heb echt geen idee :confused:).
Alvast ontzettend bedankt
 

Bijlagen

  • Testfile.xlsb
    146,6 KB · Weergaven: 32
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan