Trabalhar com horas no VBA – Exemplo Jornada Ponto
Trabalhar com Horas no VBA é bastante extenso, mas engana-se quem acha que é mais difícil que o próprio Excel…
Pois é, isso mesmo, calcular horários, saldos e etc é muito mais fácil no VBA. Isso porque no VBA é mais simples de calcular horas negativas, transformar decimal em horas e etc.
Requisitos:
• Variaveis com VBA
• If e suas variações
• Conversões
Logica por trás dos códigos
O VBA possui dezenas de funções para facilitar, mas só é preciso diminuir uma hora de outra!
Entretanto quando temos um problema quando temos “batidas” (principalmente no início ou meio do expediente) que ocorrem após virada da noite.
Para facilitar o entendimento, vamos pegar um exemplo, um expediente com mais de 12h iniciando as 19h até as 8h.
Casos assim é preciso verificar se a hora inicial, ou intermediária é maior que a hora inicial e se for então vamos adicionar 24h nas horas posteriores
varCalculo = 19h – 08h
varCalculo = 19h – (08h + 24h)
var calculo = 13h de jornada
Na verdade, a dificuldade de manipular as horas não está no código em si, mas na lógica!
Trabalhar com horas no VBA (cálculo jornada ponto)
Segue código para ver na prática:
'inicialmente verificamos é um registro de duas batidas ou quatro, se for duas então If horaR1 <> 0 And horaR2 <> 0 And horaR4 = 0 And horaR3 = 0 Then If CDate(horaR1) > CDate(horaR2) Then horaR2 = CDate(horaR2) + CDate("23:59:00") + CDate("00:01:00") End If 'caso seja um registro de quatro batidas… ElseIf horaR1 <> 0 And horaR4 <> 0 Then 'Se a primeira hora é maior que a segunda…então todos os registros posteriores serão adicionados 24h If CDate(horaR1) > CDate(horaR2) Then horaR2 = CDate(horaR2) + CDate("23:59:00") + CDate("00:01:00") horaR3 = CDate(horaR3) + CDate("23:59:00") + CDate("00:01:00") horaR4 = CDate(horaR4) + CDate("23:59:00") + CDate("00:01:00") 'Se for a segunda hora maior que o restante…então todos os registros posteriores serão adicionados 24h, hora3 e hora4 ElseIf CDate(horaR2) > CDate(horaR3) Then horaR3 = CDate(horaR3) + CDate("23:59:00") + CDate("00:01:00") horaR4 = CDate(horaR4) + CDate("23:59:00") + CDate("00:01:00") 'E por último verificamos se hora 3 maior que hora 4, se verdade então ElseIf CDate(horaR3) > CDate(horaR4) Then horaR4 = CDate(horaR4) + CDate("23:59:00") + CDate("00:01:00") End If End If
Após esse código de verificações basta diminuir as horas entre as batidas.
Lembrando que cada variável horaR1, horaR2 … são variáveis com valores de horas.
Vídeo Para Maior Entendimento
Como Carregar Imagens Dentro da Propria Planilha
Recentemente eu recebi o seguinte e-mail: “ Como carregar imagens dentro da propria planilha ??”. Então…
“Há muito tempo em uma galáxia muito distante…”
Essa é uma dúvida que atormenta vários entusiastas em VBA! E aqui você vai conseguir achar sua resposta.
Logo se você estava tentando saber como passar seu sistema para o cliente com as imagens (loadpicture) dentro da própria planilha chegou uma nova esperança!
Passo 1 – Faça seu formulário:
Conforme a imagem acima pegue a sua “Caixa de Ferramentas” e crie um “Controle de Imagem” e não esqueça de dar um nome (Name), pois vamos utiliza-lo mais tarde
Como exemplo você pode usar Image1
Passo 2 – Função API
Essa função API é o grande trunfo para a funcionalidade de carregar imagens Dentro da Propria Planilha , esta foi desenvolvida pelo Stephen Bullen.
Copie o código abaixo, crie um módulo em seu projeto vba e cole na integra.
Option Explicit Option Compare Text ''' User-Defined Types for API Calls 'Declare a UDT to store a GUID for the IPicture OLE Interface Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type 'Declare a UDT to store the bitmap information Private Type uPicDesc Size As Long Type As Long hPic As Long hPal As Long End Type '''Windows API Function Declarations 'Does the clipboard contain a bitmap/metafile? Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long 'Open the clipboard to read Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long 'Get a pointer to the bitmap/metafile Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long 'Close the clipboard Private Declare Function CloseClipboard Lib "user32" () As Long 'Convert the handle into an OLE IPicture interface. Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long 'Create our own copy of the metafile, so it doesn't get wiped out by subsequent clipboard updates. Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long 'Create our own copy of the bitmap, so it doesn't get wiped out by subsequent clipboard updates. Declare Function CopyImage Lib "user32" (ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long 'The API format types we're interested in Const CF_BITMAP = 2 Const CF_PALETTE = 9 Const CF_ENHMETAFILE = 14 Const IMAGE_BITMAP = 0 Const LR_COPYRETURNORG = &H4 Function PastePicture(Optional lXlPicType As Long = xlPicture) As IPicture 'Some pointers Dim h As Long, hPicAvail As Long, hPtr As Long, hPal As Long, lPicType As Long, hCopy As Long 'Convert the type of picture requested from the xl constant to the API constant lPicType = IIf(lXlPicType = xlBitmap, CF_BITMAP, CF_ENHMETAFILE) 'Check if the clipboard contains the required format hPicAvail = IsClipboardFormatAvailable(lPicType) If hPicAvail <> 0 Then 'Get access to the clipboard h = OpenClipboard(0&) If h > 0 Then 'Get a handle to the image data hPtr = GetClipboardData(lPicType) 'Create our own copy of the image on the clipboard, in the appropriate format. If lPicType = CF_BITMAP Then hCopy = CopyImage(hPtr, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG) Else hCopy = CopyEnhMetaFile(hPtr, vbNullString) End If 'Release the clipboard to other programs h = CloseClipboard 'If we got a handle to the image, convert it into a Picture object and return it If hPtr <> 0 Then Set PastePicture = CreatePicture(hCopy, 0, lPicType) End If End If End Function Private Function CreatePicture(ByVal hPic As Long, ByVal hPal As Long, ByVal lPicType) As IPicture ' IPicture requires a reference to "OLE Automation" Dim r As Long, uPicInfo As uPicDesc, IID_IDispatch As GUID, IPic As IPicture 'OLE Picture types Const PICTYPE_BITMAP = 1 Const PICTYPE_ENHMETAFILE = 4 ' Create the Interface GUID (for the IPicture interface) With IID_IDispatch .Data1 = &H7BF80980 .Data2 = &HBF32 .Data3 = &H101A .Data4(0) = &H8B .Data4(1) = &HBB .Data4(2) = &H0 .Data4(3) = &HAA .Data4(4) = &H0 .Data4(5) = &H30 .Data4(6) = &HC .Data4(7) = &HAB End With ' Fill uPicInfo with necessary parts. With uPicInfo .Size = Len(uPicInfo) ' Length of structure. .Type = IIf(lPicType = CF_BITMAP, PICTYPE_BITMAP, PICTYPE_ENHMETAFILE) ' Type of Picture .hPic = hPic ' Handle to image. .hPal = IIf(lPicType = CF_BITMAP, hPal, 0) ' Handle to palette (if bitmap). End With ' Create the Picture object. r = OleCreatePictureIndirect(uPicInfo, IID_IDispatch, True, IPic) ' If an error occured, show the description If r <> 0 Then Debug.Print "Create Picture: " & fnOLEError(r) ' Return the new Picture object. Set CreatePicture = IPic End Function Private Function fnOLEError(lErrNum As Long) As String 'OLECreatePictureIndirect return values Const E_ABORT = &H80004004 Const E_ACCESSDENIED = &H80070005 Const E_FAIL = &H80004005 Const E_HANDLE = &H80070006 Const E_INVALIDARG = &H80070057 Const E_NOINTERFACE = &H80004002 Const E_NOTIMPL = &H80004001 Const E_OUTOFMEMORY = &H8007000E Const E_POINTER = &H80004003 Const E_UNEXPECTED = &H8000FFFF Const S_OK = &H0 Select Case lErrNum Case E_ABORT fnOLEError = " Aborted" Case E_ACCESSDENIED fnOLEError = " Access Denied" Case E_FAIL fnOLEError = " General Failure" Case E_HANDLE fnOLEError = " Bad/Missing Handle" Case E_INVALIDARG fnOLEError = " Invalid Argument" Case E_NOINTERFACE fnOLEError = " No Interface" Case E_NOTIMPL fnOLEError = " Not Implemented" Case E_OUTOFMEMORY fnOLEError = " Out of Memory" Case E_POINTER fnOLEError = " Invalid Pointer" Case E_UNEXPECTED fnOLEError = " Unknown Error" Case S_OK fnOLEError = " Success!" End Select End Function
Passo 3 – Carregar Imagens Dentro da Propria Planilha
Insira uma guia em sua planilha e cole as imagens que você irá usar.
Agora nomeie a sua nova guia, como exemplo eu usei “Produtos”
Nomeie também as imagens que você colou em sua planilha.
Passo 4 – Usando a “força”: Formulário + Imagem
Agora criem um botão em seu formulário e clique duas vezes para inserir o código abaixo:
Private Sub CommandButton1_Click() Worksheets("Produtos").Shapes("bb-8").CopyPicture Set Image1.Picture = PastePicture(xlPicture) End Sub
Observem que para funcionar é muito importante os nomes utilizados:
- Primeiro para localizar a imagem precisamos do nome da guia e nome da imagem
- Em segundo precisamos do nome do controle de imagem no formulario (passo1)
Vídeo com Detalhes
Para ver detalhes de como carregar imagens dentro da propria planilha veja o vídeo! Ah e se gostaram não esqueçam de curtir e espalhar para os amigos!!!
Validar e Formatar CPF compacto e funcional
Você já precisou de código para validar e formatar CPF? Caso sua resposta seja afirmativa você já deve ter encontrado centenas pela internet! E infelizmente são:
- Códigos grandes
- Não diz o que faz cada passo
- Não diz como implementar
- E o conceito está complexo
Então como sempre quero ajudar e inovar!! Não sei se irei conseguir abranger toda a lista acima, mas este será meu objetivo neste artigo.
Pra que Validar e Formatar CPF ??
Uma das principais funções de um sistema (veja como criar um) é a validação dos dados antes de gravá-los.
Devemos lembrar dos diversos cadastros de clientes que utilizam do CPF ou RG para encontrar seus clientes e sem um número válido sua base de dados está correndo risco.
Entendendo o código
Para entender o conceito é ideal que vejam o vídeo, mas mesmo assim tentarei explicar por aqui.
Em um número de CPF os dois últimos dígitos são os números verificadores. Estes são responsáveis para informar se a sequencia está correta e baseado nisso:
Para o DV1 (primeiro digito verificador) vamos:
- Multiplicar todos os números que compõem o CPF (com exceção dos dois dígitos verificadores) por usas respectivas posições
- Somar o resultado
- Dividir por 11 (total de dígitos) e pegar o resto
Que deve ser igual ao primeiro digito verificador do CPF (ver primeiro quadro amarelo).
Para o DV2 (segundo digito verificador) vamos:
- Desconsiderar a primeira posição
- Multiplicar todos os números que compõem o CPF (com exceção do último digito verificador) por usas posições – 1
- Somar o resultado
- Dividir por 11 (total de dígitos) e pegar o resto
Que deve estar idêntico ao segundo digito verificador do CPF (ver segundo quadro amarelo)
Observação: No cálculo de ambos dígitos verificadores se o resto for igual a 10, então vamos considerar como zero
Código vba de cpf super compacto
Para Validar e Formatar CPF o código abaixo está dividido em duas partes: pré-formatação e validação:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) numCPF = TextBox1.Value numCPF = Replace(numCPF, ".", "") numCPF = Replace(numCPF, "-", "") If Val(numCPF) = 0 Or validaCPF(numCPF) <> "OK" Then TextBox2.Value = "cpf invalido" Exit Sub Else TextBox1.Value = Left(numCPF, 3) & "." & Mid(numCPF, 4, 3) & "." & Mid(numCPF, 7, 3) & "-" & Right(numCPF, 2) TextBox2.Value = "cpf válido" End If End Sub Function validaCPF(numCPF) If Len(numCPF) < 11 Then numCPF = String(11 - Len(numCPF), "0") & numCPF For caracter = 1 To 9 DV1 = Val(Mid(numCPF, caracter, 1)) * caracter + DV1 If caracter > 1 Then DV2 = Val(Mid(numCPF, caracter, 1)) * (caracter - 1) + DV2 Next DV1 = Right(DV1 Mod 11, 1) DV2 = Right((DV2 + (DV1 * 9)) Mod 11, 1) If Mid(numCPF, 10, 1) = DV1 And Mid(numCPF, 11, 1) = DV2 Then validaCPF = "OK" End Function
Entenda mais: veja o vídeo
Cores No VBA – Tutorial
Recentemente recebi uma dúvida sobre o assunto cores no vba. Inicialmente após pensar em uma resposta simples percebi que seria interessante dividir com todos. Talvez seja a dúvida de outra pessoa.
Com este artigo pretendo demonstrar:
- Como evitar a armadilha da macro
- Duvida de um leitor: como verificar/contar as cores pintadas nas celulas
- Várias formas de se fazer
Cores No Vba: Armadilha na macro
Pintar celulas, guias ou fontes não é difícil visto que é possível fazer com macros, mas neste atalho pode te levar em situações complicadas.
Por mais que o seu código seja simples você poderá ver no vídeo a brutal diferença do código feito manualmente e o gerado automaticamente pelo Excel.
E como consequência:
- Código muito grande
- Difícil interpretação
- Difícil manutenção
Formas Simplificadas de Usar as Cores
Por padrão as macros irão trazer qualquer cor no formato decimal, mas além deste podemos utilizar mais três formas:
- Decimal
- RGB
- Tabela ColorIndex
- Cores no vba padrões
Ou seja, podemos utilizar destas 4 maneiras para colorir as celulas, guias (sheet) e fontes. Abaixo segue exemplos.
Codigos para Mudar Cor da Celula
Veja como é simples pintar uma celula!
Primeiro selecionamos a célula (range ou cells), depois no referimos ao seu interior (.interior) e depois a sua cor (.color ou .colorindex):
Cores no VBA Básicas
Range("A2").Interior.Color = vbBlue Range("a3").Interior.Color = vbYellow Range("a4").Interior.Color = vbMagenta Range("a5").Interior.Color = vbRed Range("a6").Interior.Color = vbGreen Range("a7").Interior.Color = vbCyan Range("a8").Interior.Color = vbWhite Range("a9").Interior.Color = vbBlack
ColorIndex
Indice de 56 Cores (tabela de cores no material exclusivo ebook):
Range("a2").Interior.ColorIndex = 43
RGB
Range("a2").Interior.Color = RGB(153, 204, 0)
Forma Decimal
Range("a2").Interior.Color = 51510
Alterar Cor Das Fontes
Para altera a coloração da fonte através da do vba basta usar uma das maneiras já descritas anteriormente como nas células:
Range("B2").Font.ColorIndex = 23 'ou Range("B2").Font.Color= vbRed
Formatar Cor das Sheets
Nas guias do excel também não precisamos utilizar macros basta identificar a guia seguido da palavra TAB, exemplo:
Sheets("Plan1").Tab.Color = 51510 ou Sheets("Plan1").Tab.Color = RGB(153, 204, 0)
Como Identificar as Cores
A seguir vou colocar alguns exemplos para verificar as cores nas células.
Verificar cor basica
If Range("A2").Interior.Color = vbBlue Then MsgBox "Azul" End if
Verificar RGB
varCor = Range("a2").Interior.Color varVm = varCor Mod 256 varVd = (varCor \ 256) Mod 256 varAz = (varCor \ 65536) Mod 256 varRGB = "Vermelho =" & varVm & ", Verde =" & varVd & ", Azul =" & varAz MsgBox varRGB
Verificar cor tabela indice
If Range("A2").Interior.ColorIndex = 41 Then MsgBox "Azul Médio" End if
Observações:
Evitar verificar cores por colorIndex pois se a cor (rgb) estiver fora do alcance o vba indicará a cor mais próxima.
Para retirar qualquer “pintura” basta colocar xlColorIndexNone
Enfim para maior entendimento eu sugiro fortemente a visualização do vídeo.
Vídeo:
Icones para formulários
Neste artigo icones para formulários além de querer facilitar sua busca pretendo incentivar a fazer belos sistemas!
Não entendam errado, não tenho nada contra um botão simples: “gravar”. Antes simples e funcional do que o contrário, mas quando olhamos um formulario com imagens percebemos um certo capricho.
5 Dicas para você não perder tempo
- A maioria dos sites possuem filtros de pesquisa, então escolha free para comercio
- Como a maioria dos sites são estrangeiros use palavras em ingles: save, edit, back, next, delete
- Sempre busque um padrão de figuras no seu sistema vba, ou seja se for 3d ou sombreado então todas devem ser assim
- Ao escolher não coloque icones sem sentido da função. Exemplo exagerado: não escolha uma imagem de “carro” para a função alterar. Exemplo 2: um grafico pizza para salvar
- Lembre-se que os forms em vba são bem restritos para imagens: gif, bmp e etc. Ou seja png, jpg não vale!! Se for necessário use um editor de imagem.
Dúvidas veja vídeo abaixo
Sites com Imagens para botões VBA
Para ajudar em sua escolha ou busca eu coloco abaixo alguns sites muito bons para escolher a melhor imagem para seu formulário:
- http://findicons.com
- http://www.iconarchive.com
- https://www.iconfinder.com/
- http://www.iconesbr.net/
- http://www.iconseeker.com/
- http://www.iconspedia.com
Download Icones para formularios
E para simplificar sua busca e deleite da galera coloco abaixo para download várias figuras para você utilizar em seu sistema vba.
Faça seu download: imagens para formularios vba
Vídeo para curtir e ver detalhes!
Confira o vídeo para ver os detalhes do artigo e dicas adicionais com passo a passo!
Programar Abertura de Planilha Automaticamente
Como programar abertura de planilha automaticamente? Essa é uma pergunta constante nos sites de ajuda VBA.
Tanto que quando recebo e-mails sobre esse assunto até dou duas opções:
- Executar o excel automaticamente por código vba
- Abrir o excel automático pelo agendador do Windows
Neste artigo vamos ver a segunda opção, pois a primeira pode ser vista em outros sites e apesar de ser mais simples é necessário que o processo do Excel fique aberto.
Você irá perceber que para funcionar quase não precisa de código, mas como envolve uma quantidade de passos eu coloquei várias imagens!
É muita tecnologia?!
Então antes de continuar detalhando sobre o assunto, é de convir, mesmo nunca tendo feito este código, que a idéia é muito interessante…
Deixar o Excel tão automático que não é preciso nem abrir!!!
E podemos expandir ainda mais a partir do assunto principal:
- Abrir periodicamente: diário, semanal, mensal
- Repetidamente conforme minutos ou horas
- Ao inicializar o computador
- E etc
Programar abertura de planilha
Antes de descrever cada passo é necessário enxergarmos o processo como um todo:
Etapa 1 dentro do Excel – Código Principal
Então vamos começar pelo fim do processo ou seja, com o código principal. Para fins didáticos meu procedimento será apenas uma mensagem.
Então irei criar um módulo conforme imagem abaixo.
Aperte ALT + F11 em sua planilha e clique com botão direito em cima da Plan1 e selecione Inserir > Módulo
Dentro deste módulo (tela branca que irá aparecer) vou inserir minha funcionalidade principal:
Sub EXECUTAR_AUTOMATICO() 'MEU CÓDIGO PRINCIPAL MsgBox "Olá Bem vindos ao ExceleVBA.com.br" 'CÓDIGO PARA FECHAR PLANILHA APÓS EXECUTAR Application.DisplayAlerts = False Application.Quit End Sub
Importante: Perceba que nas linhas acima eu programei para o Excel fechar após realizar sua principal função. Isso é necessário para não ficar nenhum processo aberto do Excel.
Etapa 2 dentro do Excel – Código Secundário
Este procedimento irá executar assim que abrir a planilha e é responsável por chamar o procedimento principal.
Então vamos dar dois cliques onde diz EstaPasta_de_trabalho e inserir o código abaixo:
Private Sub Workbook_Open() Call EXECUTAR_AUTOMATICO End Sub
Percebam que EXECUTAR_AUTOMATICO é o nome do código principal feito na etapa 1.
Agora é necessário salvar a planilha, no meu caso vou chamar de Plan_Automatica.xls
Importante: Sempre que precisei eu usei a extensão .xls. Ao fazer testes com xlsm o agendador não abriu/executou a planilha.
Etapa 3 no Windows – Agendador de Tarefas
Usando o Windows 7, 8 ou 10 você pode apertar no teclado a tecla Windows e digitar “agendador de tarefas”.
Assim que você clicar no “Agendador de Tarefas” irá abrir uma tela como imagem abaixo:
No menu da direita selecione a opção “Criar tarefa…”
Na próxima tela que abrir preencha os dados conforme os campos marcados na imagem abaixo.
Em seguida selecione a guia “Disparadores” e clique em “Novo”. Nesta tela vamos marcar qual a frequência que nossa planilha automática irá abrir.
Então nesta imagem eu selecionei os campos necessários para repetir a execução da planilha uma vez a cada dia iniciando as 23h.
Agora na próxima guia “Ações” vamos indicar o que desejamos abrir. Então clique em “Novo” e demonstre onde a sua planilha está salva!
Observação: Se o seu Windows for 64 bits e o seu excel for 32 bits então no campo do endereço do programa adicione o seguinte código:
%systemroot%\Syswow64\cmd.exe /C “endereço da planilha”
Dúvida ver vídeo explicativo.
A guia seguinte é a “Condições” e esta podemos pular (mas é bom você dar uma olhada).
E a última guia é a “Configurações” e é interessante você olhar o último campo que pergunta o que fazer caso o processo do Excel ainda esteja aberto (lembra que na etapa 1 nós fechamos o Excel)
E com isto finalizamos os passos para programar abertura de planilha automaticamente.
Agora é só curtir e caso tenha dúvidas veja o vídeo!
Vídeo Explicativo
Variáveis de objeto no vba
Variáveis de objeto é diferente de uma variável, independente do seu tipo.
As variáveis “normais” são como pequenas ferramentas e as usamos para armazenar dados temporariamente.
Creio que a maioria já teve contato com as variáveis que por sua vez contém apenas um valor momentaneamente.
Exemplo:
Salário = 0
A variável Salário contém apenas uma informação, no caso o número zero.
Entretanto dentro do vba podemos utilizar as variáveis de objeto auxiliando-nos como se fosse um capacho ou uma super caixa de ferramentas.
Isso porque ao invés de armazenar apenas uma informação podemos armazenar várias “características” do objeto que desejamos.
Mas que objeto é esse?
Para facilitar e visualizar esta definição podemos chamar de objeto todos os recursos inclusos dentro do Excel: a planilha, tabelas dinâmicas, células, formas, guias e etc… Ou seja, tudo de que utilizamos.
Senta que lá vem a história…
A maioria de nós que gostamos do VBA não gastamos muito tempo declarando as variáveis (“antecipadamente”), isso ocorre porque é necessário você saber de todas as variáveis antes de programar.
Entretanto geralmente gostamos de criar variáveis na adrenalina da lógica e acima da velocidade permitida do cérebro.
A maioria dos livros (e outros) imploram para declarar variáveis com os DIM. E no fundo há benefícios para isso:
- Baixo consumo e memória com variáveis específicas para seu uso
- Possibilidade se utilizar o autoCompletar aumento a velocidade de desenvolvimento.
Mas como funciona as variáveis de objeto?
Vamos imaginar que estamos programando e precisamos mudar de guia constantemente.
Normalmente você escreveria worksheets(“Plan2”) várias vezes, mas podemos melhorar isso escrevendo Guia no lugar de worksheets(“Plan2”) :
Ou seja, ao invés de escrever:
worksheets(“Plan2”).select
escreveremos:
guia.select
outro exemplo: no lugar de escrevermos:
worksheets(“Plan2”).Cells(2, “a”).Value
passamos a escrever
Guia.Cells(2, “a”).Value
[box type=”warning”] Para funcionar é necessário: [/box]
- Usar a Palavra SET
- Nome da variável
- Símbolo de igualdade, “=”
- Recurso do excel que deseja
Set Guia = Worksheets (“Plan2”)
Exemplos de variáveis de objeto
Aqui no site há diversos artigos com as mais variadas utilidades cuja funcionalidade está principalmente nas variáveis de objeto e o uso do for each
- Excluir Imagens do Excel
- Valores de slicer com VBA
- Ultimo Registro De Um Recordset VBA (consulta sql)
- VBA Copiar colar arquivos diferentes
- Inserir Gráfico Em Formulário VBA
- Vba Internet : listbox, radiobox, button…
- Excluindo modulo em outra planilha
- E etc
Em resumo podemos usar qualquer recurso do Excel em apenas uma palavra e assim ganhar tempo e melhorar o entendimento do código para futuras manutenções e melhorias.
Vídeo Demonstrativo
Excluir imagens do Excel (uma ou mais guias)
Hoje meu objetivo é ajudar as pessoas a excluir imagens do excel.
Em um artigo anterior, sobre imagens, eu demonstrei como manipula-las fazendo as girar, aumentar e etc.
Esta semana iniciei um novo projeto que se inicia com um pdf convertido em excel e em resumo:
- vou ter que formata-lo (pois os dados estão desorganizados),
- depois comparar com o banco de dados da empresa,
- transformar dados em informações
- e fazer com que qualquer pessoa possa usá-lo.
A primeira coisa a fazer é limpar as imagens que vieram do pdf! No meu caso é fácil porque as imagens estão em apenas uma Plan.
E logo pensei em como poderia ajudar mais… será que as pessoas precisam excluir as imagens do Excel? E se for preciso retirar de todas as guias do Excel?
Se a planilha tiver muitas figuras será muito irritante retirar todas da planilha manualmente!
Exemplo 1: excluir imagens do Excel
O código é ótimo, pois é pequeno e fácil de se utilizar! No caso abaixo (exemplo1) ele retira as imagens de todas as plans.
For Each guia In ActiveWorkbook.Worksheets() guia.Select guia.Shapes.SelectAll Shapes.Delete Next
Exemplo 2: retirar imagens de apenas uma guia
ActiveSheet.Shapes.SelectAll Selection.Delete
Segue vídeo com vba na prática
Agora é contigo! Mas lembre-se que nem todas as imagens são ruins!
Abração
Formato moeda no textbox enquanto digita
Este código formato moeda no textbox enquanto você digita funciona da mesma maneira do caixa eletrônico ou internet banking.
O visual do seu formulário vai mudar completamente com esta funcionalidade de interação com a pessoa que digita os valores monetários.
.
História do formato moeda no textbox?
Estava conversando com um amigo e o mesmo estava reclamando que não havia nada na internet em VBA que ajudasse para formatar o textbox enquanto digita.
Quando achava algo parecido era depois que a pessoa saia do campo ou em outra linguagem.
Então para ajudar resolvi eu mesmo fazer, ou seja, como vários outros códigos você só encontra aqui.
Mas afinal pra que serve isso?
E para quem ainda não entendeu basta dizer que o separador das casas (1000.) e a vírgula aparece automaticamente enquanto digita, sem precisar sair do textbox para visualizar a mudança
Código para copiar
Sub formataMoeda() valor = TextBox1.Value If IsNumeric(valor) Then If InStr(1, valor, "-") >= 1 Then valor = Replace(valor, "-", "") 'retira sinal negativo If InStr(1, valor, ",") >= 1 Then valor = CDbl(Replace(valor, ",", "")) 'retirar a virgula If InStr(1, valor, ".") >= 1 Then valor = Replace(valor, ".", "") 'para trabalhar melhor retiramos ponto Select Case Len(valor) 'verifica casas para inserção de ponto Case 1 numPonto = "00" & valor Case 2 numPonto = "0" & valor Case 6 To 8 numPonto = Left(valor, Len(valor) - 5) & "." & Right(valor, 5) Case 9 To 11 numPonto = inseriPonto(8, valor) Case 12 To 14 numPonto = inseriPonto(11, valor) Case Else numPonto = valor End Select numVirgula = Left(numPonto, Len(numPonto) - 2) & "," & Right(numPonto, 2) TextBox1.Value = numVirgula Else If valor = "" Then Exit Sub MsgBox "Número invalido", vbCritical, "Caracter Invalido" Exit Sub End If End Sub Function inseriPonto(inicio, valor) I = Left(valor, Len(valor) - inicio) M1 = Left(Right(valor, inicio), 3) M2 = Left(Right(valor, 8), 3) F = Right(valor, 5) If (M2 = M1) And (Len(valor) < 12) Then inseriPonto = I & "." & M1 & "." & F Else inseriPonto = I & "." & M1 & "." & M2 & "." & F End If End Function
Confesso que me diverti neste exemplo de VBA, fiz até para versão de Excel 2003!
E se vocês olharem bem na verdade é um código que trabalha com texto, um assunto bem trabalhado no ebook.
O código está pronto para ser utilizado! Agora é com você, se gostou então de uma “curtida” e/ou compartilhe.
Talvez você também ache interessante saber sobre Valores Monetários por Extenso , e neste artigo disponibilizei duas planilhas para download.
Segue vídeo explicativo