Controles op meerdere lijsten

Status
Niet open voor verdere reacties.

harrybrinkman

Gebruiker
Lid geworden
7 nov 2019
Berichten
95
Toppers,

Ik heb een bestand met 3 werkbladen: "Basis", "Medewerkers" en "Database"

Op Userform1 wil ik een dienstnummer invoeren, vervolgens klikken op een knop en daarop 3 controles met verschillende acties laten uitvoeren

1 Als het nummer voorkomt op werkblad "Basis" dan een foutmelding in een MsgBox en retour invoer, als het niet voorkomt dan naar controle 2
2 Als het nummer voorkomt op werkblad "Medewerker" dan een foutmelding in een MsgBox en retour invoer, als het niet voorkomt dan naar controle 3
3 Als het nummer voorkomt op werkblad "Database" dan de bijbehorende naam in Naam_TB plaatsen, indien het nummer niet voorkomt op werkblad "database" dan "Onbekend Dienstnummer" plaatsen in Naam_TB

Ik krijg het niet voor elkaar, heeft iemand ban jullie tijd om zich daar over te buigen.

Ik heb een versimpeld bestandje meegestuurd om e.e.a. duidelijker te maken.

ps. mijn kennis van VBA is erg weinig :(

Alvast bedankt
Harry
 

Bijlagen

  • meerdere controles op dienstnummer.xlsm
    16,4 KB · Weergaven: 36
Toppers,

nav. bovenstaande vraag mijnerzijds ben ik nog eens aan het prutsen (letterlijk) geweest. Ik heb onderstaande code bedacht maar die schiet in een soort oneindige loop met het tonen van MsgBox "Onbekend dienstnr" waardoor ik zelfs via taakbeheer excel moest stoppen. Toch heb ik het gevoel dat ik op de goede weg ben... Wie weet raad?

Code:
Sub controle_op_Basis()

For Each c In Worksheets("Basis").Range("A1:A10")
 If c.Value = Dienstnr_TB.Value Then
 MsgBox "Staat al in Basis"
 Else
 controle_op_medewerker
 End If
Next c

End Sub
Sub controle_op_medewerker()
For Each c In Worksheets("Medewerkers").Range("A1:A10")
 If c.Value = Dienstnr_TB.Value Then
 MsgBox "Staat al in Medewerkerlijst"
 Else
 controle_op_database
 End If
Next c

End Sub
Sub controle_op_database()
For Each c In Worksheets("Database").Range("A1:A10")
 If c.Value = Dienstnr_TB.Value Then
 MsgBox "staat in database"
 Else
 MsgBox "Onbekend Dienstnr"
 End If
Next c

End Sub

Private Sub CommandButton1_Click()
controle_op_Basis
End Sub
 
Laatst bewerkt:
Code:
Sub testen()
   Set dict = CreateObject("scripting.dictionary")
   dict.comparemode = vbTextCompare
   shnames = Array("Basis", "Database", "medewerkers")               'alle gewenste tabbladen
   For ish = 0 To UBound(shnames)                                    'die 1 na 1 aflopen
      a = Sheets(shnames(ish)).Range("A1").CurrentRegion             'data inlezen
      For r = 1 To UBound(a)                                         '1 na 1 aflopen
         s = a(r, 1) & "|" & a(r, 2)                                 'nr en naam
         If Not dict.exists(s) Then dict.Add s, Array(s, 0, 0, 0)    'toevoegen aan dictionary als die nog niet bestaat
         d = dict(s)                                                 'terug uit dictionary halen
         d(ish + 1) = 1                                              'in gepaste element vlaggetje opzetten
         dict(s) = d                                                 'terugschrijven naar dictionary
      Next
   Next

   With Sheets("basis")
      .Range("Aa1").Resize(100, 26).ClearContents

      .Range("AA1").Resize(dict.Count, 4).Value = Application.Index(dict.items, 0, 0)   'eventjes wegschrijven
      b = Application.Index(dict.items, 0, 0)                        'ook naar array wegschrijven
      dict.RemoveAll                                                 'dictionary leegmaken

      For r = 1 To UBound(b)                                         'alle verzamelde namen aflopen
         s = Join(Application.Index(b, r, Array(2, 3, 4)), "|")      'combinatie van de vlaggetjes
         If Not dict.exists(s) Then dict.Add s, b(r, 1) Else dict(s) = dict(s) & ", " & b(r, 1)   'naargelang vlaggetje wel of nog niet bestaat, een nieuwe creëren en daarna toevoegen nr+naam aan item
      Next

      .Range("AG1").Resize(dict.Count, 2).Value = Application.Transpose(Array(dict.keys, dict.items))   'wegschjrijven van de verzamelde gegevens
      b = Application.Transpose(Array(dict.keys, dict.items))        'wegschjrijven van de verzamelde gegevens
      For r = 1 To UBound(b)
         MsgBox b(r, 1) & vbLf & b(r, 2)
      Next

   End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan