Dicas de autofiltro no vba

Pensei neste artigo:”Dicas de autofiltro no vba”, pois a maioria apenas conhece o uso, muito interessante, nas planilhas. Mas e nos códigos?
Neste primeiro momento não quero descrever o porque e quando usar, mas qual a importância ou o cuidado de desativar os autos filtros nos códigos VBA?

imagem dicas de autofiltro no vba

Problema ou Solução “autofiltro”

Dependendo do código, ainda mais se envolver cópia, o autofiltro vai influenciar muito. Em outros casos talvez não influencie, mas pensando no seu usuário final talvez seja melhor deixar a planilha sem filtros para evitar equívocos de interpretação de dados.

 

Benefícios autofiltro no vba

Além do uso clássico que por sinal ajuda muito, podemos também usufruir do autofiltro para “pesquisar” e selecionar itens em uma lista, ao invés de verificar item por item.

 

imagem vamos aos codigos vba

Desabilitar o auto-filtro faça:

Sub FILTRAR_E_DESABALITAR()
  Rows(4).AutoFilter
  ActiveSheet.AutoFilterMode = False
End Sub

Dicas de autofiltro no vba -> Algumas formas de filtrar:

Por uma palavra chave:
Neste exemplo a tabela de cidades será filtrada pela palavra “PALMAS” na coluna 2

'FILTRAR CAMPO 2 PELO CRITERIO "PALMAS"
Range("a4").AutoFilter Field:=2, Criteria1:="Palmas"

Exemplo para limpar todos os filtros utilizados em uma tabela:

'LIMPAR TODOS OS FILTROS
ActiveSheet.ShowAllData

Código vba demonstrando múltiplos autofiltros:

'MULTILPLOS FILTROS
Range("a4").AutoFilter Field:=2, _
Criteria1:=Array("São Paulo", "Manaus"), _
Operator:=xlFilterValues

 

Segue Vídeo:

Trabalhar com horas no VBA – Exemplo Jornada Ponto

23/04/2017 Comentários desligados

Trabalhar com Horas no VBA é bastante extenso, mas engana-se quem acha que é mais difícil que o próprio Excel…

Trabalhar com Horas no VBA

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

 

excel jornada ponto

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:

 

Carregar imagens dentro da propria planilha

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.

load picture shape

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.

 

load picture dentro da planilha do excel

 

Passo 4  – Usando a “força”: Formulário + Imagem

 

Imagens Dentro da Propria Planilha

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

Validar e Formatar CPF

 

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 ??

 

vba 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

 

validar cpf com vba

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:

excel validacao

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

 

cores no vba

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

 

codigo vba cor

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

 

mudar cor

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

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:

formatar cor

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.

 icones para formulários

 

 5 Dicas para você não perder tempo

  1.  A maioria dos sites possuem filtros de pesquisa, então escolha free para comercio
  2.  Como a maioria dos sites são estrangeiros use palavras em ingles: save, edit, back, next, delete
  3.  Sempre busque um padrão de figuras no seu sistema vba, ou seja se for 3d ou sombreado então todas devem ser assim
  4. 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
  5. 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

imagens para sistema

 

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:

imagens vba

 

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!

 

Programar abertura de planilha

É 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:

 

abrir excel automático

 

Etapa 1 dentro do Excel – Código Principal

 

foco no código

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

 

 

inserir modulo vba

 

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

 

executar vba automático

 

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

 

agendador de tarefas excel

 

Usando o Windows 7, 8 ou 10 você pode apertar no teclado a tecla Windows e digitar “agendador de tarefas”.

tecla windows

 

Assim que você clicar no “Agendador de Tarefas” irá abrir uma tela como imagem abaixo:

 

tutorial windows macro

 

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.

 

macro automática

 

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.

 

macro abrir sozinha

 

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!

 

abrir vba automatico

 

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)

 

coo usar o agendador de tarefas

 

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.variáveis de objeto

 

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?

variável vba

 

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…

 objeto com vba

 

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.

 

vba avançado

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”)  :

 

 

variáveis de objeto no vba

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

exemplos de vba

 

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.

 

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!

retirar imagem da planilha

 

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!

tirar figuras do excel

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.

formato moeda no textboxO 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

máscara moeda vba

formatação formulario

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