Olá,
Você terá que usar um processo simples em três etapas:
1. Descubra o maior identificador de funcionário da tabela;
2. Calcule um número aleatório com uma fórmula simples como esta abaixo:
Int((MaxFuncionarios * Rnd) + 1)
3. Verifique se o funcionário está disponível e acrescente em um vetor temporariamente. Repita o processo mais 3 vezes, não esquecendo de comparar o código escolhido com os códigos já contidos no vetor para ter certeza que o mesmo número não foi selecionado novamente.
Basicamente é isso. Abaixo eu envio um programa que rascunhei, deve servir de base para você. Eu não testei, mas acho que serve. Depois de selecionar os funcionários ele escreve o códigos na janela Immediate.
Option Explicit
Dim MaxFuncionarios As Integer
Private Sub Form_Load()
Randomize
Verifica_Funcionarios
Seleciona_Funcionarios
End Sub
Private Sub Verifica_Funcionarios()
Dim Sql As String
Dim RS As ADODB.Recordset
Sql = "Select Max(IDFuncionario) As Num From Funcionarios"
Set RS = New ADODB.Recordset
RS.Open Sql, Conn, adOpenStatic
MaxFuncionarios = RS!Num
RS.Close
Set RS = Nothing
End Sub
Private Sub Seleciona_Funcionarios()
Dim VetFuncionarios(0 To 3) As Integer
Dim Cont As Integer, Conta As Integer, ID As Integer
Dim Sql As String
Dim RS As ADODB.Recordset
Cont = 1
Set RS = New ADODB.Recordset
Do While Cont < 4
ID = Escolhe_Funcionario()
'Verifica se o número escolhido já foi selecionado
For Conta = 0 To 3
If VetFuncionarios(Conta) = ID Then GoTo Continua 'Eu sei que muitos não gostam do GOTO, mas se souber usar, não complica o código como dizem.
Next
'Procura pelo funcionário e se ele está disponível
Sql = "Select * From Funcionarios Where "
Sql = Sql & "IDFuncionario = " & ID & " And "
Sql = Sql & "SEG1200 = 'S'"
RS.Open Sql, Conn, adOpenStatic
If Not RS.EOF Then 'Se o funcionário foi localizado e tem disponibilidade,
VetFuncionarios(Cont - 1) = ID 'Acrescenta o seu ID no vetor
Else 'Caso contrário,
GoTo Continua 'Ignora e escolhe outro
End If
'Incrementa o contado para controle do loop
Cont = Cont + 1
Continua:
RS.Close
Loop
For Conta = 0 To 3
Debug.Print VetFuncionarios(Conta)
Next
Set RS = Nothing
End Sub
Private Function Escolhe_Funcionario() As Integer
Escolhe_Funcionario = Int((MaxFuncionarios * Rnd) + 1)
End Function
Espero ter ajudado.
um abraço,
Sandro.