Boa noite, sergio
Crie uma tabela. Designe-a por Tabela2 (porque vai receber o que pretende (?) com os funcionários relacionados 2 a 2)
campos da tabela2: Empresa (texto), Periodo (texto), Emp1 (texto), Cargo1 (texto),Emp2 (texto),Cargos2 (texto)
Execute o seguinte código:
Sub CriaTabelaEmpresasSimultaneas()
Dim Rst As DAO.Recordset, rstDatas As DAO.Recordset, UltimaData As Date
Dim I As Integer, NrEmp As Integer, NomeEmp As String, Cont As Integer, RstEmpresas As DAO.Recordset, Empresa As String, UltimoFuncionario As String, UltimaEmpresa As String, UltimoCargo As String
CurrentDb.Execute "DELETE * FROM Tabela2;"
Set Rst = CurrentDb.OpenRecordset("SELECT DISTINCT [Nome Funcionario] FROM Geral ORDER BY [Nome Funcionario];")
Rst.MoveLast: Rst.MoveFirst
NrEmp = Rst.RecordCount - 1
For I = 0 To NrEmp - 1
Rst.MoveFirst
Rst.Move I
NomeEmp = Rst(0)
Rst.MoveNext
Do While Not Rst.EOF
CurrentDb.Execute "INSERT INTO Tabela2(Emp1,Emp2) VALUES('" & NomeEmp & "','" & Rst(0) & "')"
Rst.MoveNext
Loop
Next
Set Rst = CurrentDb.OpenRecordset("SELECT DISTINCT Emp1, Emp2 FROM Tabela2;")
Do While Not Rst.EOF
Set rstDatas = CurrentDb.OpenRecordset("SELECT [Data Admissao],year([Data Admissao]) as dtAno,Month([Data Admissao]) as dtMes,Day([Data Admissao]) as dtDia FROM Geral WHERE [Nome Funcionario]='" & Rst(0) & "' or [Nome Funcionario]='" & Rst(1) & "' UNION SELECT IIf(IsNull([Data Demissao]),Format(Now,'dd-mm-yyyy'),[Data Demissao]),IIf(IsNull([Data Demissao]),Year(Now),Year([Data Demissao])),IIf(IsNull([Data Demissao]),Month(Now),Month([Data Demissao])),IIf(IsNull([Data Demissao]),Day(Now),Day([Data Demissao])) FROM Geral WHERE [Nome Funcionario]='" & Rst(0) & "' or [Nome Funcionario]='" & Rst(1) & "' ORDER BY dtAno, dtMes, dtDia;")
Do While Not rstDatas.EOF
If rstDatas.AbsolutePosition = 0 Then
UltimaData = rstDatas(0)
Else
Set RstEmpresas = CurrentDb.OpenRecordset("SELECT [Nome Funcionario],[Nome Empresa],[cargo funcionario] FROM Geral WHERE [Nome Funcionario]='" & Rst(0) & "' and [Data Admissao]<=#" & UltimaData & "# And IIf(IsNull([Data Demissao]),Format(Now(),'dd-mm-yyyy'),[Data Demissao])>=#" & rstDatas(0) & "# UNION SELECT [Nome Funcionario],[Nome Empresa],[cargo funcionario] FROM Geral WHERE [Nome Funcionario]='" & Rst(1) & "' and [Data Admissao]<=#" & UltimaData & "# And IIf(IsNull([Data Demissao]),Format(Now(),'dd-mm-yyyy'),[Data Demissao])>=#" & rstDatas(0) & "# ORDER BY [Nome Empresa], [Nome Funcionario], [cargo Funcionario];")
UltimoFuncionario = "": UltimaEmpresa = "": UltimoCargo = ""
Do While Not RstEmpresas.EOF
If RstEmpresas(1) = UltimaEmpresa Then
If IsNull(DLookup("Empresa", "Tabela2", "Emp1='" & Rst(0) & "' and Emp2='" & Rst(1) & "'")) Then
CurrentDb.Execute "UPDATE Tabela2 SET Empresa='" & UltimaEmpresa & "',Periodo='Entre " & UltimaData & " e " & rstDatas(0) & "',Cargo1='" & UltimoCargo & "',Cargo2='" & RstEmpresas(2) & "' WHERE Emp1='" & Rst(0) & "' and Emp2='" & Rst(1) & "';"
Else
CurrentDb.Execute "INSERT INTO Tabela2(Empresa,Periodo,Emp1,cargo1,emp2,cargo2) VALUES ('" & RstEmpresas(1) & "','Entre " & UltimaData & " e " & rstDatas(0) & "','" & Rst(0) & "','" & UltimoCargo & "','" & Rst(1) & "','" & RstEmpresas(2) & "');"
End If
Else
UltimoFuncionario = RstEmpresas(0): UltimaEmpresa = RstEmpresas(1): UltimoCargo = RstEmpresas(2)
End If
RstEmpresas.MoveNext
Loop
End If
UltimaData = rstDatas(0)
rstDatas.MoveNext
Loop
Rst.MoveNext
Loop
Set Rst = Nothing: Set rstDatas = Nothing: Set RstEmpresas = Nothing
CurrentDb.Execute "DELETE * FROM Tabela2 WHERE IsNull(Empresa);"
End Sub
Veja o código e os registos para o relacionamento de 2 em 2 funcionários. Tente adaptar para um nº de funcionários variável.