Boa noite Eduardo.
Primeiramente peço a gentileza de um dos moderadores a transferência de seu tópico para o Fórum específico de VBA. Lá você terá mais chances de ser ajudado.
Voltando à sua dúvida, como não tenho mais informações sobre as entradas e saídas esperadas, vou tentar lhe ajudar primeiramente de forma conceitual. Caso consiga detalhar melhor, posso tentar contribuir mais depois.
- As funções criadas pelo usuário (UDF) sempre retornam o resultado na variável de mesmo nome da função. Assim, no seu caso, é preciso que vc associe o resultado desejado a uma variável de nome "Permanencia_BT". Como vc definiu
a saída como "Integer", esse valor deve ter esse formato. Note que vc atribuiu à variável "resultado" o tipo "Variant" (Imagino que este seja o resultado que deve constar na planilha. Se for esse o caso, altere um dos dois formatos).
- Não sei se é o caso, mas seus blocos de "If" podem estar errados:
'Se desligado
If dl1 <> "" Then
ElseIf ct2 = "" Then
resultado = ActiveCell.FormulaR1C1 = "Datediff(d, date, dl1)"
End If
O bloco acima tem resultado diferente de:
'Se desligado
If dl1 <> "" Then
If ct2 = "" Then
resultado = ActiveCell.FormulaR1C1 = "Datediff(d, date, dl1)"
End If
End If
No 1º, caso < dl1="">, nada acontecerá. No 2º caso,
se < dl1="">, então será avaliado se
< ct2="">; se verdadeiro, a expressão será calculada.
- Salvo engano (peço contribuições de quem souber), as UDF não podem inserir fórmulas na planilha, apenas resultados. Assim, a expressão a seguir não retorna um resultado válido:
ActiveCell.FormulaR1C1 = "Datediff(d, date, dl1)"
- Menos ainda se atribuir a uma variável:
resultado = ActiveCell.FormulaR1C1 = "Datediff(d, date, dl1)"
- Se quiser usar uma fórmula da planilha dentro do VBA, use algo do tipo:
Teste = WorksheetFunction.Average(...)
- Se a função existir no VBA, use diretamente:
resultado = Datediff(...)
Espero que as dicas te ajudem. Um abraço.
Filipe Magno