Arquivo da tag: Functions

VBA – Retornando erros do Excel em Funções personalizadas


Aproveitando o gancho do post anterior, deixo mais uma dica para funções personalizadas no Excel.

Quando você criar suas funções personalizadas no Excel, como qualquer função que se cria, uma situação possível são os erros que podem acontecer. Dá para tratar sem muito segredo, retornando uma mensagem de erro, MsgBox ou coisa parecida. Mas em alguns casos, o ideal mesmo seria retornar um erro do próprio Excel, por exemplo, #N/D ou não disponível. Além de ser a coisa “certa” a fazer, o usuário pode usar as fórmulas do Excel para validação e verificação como ÉERROS ou É.NÃO.DISP, entre outras.

Para retornar o erro, é preciso usar a função CVErr e uma das constantes de erro no Excel. A função CVErr retorna um tipo Variant de subtipo Error que contém um número de erro especificado pelo usuário. Meio complicado, mas o uso é simples:

Function RetornaErro()
	RetornaErro = CVErr(2007)
End Function

Criando essa função no VBA, bastar colocar em uma célular a fórmula =RetornaErro() e ver o resultado. No caso, o erro demonstrado é o #DIV/0, erro de divisão por zero, pois o código se refere a ele. Abaixo segue uma tabela com todos os códigos de erro de função do Microsoft Excel:

  • xlErrDiv0 – Número do erro: 2007 – Erro de divsão por zero
  • xlErrNA – Número do erro: 2042 – Erro valor Não Disponível
  • xlErrName – Número do erro: 2029 – Erro valor Nome Inválido
  • xlErrNull – Número do erro: 2000 – Erro valor Valor Nulo
  • xlErrNum – Número do erro: 2036 – Erro valor Número Inválido
  • xlErrRef – Número do erro: 2023 – Erro valor Referência Inválida
  • xlErrValue – Número do erro: 2015 – Erro valor Valor Inválido

Há muitos outros códigos de erro, mas para o contexto do Excel, precisamos nos manter a estes. Abaixo mais um exemplo:

Function CalculaDolar(ByVal Valor As Double)
	'... cálculo
	If Not IsNumeric(Valor) Then
		CalculaDolar = CVErr(xlErrNum)
	End If
End Function

Em resumo, se o valor informado no parâmetro não for numérico, é retornado o erro. Dessa forma, as funções ficam bem mais profissionais, não?

Bom proveito!




VBA – Procurando o Endereço de uma célula no Excel


Funções personalizadas são muito úteis, principalmente quando nas funções Excel falta só aquele pedaço que faria servir perfeitamente para nós. 😉

Bom, sem dor, se valor. Precisei encontrar em um determinado Range, o endereço de uma célula com base em um valor. O problema é que este Range é composto por linhas e colunas, por exemplo, A1:C30. Funções como ENDEREÇO, CORRESP e outras funcionam somente com range baseado em uma coluna, ou linha. O jeito é criar uma nova.

A função personalizada abaixo procura um valor num Range informado e retorna o endereço:

Function PROCURAENDERECO(ByVal Area As Range, ByVal Valor_Procurado As String)
 
    If Not Area.Find(Valor_Procurado) Is Nothing Then
        PROCURAENDERECO = Area.Find(Valor_Procurado).Address
    Else
        PROCURAENDERECO = CVErr(xlErrNA)
    End If
 
End Function

Se alguma célula do Range contiver o valor procurado, a função retorna o endereço da célula, ou o famoso erro #N/D. Pode obviamente ser chamada por qualquer rotina VBA. Abaixo um exemplo do resultado:

Bom proveito!