Cara essa é uma situação normal do dia-dia. Impedir duplicidade quando for necessário... Eu já tive que fazer umas coisas nesse sentido. Então... acho que posso te ajudar pelo menos em 50% da resolução do teu´problema. Vamos lá:
Vc tem duas opções para verificar o CPF e impedir a duplicidade:
1º No evento Lost_Focus da txtCpf vc pode disparar uma consulta com o conteudo da mesma e se retornar algum resultado vc avisa o usuario. Tipo com uma MSGBox. Eu aviso assim: Pego a Linha retornada (no caso de um cadastro de pessoa) e retorno o nome do cara que ja ta usando aquele CPF no cadastro.
2º deixo o usuario cadastrar tudo, todos os dados! E na hora de salvar eu faço a mesma verificação e retorno pra ele se houver algum cadastro com o CPF que ele tentou cadastrar. Novamente retorno numa MSGbox o nome e tal... Acho éssa segunda opção a mais viavel! Ou até um complemento para a 1º...
Agora quanto abrir pra edição caso encontre... Eu como trabalho com Recordset conectado e sempre tenho os dados ao vivo na memória... Faria esta verificações através do método FIND! Verificaria o CPF caso retorne alguma linha, nesse caso, eu daria a mesma MSGBox com o nome do fulano que ta retornado e bt´s de opção para continuar no cadastro ou editar o encontrado. Tudo depende das regars com as quais vc ta trabalhando. Quando falo regras... Quero dizer de que forma vc esta controlando novos, edição, exclusão de cadastro. Nesse seu caso se encontrar o cadastro com o CPF e vc alem de mostrar que ja ha um cadastro com aquele CPF vc der a opção de edição do encontrado e o usuario clicar em editar. Retorne pro seu form os dados do cadastro encontrado e faça o form sair do modo de "Novo Cadastro" e entrar no modo de "Edição". ok?
Espero ter ajudado! Qualquer coisa posta de novo...
Abraços e boa sorte!