AS EMPRESAS ESTÃO "DESESPERADAS" POR ESTE TIPO DE PROFISSIONAL... - VOCÊ É UM DELES?
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI - O Conhecimento que Vira Dinheiro - CLIQUE AQUI
« Lição anterior | Δ Página principal | ¤ Capítulos | Próxima lição » |
SITES DINÂMICOS COM ASP 3.0 - CURSO COMPLETO Autor: Júlio Battisti |
||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lição 022 - Capítulo 03 - Tipos de dados e funções para conversão de tipos | ||||||||||||||||||||||||||||||||||
Neste item, aprenderemos a determinar qual o tipo de dado que está armazenado em uma variável, bem como a converter valores de um tipo para outro, utilizando as funções para conversão de tipos. Determinando o Tipo de Dados contido em uma variável Existem diversas funções, que permitem que seja determinado o tipo de valor contido em uma variável. Existem diversas aplicações para este tipo de função. Por exemplo, ao digitar dados em um formulário, podemos utilizar uma função para determinar se os valores digitados pelo usuário, não apresentam problemas. Por exemplo, o usuário pode ter digitado, por engano, texto em um campo que deve conter valores numéricos. A função IsArray Um Array é um tipo especial de variável, a qual pode armazenar diversos valores em uma única variável. De uma forma simples, um Array é um conjunto. Cada valor armazenado no Array é um elemento do conjunto. Por exemplo, poderíamos criar um Array para armazenar os nomes dos meses do ano. Com isso teríamos um Array de 12 elementos. Cada elemento de um Array, é acessado através do nome da variável Array e de um índice. O índice inicia em zero e não em um. Por isso se tivermos um Array de 10 elementos, teremos o elemento 0, o elemento1, o elemento 2, e assim por diante, até o elemento 9. O fato do índice começar com 0, influencia na hora que formos declarar um Array. Para declarar um Array chamado produtos, com 20 elementos, utilizaríamos a seguinte declaração: Dim produtos(19) O 19 significa que temos 20 elementos (sempre um a mais do que o número que aparece na declaração), isto é, do elemento 0, indicado por produtos(0), até o elemento 20, indicado por produtos(19). Na Listagem 3.1, temos um exemplo simples de utilização de Array. Listagem 3.1 – Utilizando uma Array para armazenar os dias da semana. 1 <HTML> 2 <HEAD> 3 <TITLE>Utilizando uma variável Array !!</TITLE> 4 </HEAD> 5 <BODY> 6 <P>EXEMPLO DE CRIAÇÃO E UTILIZAÇÃO DE ARRAYS.</P> 7 <SCRIPT LANGUAGE=vbscript> 8 <!-- 9 'Declara um Array de 7 posições 10 'Como a primeira posição é a posição zero, 11 'Indicamos o tamanho como 6, o que significa 12 'da posição 0 até a posição 6 = 7 elementos. 13 Dim Dias(6) 14 'Atribuímos valores para os dias da semana 15 Dias(0)= "Segunda-feira" 16 Dias(1)= "Terça-feira" 17 Dias(2)= "Quarta-feira" 18 Dias(3)= "Quinta-feira" 19 Dias(4)= "Sexta-feira" 20 Dias(5)= "Sábado" 21 Dias(6)= "Domingo" 22 'Agora utilizamos um laço For...Next 23 'Para criar uma String, com o conteúdo 24 'Do Array Dias. 25 For i=0 to 6 26 mensagem = mensagem & "Dia: " & i+1 & " " & Dias(i)& Chr(13) 27 Next 28 'Utilizamos uma MsgBox, para exibir a mensagem 29 'com o conteúdo do Array Dias. 30 MsgBox mensagem 31 --> 32 </SCRIPT> 33 </BODY> 34 </HTML> Ao carregar este exemplo, no Internet Explorer, será exibida a janela mostrada na Figura 3.1:
Utilizamos a função IsArray, para determinar se uma variável do tipo Variant (lembre que todas as variáveis do VBScript, são do tipo Variant), está armazenando um Array. Utilizamos a seguinte sintaxe: IsArray(NomeDaVariável) A função IsArray retorna verdadeiro se a variável for um Array, e falso caso contrário. Por exemplo, se adicionássemos, à listagem 3.1, o comando: MsgBox IsArray(Dias) o resultado seria o indicado na Figura 3.2:
A função VarType Podemos utilizar a função VarType, para determinar o subtipo de uma variável. Como todas as variáveis são do tipo Variant, o subtipo pode ser utilizado para determinar o tipo de dado armazenado na variável. Passamos para a função, o nome de uma variável ou expressão. A função retorna um número inteiro que indica o subtipo da variável. A sintaxe da função é a seguinte: VarType(NomeDaVariável) ou VarType(expressão) Na Tabela 3.1, temos os códigos de retorno da função VarType. Tabela 3.1 Valores de retorno da função VarType:
Na Listagem 3.2, temos um exemplo de utilização da função VarType. Listagem 3.2 – Utilizando a função VarType. 1 <HTML> 2 <HEAD> 3 <TITLE>Exemplo de Uso da função VarType !!!</TITLE> 4 </HEAD> 5 <BODY> 6 <P>EXEMPLO DE UTILIZAÇÃO DA FUNÇÃO VarType</P> 7 <SCRIPT LANGUAGE=vbscript> 8 <!-- 9 Dim x,y,z 10 Dim a, b 11 Dim c(20) 12 x=12 13 y=23.456 14 y=123456789 15 a="Este é um valor de texto !" 16 ‘Utilizamos a função Date( ), para capturar a data do sistema. 17 b=Date( ) 18 mensagem = "Tipo da variável x: " & Vartype(x) & Chr(13) 19 mensagem = mensagem & "Tipo da variável y: " & Vartype(y) & Chr(13) 20 mensagem = mensagem & "Tipo da variável z: " & Vartype(z) & Chr(13) 21 mensagem = mensagem & "Tipo da variável a: " & Vartype(a) & Chr(13) 22 mensagem = mensagem & "Tipo da variável b: " & Vartype(b) & Chr(13) 23 mensagem = mensagem & "Tipo da variável c: " & Vartype(c) & Chr(13) 24 MsgBox mensagem 25 --> 26 </SCRIPT> 27 </BODY> 28 </HTML> Ao carregar este exemplo no Internet Explorer, obteremos o resultado indicado na Figura 3.3:
Observe, principalmente, no tipo da variável z, o qual retornou 0. Isto significa que a variável z está vazia, ou seja, não foi inicializado. Este resultado está coerente com a Tabela 3.1. Também podemos salientar o retorno para a variável b, o qual retornou 7, indicando que o valor armazenado nesta variável é do tipo Data, o que também está coerente com a Tabela 3.1, uma vez que usamos a função Date( ), para armazenar a data do sistema, na variável b. Finalmente observe o valor de retorno para a variável c, o qual retornou 8192, indicando que a variável c é um Array. Este resultado está coerente com a Tabela 3.1, e com a declaração da linha 11 – Dim c(20), a qual declarou a variável c como sendo um Array. Muitas são as aplicações práticas para a função VarType, dentre as quais podemos destacar a validação dos dados digitados em um formulário. A função IsDate A função IsDate recebe uma variável ou expressão como argumento, e determina se a variável ou expressão é uma data válida, ou pode ser convertida para uma data válida. Caso o argumento passado seja uma data válida, a função retorna Verdadeiro, caso contrário, retorna Falso. Podemos utilizar esta função, por exemplo, para verificar se o usuário digitou uma data válida, em um campo de um formulário. A sintaxe da função IsDate é a seguinte: IsDate(NomeDaVariável) ou IsDate(expressão) Na Listagem 3.3, temos um exemplo de utilização da função IsDate. Listagem 3.3 – Utilizando a função IsDate. 1 <HTML> 2 <HEAD> 3 <TITLE>Utilizando a função IsDate !!</TITLE> 4 <SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript> 5 <!-- 6 Sub verifica_onclick 7 If IsDate(dataen) Then 8 MsgBox "Você digitou uma data válida !" 9 Else 10 MsgBox "Data inválida, digite novamente !" 11 window.dataen.value="" 12 window.dataen.focus 13 End If 14 End Sub 15 --> 16 </SCRIPT> 17 </HEAD> 18 <BODY> 19 <P>Exemplo de uso da função IsDate</P> 20 <P>Digite a data de encerramento: 21 <INPUT id=”dataen” maxLength=10 name=”dataen” > (dd/mm/aaaa) 22 </P> 23 <P>Clique no botão para verificar se a data é válida: 24 <INPUT id=”verifica” name=”verifica” type=button value=”Verificar data”></P> 25 </BODY> 26 </HTML> Alguns comentários sobre este exemplo: No código HTML do documento – linha 17 à linha 25, colocamos dois elementos de formulário: Um campo de texto, que chamamos de dataen. E um botão de comando, do tipo Button, que chamamos de verifica. A Figura 3.4, mostra este documento aberto no Internet Explorer, onde o usuário digitou uma data inválida, no nosso exemplo, o usuário digitou 30/02/2000.
Após digitar a data, o usuário clica no botão “Verificar data”, para testar se a data é válida. Esta ação do usuário, gera o evento onclik deste botão. Observe que das linhas 6 à 13, definimos um procedimento que responde ao evento onclick do botão verifica. O que define que este procedimento atua em resposta ao evento onclick do botão verifica, é o nome do procedimento: Sub verifica_onclick Esta definição faz parte do modelo de Objetos e Eventos do Internet Explorer, a qual analisaremos em maiores detalhes mais adiante, ainda neste capítulo. Dentro do procedimento verifica_onclick, utilizamos a função IsDate, para verificar se a data digitada pelo usuário é valida. Se a data for válida, simplesmente exibimos uma mensagem, notificando que a data digitada é válida, conforme indicado na Figura 3.5.
Caso a data não seja válida, emitimos uma mensagem avisando – linha 10. Na linha 11, voltamos a utilizar o modelo de objetos do Internet Explorer. a expressão window.dataen.value, significa: O valor do campo dataen, da janela atual do Navegador. Com este comando, estamos “apagando” a data digitada pelo usuário. Na linha 12, utilizamos o método focus, para posicionar o cursor de volta no campo dataen. Com isso, quando o usuário clicar em OK, na janela da Figura 3.5, o campo dataen será apagado (linha 11) e o cursor posicionado no campo (linha 12), para que o usuário possa digitar uma nova data, conforme indicado na Figura 3.6:
A função IsEmpty A função IsEmpty recebe uma variável ou expressão como argumento, e determina se, em algum momento, foi atribuído algum valor para a variável ou expressão. Caso tenha sido atribuído algum valor, a função retorna Verdadeiro, caso contrário, retorna Falso. Podemos utilizar esta função, por exemplo, para verificar se um campo de digitação obrigatória, como por exemplo o nome, não foi deixado em branco. A sintaxe da função IsEmpty é a seguinte: IsEmpty(NomeDaVariável) ou IsEmpty(expressão) Na Listagem 3.4, temos um exemplo de utilização da função IsEmpty. Listagem 3.4 – Utilizando a função IsEmpty. 1 <HTML> 2 <HEAD> 3 <TITLE>Utilizando a função IsEmpty !!</TITLE> 4 <SCRIPT LANGUAGE=vbscript> 5 <!-- 6 ' Vamos declarar uma variável x, que nunca 7 ' será utilizada no nosso Script 8 Dim a, b, c 9 Dim x 10 a=10 11 b=23 12 c=a+b 13 If IsEmpty(x) Then 14 MsgBox "A variável x, não foi utilizada !" 15 End If 16 --> 17 </SCRIPT> 18 </HEAD> 19 <BODY> 20 <P>Exemplo de uso da função IsEmpty</P> 21 <P> Clique no botão para verificar o nome digitado: 22 <INPUT id=”verifica” name=”verifica” type=button value="Verificar nome"> 23 </P> 24 </BODY> 25 </HTML> Ao abrir este documento, no Internet Explorer, você recebe a mensagem indicada na Figura 3.7:
A função IsNull A função IsNull recebe uma variável ou expressão como argumento, e determina se, em algum momento, foi atribuído o valor Null para a variável ou expressão. Caso tenha sido atribuído o valor Null, a função retorna Verdadeiro, caso contrário, retorna Falso. Para atribuirmos Null para uma variável, utilizamos a seguinte sintaxe: NomeDaVariável = Null IMPORTANTE= Uma variável com valor Null, não é a mesma coisa que uma variável com valor zero, ou uma variável de texto com tamanho zero. Quando é atribuído o valor Null para a variável, a mesma continua existindo na memória, porém sem nenhum valor definido. A sintaxe da função IsNull é a seguinte: IsNull(NomeDaVariável) ou IsNull(expressão) Na Listagem 3.5, temos um exemplo de utilização da função IsNull. Listagem 3.5 – Utilizando a função IsNull. 1 <HTML> 2 <HEAD> 3 <TITLE>Utilizando a função IsNull !!</TITLE> 4 <SCRIPT LANGUAGE=vbscript> 5 <!-- 6 ' Vamos declarar uma variável x, e atribuir 7 ' Null, para a mesma. 8 Dim x 9 x = Null 10 If IsNull(x) Then 11 MsgBox "A variável x é Nula !" 12 End If 13 --> 14 </SCRIPT> 15 </HEAD> 16 <BODY> 17 <P>Exemplo de uso da função IsNull</P> 18 </BODY> 19 </HTML> Ao abrir este documento, no Internet Explorer, você recebe a mensagem indicada na Figura 3.8:
A função IsNumeric A função IsNumeric recebe uma variável ou expressão como argumento, e determina se o valor atribuído à variável ou expressão é numérico, ou pode ser convertido para numérico. Caso o valor seja numérico, ou possa ser convertido, a função retorna Verdadeiro, caso contrário, retorna Falso. A sintaxe da função IsNumeric é a seguinte: IsNumeric(NomeDaVariável) ou IsNumeric(expressão) Na Listagem 3.6 temos um exemplo de utilização da função IsNumeric. Listagem 3.6 – Utilizando a função IsNumeric. 1 <HTML> 2 <HEAD> 3 <TITLE>Utilizando a função IsNumeric !!</TITLE> 4 <SCRIPT LANGUAGE=vbscript> 5 <!-- 6 Dim x,y,z 7 x=123 8 'Atribuo um valor que não pode ser convertido 9 'para numérico 10 y= "Riachuelo - 80" 11 z = Date() 12 mensagem = "Valor de x: " & x &" É numérico ? " & IsNumeric(x)& Chr(13) 13 mensagem = mensagem & "Valor de y: " & y &" É numérico ? " & IsNumeric(y)& Chr(13) 14 mensagem = mensagem & "Valor de z: " & z &" É numérico ? " & IsNumeric(z) 15 MsgBox mensagem 16 --> 17 </SCRIPT> 18 </HEAD> 19 <BODY> 20 <P>Exemplo de uso da função IsNumeric.</P> 21 </BODY> 22 </HTML> Ao abrir este documento, no Internet Explorer, você recebe a mensagem indicada na Figura 3.9:
Cabe salientar a utilização da função Date( ), para capturar a data do sistema, e atribuir esta data à variável z. Observe que esta data não foi considerada um valor numérico para a função IsNumeric. A função IsObject A função IsObject recebe uma variável como argumento, e determina se o valor atribuído à variável é um Objeto Activex, se for um objeto Activex, a função retorna Verdadeiro, caso contrário, retorna Falso. Para exemplificarmos esta função, faremos uso de uma página ASP, e iremos utilizar um dos objetos do ASP. Falaremos mais sobre os objetos do ASP, no Capítulo 4. A sintaxe da função IsObject é a seguinte: IsObject(NomeDaVariável) ou IsObject(expressão) Na Listagem 3.7 temos um exemplo de utilização da função IsObject. Listagem 3.7 – Utilizando a função IsObject. 1 <%@ Language=VBScript %> 2 <HTML> 5 <BODY> 6 <P>Exemplo de utilização da função IsObject !</P> 7 <% 8 Set tiponav= Server.CreateObject("MSWC.BrowserType") 9 If IsObject(tiponav) Then 10 Response.Write "A variável tiponav é um objeto" 11 Else 12 Response.Write "A variável tiponav não é um objeto." 13 End If 14 %> 15 </BODY> 16 </HTML> IMPORTANTE = Como este é um arquivo .asp, o mesmo não pode ser aberto localmente no Internet Explorer. Toda página .asp é interpretada no Servidor, e o resultado do processamento, na forma de HTML puro, é devolvido para o Navegador. Para testar um arquivo .asp, o mesmo precisa ser salvo no servidor IIS e acessado utilizando-se o endereço para a página .asp. Ao abrir este documento, no Internet Explorer, obtemos o resultado indicado na Figura 3.10:
Observe no campo endereço, que estamos acessando a página .asp, em um servidor, e não localmente, conforme indicado pelo endereço: http://servidor/Chap3/IsObject.asp Funções para conversão de tipos Neste item aprenderemos a utilizar as principais funções para conversão de tipos. Existem situações em que um determinado tipo de dado, deve ser convertido para outro. Por exemplo, se tivermos um número, armazenado na forma de texto, precisamos convertê-lo para inteiro ou double, para que possamos realizar cálculos com o mesmo. Na seqüência, apresento as principais funções de conversão, bem como um pequeno fragmento de código, exemplificando a utilização de cada uma delas. Função Cbool A função Cbool converte uma variável ou resultado de um expressão, para o subtipo Boolean. Qualquer número, com exceção do zero, é automaticamente convertido para Verdadeira. O valor zero é sempre convertido para Falso. O argumento desta função, não pode ser Texto, caso contrário será gerado um erro em tempo de execução. Observe este linha de código: MsgBox cbool(10>25) & chr(13) & cbool(3) Esta linha gera a mensagem indicada na Figura 3.11.
A expressão 10>25 é avaliada, como a expressão é falsa, a função Cbool retorna Falso. Já no segundo uso da função Cbool, foi passado o parâmetro 3 para a função. Qualquer valor diferente de zero (com exceção de texto), a função interpreta como Verdadeiro, o que é comprovado pela Figura 3.11. Função CByte A função CByte converte uma variável ou resultado de um expressão, para o subtipo Byte. O valor a ser convertido, deve estar na faixa aceitável para o tipo byte, que vai de 0 à 255. Caso o número esteja fora desta faixa, será gerada uma mensagem de erro, em tempo de execução. O argumento desta função, não pode ser Texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CByte(10+34) & chr(13) & CByte(35) Esta linha gera a mensagem indicada na Figura 3.12.
A expressão 10+34 é calculada, e o resultado (44), é convertido para o tipo byte. A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, pois o valor a ser convertido para byte, está fora da faixa de 0 à 255. MsgBox CByte(100+200) Função CCur A função CCur converte uma variável ou resultado de um expressão, para o subtipo Currency. O argumento desta função, não pode ser Texto, caso contrário será gerado um erro. Observe este linha de código: MsgBox CCur(250.335677+324.3333) & chr(13) & CCur(1250.326582) Esta linha gera a mensagem indicada na Figura 3.13.
A expressão 250.335677+324.3333 é calculada, e o resultado é convertido para o tipo Currency. Se passarmos um argumento de texto para a função CCur, será gerado um erro de execução, conforme indicado na Figura 3.14:
Função CDate A função CDate converte uma variável ou resultado de um expressão, para o subtipo Date. O argumento desta função deve estar em um formato que seja aceitável para datas, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CDate(“31/10/1980”) & chr(13) & CDate(“23-01-2007”) Esta linha gera a mensagem indicada na Figura 3.15.
A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, conforme indicado na Figura 3.16. MsgBox CDate(“31/02/1980”)
Função CDbl A função CDbl converte uma variável ou resultado de um expressão, para o subtipo Double. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CDbl("4.940651247E-17") Esta linha gera a mensagem indicada na Figura 3.17.
A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, conforme indicado na Figura 3.18. MsgBox CDbl(“Teste”)
Função CInt A função CInt converte uma variável ou resultado de um expressão, para o subtipo Integer. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CInt(32.36) & Chr(13) & CInt(20.35+40.45) Esta linha gera a mensagem indicada na Figura 3.19.
A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, conforme indicado na Figura 3.20. MsgBox CInt(“Teste”)
Função CLng A função CLng converte uma variável ou resultado de um expressão, para o subtipo Long. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. O argumento também não pode estar fora da faixa admitida pelo subtipo longo, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CLng("3462315") Esta linha gera a mensagem indicada na Figura 3.21.
A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, conforme indicado na Figura 3.22. MsgBox CLng(“Teste”)
Função CSng A função CSng converte uma variável ou resultado de um expressão, para o subtipo Single. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. O argumento também não pode estar fora da faixa admitida pelo subtipo single, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CSng("3.1418256927") Esta linha gera a mensagem indicada na Figura 3.23.
A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, conforme indicado na Figura 3.24. MsgBox CSng(“Teste”)
Função CStr A função CStr converte uma variável ou resultado de um expressão, para o subtipo String. Observe este linha de código: MsgBox CStr("12345" & " hectares de terra") Esta linha gera a mensagem indicada na Figura 3.25.
Funções Int e Fix As funções Int e Fix, retornam somente a parte inteira de um determinado número. A diferença entre as duas funções, é quando o número for negativo. Observe os exemplos abaixo: Fix(-10.2) -> Retorna –10 Int(-10.2) -> Retorna –11 A função Int, retorna, no caso de números negativos, o primeiro número inteiro, menor ou igual ao parâmetro passado. No caso de –10.2, retornou –11. Já Fix, retorna, no caso de números negativos, o primeiro inteiro, maior ou igual ao parâmetro passado. No caso de –10.2, retornou –10. Observe esta linha de código: MsgBox Fix (-7.35) & Chr(13) & MsgBox Int(-7.35) Esta linha gera a mensagem indicada na Figura 3.26.
Com isso, terminamos a nossa apresentação sobre as principais funções para a conversão de tipos de dados. No próximo item, estaremos analisando mais algumas funções do VBScript, para operações com dados do tipo String e do tipo Data/Hora. |
||||||||||||||||||||||||||||||||||
« Lição anterior | Δ Página principal | ¤ Capítulos | Próxima lição » |
CURSO PROFISSIONALIZANTE DE INFORMÁTICA |
São 68 Cursos -
3440 Vídeo Aulas - 396:07 horas |
Domine Todos os Recursos de Informática Exigidos pelo Mercado de Trabalho, Através de Exemplos Práticos, Completos e Úteis, Detalhadamente Explicados - Passo a Passo |
Para Todos os Detalhes, Acesse:
https://juliobattisti.com.br/informatica-curso-completo-1v.asp |
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI (Online, Vitalício, Prático e Atualizado)! |
|
NÃO PROCURE VAGAS, SEJA PROCURADO! |
Para Todos os Detalhes, Acesse:
https://juliobattisti.com.br/curso-infra-ti.asp
|
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2025 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI