Arquivo

Archive for the ‘Códigos Prontos’ Category

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

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

 

VBA criar pasta em qualquer computador

Na última enquete o assunto de vba criar pasta ficou em segundo lugar, pois em primeiro foi votado para aprender a desligar um computador.

Com este código você poderá testar se existe uma pasta no computador. E se não existir você irá com vba criar uma pasta para:

  • inserir backups
  • chaves
  • salvar planilha

diretorio existe?

Para que serve isso ???

 

Em vários momentos profissionais surgiram necessidades como esta que serviram para:

  • Em uma multinacional vendedores deveriam ter um banco de dados em um diretório de seus computadores e tudo criado pelo vba.
  • Em um hospital uma planilha deveria acessar o banco informix e filtrar dados para envio de e-mails à pacientes em outra planilha em uma pasta na rede
  • Em um restaurante uma planilha era executada a cada 10 minutos e enviando dados a planilhas “filhas” para o dropbox com informações de clientes

Existe diversas situações, mas de imediato lembro destas

vba criar pasta

 

Como usar este código vba criar pasta

 

Dim ConferePasta As String

ConferePasta = "C:\NOVO"

If Dir(ConferePasta, vbDirectory) = "" Then

MkDir ConferePasta

MsgBox "O diretório: " & ConferePasta & " foi criado!", vbInformation, "AVISO"

End If

 

Existe diversas formas de verificar e criar pastas usando vba, mas acredito que esta seja a mais simples.

Você ainda pode adicionar um else caso diretório já exista.

Agora basta você copiar e usar!!

Video explicativo com passo a passo

 

Neste vídeo além de explicar eu mostro o contexto de salvar a planilha na pasta, aproveite!

 

 

Sucesso e abraço a todos.

Como desligar o computador com VBA

 


desligar o computador com VBA

Após longo tempo trabalhando nos bastidores venho trazendo novidades, das quais vocês votaram na última enquete.

A ideia do código veio através do colega que eu conheci aqui pelo site, muito obrigado Vagner Beraldo. E recentemente ao abrir o código que ele enviara percebi que o mesmo somente reiniciava o computador com vba e este fato me deixou com vontade de mais…

Ao começar a pesquisa percebi a dificuldade… A maioria dos códigos na internet estavam voltados para o Windows xp e não funcionavam nas versões atuais.

Enfim consegui, testei e após o sucesso coloco aqui abaixo:

 Opção 1 – Desligar o computador com vba

'*******************DESLIGAR*********************
Public Function TurnOff()
   Shell "shutdown -s -t 02", vbHide
End Function

Opção 2 – Reiniciar com vba

'*********************REINICIAR***********************
Public Function Reboot()
   Shell "shutdown -r -t 02", vbHide
End Function

Opção 3 – Forçar reinicio

'**********************FORCE************************
Public Function ForceReboot()
   Shell "shutdown -r -f -t 02", vbHide
End Function

Vídeo Excel com Vba

Abaixo segue a fonte:
ianfrater.wordpress.com/

 

VBA Copiar colar arquivos diferentes

 

copiar colar vba

Vocês votaram na enquete aqui do site excel e vba e em segundo lugar ficou o assunto VBA Copiar colar arquivos diferentes.
A maneira que demonstro é uma mais avançada e também com menos código.


Porém se você não gostar ou achar complicado aqui mesmo no site há outras maneiras (passo1 e passo2)que envolvem copiar célula por célula com um loop.

Você que escolhe a melhor maneira para trabalhar excel com vba.

 

1 – Vamos ao codigo VBA Copiar Colar arquivos diferentes:

________________________________________________________

 

 

Sub COPIAR_COLAR_ARQUIVO_DIFERENTES()
'Declarações

Dim appExcel As Excel.Application
Dim wb As Excel.Workbook

'A Aplicação Excel é criada aqui:

Set appExcel = CreateObject("Excel.Application")

'A linha abaixo é importante: eu estou dizendo que todo o processo seja invisível.
'Talvez para testes seja importante deixar como True e assim acompanhar o processo

appExcel.Visible = False

'Note que, na linha abaixo, foi adicionado um Workbook (um plan)
'E esse workboook fica nomeado como "wb"

