Dicas de VBA – ParamArray!
Por Jorge Paulino para o Pplware!
Quando criamos funções ou procedimentos, necessitamos muitas das vezes de indicar um ou mais argumentos. Isto é uma situação muito normal, especialmente em funções, mas o problema coloca-se quando não sabemos o total de argumentos que necessitamos de indicar.
Por exemplo, se queremos contar um determinado número de valores mas não sabemos quantos valores iremos indicar o que podemos fazer? Durante este pequeno artigo iremos ver algumas soluções para diferentes casos.
Se for um número fixo de argumentos, podemos indicar vários na função, como por exemplo:
Function mySum(va1 As Double, val2 As Double) As Double ' ... End Function
Isto é, como já foi referido, uma situação normal, mas se necessitarmos de um número indefinido de valores?
Quando a função é para ser usada no código, a solução é simples e pode-se usar um array e indicar n valores. Um exemplo simples para ilustrar esta utilização será a criação de uma função para somar os diversos valores:
Function mySum(values() As Double) As Double Dim v As Variant Dim contador As Double
' Ciclo nos valores do array For Each v In values
' Soma os valores contador = contador + CDbl(v)
Next mySum = contador End Function
Depois, criando o array que será usado como argumento e chamando a função:
Sub DoWork()
' Criação de um Array Dim doubleArray(2) As Double doubleArray(0) = 12.5 doubleArray(1) = 5 doubleArray(2) = 30.2
' Execução da função indicando o array criado com argumento
Dim result As Double result = mySum(doubleArray)
MsgBox "O resultado é " & CStr(result)
End Sub
Até aqui tudo simples e certamente do conhecimento da maioria, mas se queremos usar a função numa célula, ou seja, se quisermos criar uma User-Defined Functions (UDF) onde possamos indicar n argumentos?
Aqui é um bom exemplo para a utilização de um ParamArray!
Um ParamArray é uma das opções que estão disponíveis quando indicamos argumentos (assim como o Optional, ByVal e ByRef) e pode/deve ser utilizado quando não sabemos o número de dados que iremos indicar. De um modo geral:
- É um array de valores do tipo Variant (uma vez que podem ser indicados diversos tipos);
- Podemos utilizar apenas um por função/procedimento;
- Não podemos usar argumentos opcionais (keyword Optional) na função ou procedimento quando usamos um ParamArray;
- Tem de ser sempre definido no final dos argumentos, ou seja, tem de ser o último argumento a ser indicado.
Este é um exemplo da sua utilização:
Function funcao(nome As String, ParamArray valores() As Variant) As String ' ... End Function
Indicamos primeiro os argumentos que queremos (caso necessário) e no final, iniciando a keyword ParamArray, o array do tipo Variant.
Por exemplo na função SUM(), como em muitas outras, quando estamos a digitar na célula aparece-nos a indicação de que podemos indicar vários argumentos (sem especificar quantos). Veja a seguinte imagem:
É esta a aplicação do ParamArray e desta forma podemos, por exemplo, criar uma função que receba diversos ranges e somar esses valores.
Function mySum(ParamArray values() As Variant) As Double Dim total As Double Dim rng As Variant
' Ciclo nos diferentes parâmetros indicados For Each rng In values
' Verifica se foi indicado um Range If TypeOf rng Is Range Then Dim r As Range Set r = rng
' Novo ciclo nas células do Range Dim cell As Range For Each cell In r
' Verifica se é um número para incrementar a variável If IsNumeric(cell) Then total = total + cell.Value End If Next End If
Next
' Atribui o resultado à função mySum = total
End Function
Depois, na célula, podemos usar das seguintes formas:
Somando o valor de uma célula apenas: =mySum(A1)
Somando um intervalo da célula A1 à A10: =mySum(A1:A10)
Somando múltiplos intervalos: =mySum(A1:A10;B1:B10;C1:C10)
NOTA: Para que a função possa ser usada na célula (UDF) é necessário que seja criada num módulo.
Neste caso estamos a criar uma função muito semelhante ao SUM() mas que serve para ilustrar a utilização do ParamArray e de que forma pode ajudar na criação de UDF’s.
Certamente terão ideias de onde e como aplicar!
Escrito por: Jorge Paulino Homepage: Página Autor: Jorge Paulino
Este artigo tem mais de um ano
Não sabia do ParamArray e para rimar, gostei.
o visual basic é a coisa mais ridicula k conheço
Assim como tu, és a coisa mais ridícula que não conheço (ainda bem) … e eu conheço muitas coisas!
Mais um espertinho … enfim, nem sei como aprovam comentários destes tão parvos e que nada contribuem para a partilha de conhecimento.
Ainda bem que temos aqui um iluminado. Nem sei o que seria de nós sem este ser tão inteligente!
Já experimentaste ao menos?
já eu só falo de coisas k experimento mas uma coisa eu gabo a pachorra de quem trabalha com isso
digo mais ja nao tendo presentes grandes conhecimentos desta chinesice dim vb as sem qualquer interesse relevante e chato next end function fica tudo resumido
Então o que é bom na tua opinião?
Conheces alguma ferramenta melhor em termos de produtividade?
até posso não conhecer mas não é assim que o mundo evolui por essa raciocinio ainda se usava ms dos e tinhamos todos telefones com symbian
Muito bom este!
Bom artigo, não conhecia.
Excelente artigo!
Quando sai um exemplo de como adicionar items no menu que aparece quando se clica com o botão direito?
Estou a começar a ver isso, mas deixo o caminho aberto aos “entendidos”… =)
Vê aqui:
Customizing Context Menus in All Versions of Microsoft Excel
http://msdn.microsoft.com/en-us/library/gg469862.aspx