Set wb = appExcel.Workbooks.Add

'Agora para simplificar o processo, também vou gravar o nome da planilha origem

Set oldPlan = Workbooks("planilha_antiga.xlsm").Worksheets("Plan1")

'Então copio todos os dados da tabela

oldPlan.Range("A2").CurrentRegion.Copy

'Na linha abaixo eu colo os dados na nova planilha (lembre-se do "wb")

wb.Worksheets("Plan1").Range("A1").PasteSpecial xlPasteValues

'Nas linhas abaixo eu salvo a planilha no mesmo diretorio que a planilha antiga

diretorio = ThisWorkbook.Path & "\"
nome = "exemplo.xls"
appExcel.DisplayAlerts = False
wb.SaveAs Filename:=diretorio & nome, FileFormat:=xlNormal

'Agora eu elimino o processo aberto do excel

appExcel.Quit

'E finalizado as declarações

Set wb = Nothing
Set appExcel = Nothing

End Sub

 

2 – Vídeo Demonstrativo

 

 

Como Fazer o Excel Falar

O artigo de hoje é  mais curto que os últimos entretanto não deixa de ser interessante: fazer o excel falar. Uma curiosidade apresentada por um colega e leitor do Blog  Vagner Vieira Beraldo!

Muitos usam o recurso de mensagens de bom dia, alertas e avisos por escrito na tela usando o MsgBox, mas que tal você os mesmos alertas, avisos e etc utilizando o recurso do som! É no mínimo interessante, não?!

 

excel falar

 

Que tal Fazer Seu Excel Falar?

 __________________________________________
Sub Hello
     Application.Speech.Speak ("hello")
End Sub
__________________________________________
O único ponto negativo é que só existe dois idiomas para leitura dos textos: o ingles e o espanhol. (veja no vídeo como configurar)
Ao pesquisar pela internet descobri no fórum da microsoft que por enquanto não há interesse de desenvolver leitura em português.

Detalhando Formularios Vba 2

formularios vba          Neste artigo sobre Fomularios VBA você encontrará:

Abrir e Fechar formulário
Limpando todos os campos do formulário
Como colocar barra de rolagem
Imprimir formulário

No artigo Formularios Vba 1 coloquei como alterar o tamanho do formulário, como tirar o botão fechar e como inserir gráficos no formulário. Neste post quero finalizar o assunto e eliminar as principais dúvidas referentes a formulários.

 

Abrir e Fechar Formulário VBA

 

Para abrir formulários vou colocar aqui duas opções: abrir com um botão ou diretamente ao abrir a planilha.

Vou começar com o mais simples, para fechar um formulário bastar colocar: unload Nome_formulário

Para abrir basta colocar o “Nome_Formulario”.Show, abaixo segue imagem onde fica o nome do formulário.

nome formulario vba

Então agora que sabe como abrir formulário cabe decidir se deseja colocar em um botão na planilha ou abrir direto, para colocar em um botão é só inserir o código de abrir em um módulo e relacionar com o botão.

Para abrir o formulario direto, basta colocar o código conforme a imagem abaixo:

 

abrir formulario vba

Segue vídeo para exemplificar:

 

 

 

 

Limpando Todos Os Campos Do Formulário

 

Abaixo segue código para limpar todos os campos textbox, combobox e radiobox. Devo alertar para os nomes dos controles, pois o código irá varrer no formulário todos os campos e conforme o nome que você colocou irá limpar.

 

codigo excel e vba

limpar formulario vba

 

Resumindo o codigo… Se tiver algum campo no formulario que inicie com text ou txt irá limpar, mesma coisa para os optionButton e combobox.

 

Como Colocar Barra De Rolagem

 

O código é bem simples basta clicar duas vezes no formulário e copiar e colar o código abaixo.

 

Private Sub UserForm_Initialize()

Me.ScrollBars = fmScrollBarsVertical
Me.ScrollHeight = Me.InsideHeight * 2

End Sub

 

Imprimir Formulario

 

Para imprimir o formulário atual coloque o código:

‘Me.PrintForm

 

Se deseja imprimir outro formulário, então coloque:

nomeFormulario.PrintForm