Вы находитесь на странице: 1из 400

28/7/2014 MACROS PARA EXCEL - VBA-

232

INDICE
VBA Excel - Função área.................................................................................................................................10
VBA Excel - Arredondas casas decimais para cima .......................................................................................10
VBA Excel - Verifica o formato personalizado da célula ......................................................... ............. ......10
VBA Excel verifica se a formatação personalizada é em Euro ......................................................................11
VBA Excel - Ver se existe ou não Formatação Condicional ..........................................................................11
Excel VBA - Extração de número de loto ......................................................................................................11

*Excel VBA - Loto - extrai seis números aleatórios ......................................................................................12


VBA Excel - Envia para lixeira determinado arquivo ..................................................................................12

VBA Excel - macro copia linhas da primeira até a ultima .............................................................................13


VBA Excel - macro conta linhas selecionadas (msgbox) ...............................................................................13
VBA Excel - deleta linhas/colunas em branco ..............................................................................................13
VBA Excel - atribui altura das linhas a uma seleção ....................................................................................14
VBA Excel Mostra a ajuda solicitada pelo ID ...............................................................................................14

VBA Excel - Exemplo de Ajuda (Show Help) ...............................................................................................15

Retorna o nome do usuário e nome máquina .................................................................................................15

Retorna o Número serial do HD do CPU .......................................................................................................16

Mostra o nível de segurança das macros ........................................................................................................16


Mostra os arquivos ativos na memória(Ram) .................................................................................................17
Mostra o total da memória ..............................................................................................................................18

Desabilita a macro do Excel ...........................................................................................................................19


Salva e encerra o Aplicativo Excel ................................................................................................................19
Mostra o dicionário de correção de uma planilha ..........................................................................................19
Lista todos os arquivos em C:\ ........................................................................................................................20
Todos os arquivos de programa instalado no computador .............................................................................21
Lista os arquivos em um determinado Diretório .............................................................................................22
Mostra o Diretório de determinado arquivo ...................................................................................................23
Cria um arquivo txt em C:\ chamado Meu Arquivo Ascii.txt ........................................................................24
Abre arquivo txt notepad e verifica a existência ............................................................................................25

Copia ColA da Plan2 no arquivo log.txt ..........................................................................................................26


Abre o Aplicativo NotePad (.EXE) .................................................................................................................26
Importa para o Excel um arquivo chamado Texto.txt ....................................................................................26

Abre um arquivo Log em determinado diretorio ............................................................................................26


Abre um determinado arquivo txt no Excel ....................................................................................................27
Abre um arquivo Txt e inseri texto .................................................................................................................27
Exibe e anima o assistente. .............................................................................................................................28
Exibe o Assistente do Office e o balão interno .............................................................................................28
28/7/2014 MACROS PARA EXCEL - VBA-

Chamar o assistente com determinada Animação ........................................................................................28

Chama o assistente com dados personalizados ............................................................................................30


Cria um atalho na área de trabalho ...............................................................................................................30

VBA Excel - Testa se a célula a ser filtrada é a escolhida ...........................................................................31


Deleta valores e linhas onde há determinados valores..................................................................................31
Retorna o endereço células AutoFiltro aplicado .........................................................................................32
Permite o AutoFiltro em planilhas protegidas. .............................................................................................33

Retorna o número de linhas filtradas ...........................................................................................................33

Separa determinados dados e transfere outra planilha ................................................................................33


Deleta dados referente a determinado criterio .............................................................................................35

Checa se o autofiltro esta inserido ou não ...................................................................................................36


Exemplo da propriedade AutoFilterMode ...................................................................................................36

Ajusta todas as colunas(A) do workbook medida 17.43 .............................................................................36


Ajusta a coluna de acordo com o nome inserido ........................................................................................37
Usando Userform e Label para AutoNumeração .......................................................................................37

Faz um Backup de determinadas planilhas ................................................................................................37

Faz um Backup com senha do arquivo aberto ...........................................................................................37

Faz um Backup na pasta B, Formato Ano_Mes_dia ...................................................................................38


VBA Excel - Chama as barras de menu desejadas ....................................................................................38
Busca determinada palavra em todas as planilhas .....................................................................................39

Busca e localiza determ palavra e oculta linha ou deleta ..........................................................................39

Busca e elimina palavras “mal” deriv “maldoso” da col 3 (c) ...................................................................40


Localiza na Col(A) número igual contido em (B1) ....................................................................................40
Cria uma linha de cabeçalho .......................................................................................................................40
Abre caixa de dialogo alinhamento de células ............................................................................................41
Abre caixa de dialogo suplementos .............................................................................................................41
Abre caixa de dialogo Fontes ......................................................................................................................41
Abre caixa de dialogo abrir arquivo sugerindo o arquivo ...........................................................................41
Exibe a calculadora do windows ................................................................................................................41

Substitui o caracter .....................................................................................................................................42


Mostra caracter no prefixo .........................................................................................................................42
Retorna o mapa de caracteres CharMap.exe .............................................................................................42
Retorna determinado caracter ....................................................................................................................42
VBA Excel - Célula intermitente (piscando) ..............................................................................................43
Seleciona a próxima célula em branco à Direita .......................................................................................43
Retorna quantidade de células usadas range(a1:a10) ................................................................................43

Testar a cél se é Empty, vázia, Null, Integer, Long, Single, Currency .....................................................44
Selecionar células (vba) .............................................................................................................................44
28/7/2014 MACROS PARA EXCEL - VBA-

Deleta determinada células ........................................................................................................................45


Deleta planilha se Célula A1 estiver vazia ................................................................................................45

Deleta linhas em branco .............................................................................................................................46

Selecionar células (vários exemplos) .........................................................................................................47


Aciona o cursor pula uma coluna e seleciona cel abaixo ..........................................................................47
Seleciona a próxima célula em branco à Direita .......................................................................................48

Retorna quantidade de células usadas range(a1:a10) .................................................................................48

Testar a cél se é Empty, vázia, Null, Integer, Long, Single,..rrency ..........................................................48


Selecionar células (vba) ...............................................................................................................................49
Deleta determinada células .........................................................................................................................49

Deleta planilha se Célula A1 estiver vazia .................................................................................................50

VBA Excel - código morse codificação e decodifição ...............................................................................50

VBA Excel - numera colunas alternadas a partia col6 ...............................................................................51


VBA Excel - Copia conteúdo para outras co.as ..........................................................................................51

VBA Excel - Deleta todas linhas na coluna...................................................................................................52


VBA Excel -seleciona sete colunas e sete linhas .........................................................................................52
VBA Excel - macro apaga caracteres ..........................................................................................................52
VBA Excel - macro seleciona a coluna até ult.a célula ...............................................................................53

Tornam visíveis todos os comentários ..........................................................................................................53


Mostra uma lista e o texto dos comentariosxistentes ....................................................................................53
Remove o nome do autor dos comentáriona planilha ...................................................................................54
Pede o texto do comentário, se houver dleta .................................................................................................55

Formata um comentario existente na ceula D17 ...........................................................................................56


Mostra numa msgbox (MSG) o nome. o autor dos comentários ...................................................................56
Formata as quatro primeiras letras docomentário em negrito .......................................................................57

Ajusta o tamanho de todos os comentários na planilha .................................................................................57


Concatena valores a partir de variáveis declaradas .......................................................................................58

Concatena os dados da coluna A2:A.. e B2:B na coluna c2 ..........................................................................58

VBA Excel - macro concatena duas colunas ................................................................................................59


Exemplo de Constantes ..................................................................................................................................59
Mostra o índice de variação (vba) .................................................................................................................59
Receita Bruta (contabilidade) ........................................................................................................................60
Copia 20 Linhas e cola em range pré-determinada .......................................................................................61
Copia ColA na ColB e ColB na ColC (concatena ABC) ..............................................................................61
Copia alternando uma linha na planilha .......................................................................................................61

Abre a caixa de dialogo “Cola Especial” ....................................................................................................62


Cola a palavra varias vezes na planilha ........................................................................................................62
28/7/2014 MACROS PARA EXCEL - VBA-

Copia uma célula com formato .....................................................................................................................62

Copia a ColA e vai inserindo quantas vezes for executada ..........................................................................63

Conduz o cursor e rola a tela para a primeira célula acima ..........................................................................63

Conduzem o cursor para cima, para baixo, direita e esquerda .....................................................................63


VBA Excel - encerra o aplicativo com dados na celula D1 .........................................................................64
Índice Lista liga função(array) meses e números .........................................................................................64

Decompõe palavras separadas por ífem v.....................................................................................................65

Decompõe uma frase de uma célula, cada palavra célula diferente ............................................................65

Relação de Auto-Correção de palavras do Excel (dicionário) ....................................................................66


Digitação faz uma ordem de tabulação ........................................................................................................66

Digitação ColC será aceita se número inserido ColC for > ColB ..............................................................67
Macros Excel VBA lista todas as LEtras_Drives_Existentes” ....................................................................68
Pocura e relaciona todos Arquivos do Excel/Word nos Diretórios .............................................................68
Macro Excel procura por Arquivo.EXE que estão ativos no Computador .................................................68
Procura por diretório se existe ou não ( função excel vba ) ........................................................................69
Cria um diretório em c:/ (Excel macros funções ) ......................................................................................70
Caminho e nome do diretório ......................................................................................................................70
Mostra os diretórios Excel contendo arquivos.xls (funções e procedimentos) ...........................................70

VBA Excel - Abre um diretório e salva um arquivo com nome escolhido ................................................72
VBA -Excel envia e-mail com anexos ........................................................................................................72

Macro Excel vba envia E-Mail ( tipo uma resposta automática ) ..............................................................75
Envia arquivo e mostra subject so 3 letras nome arquivo ..........................................................................75

Macro Excel envia determinada planilha via e-mail ..................................................................................76


Envia um e-mail com duplo click ...............................................................................................................76

Envia arquivo via e-mail endereços e assunto refere Células Excel ..........................................................77
Envia um e-mail ou conecta à determinada página Web ...........................................................................77

Envia um e-mail para um determinado e-mail ...........................................................................................78

Macro Excel com função Encriptar e Desencriptar dados ..........................................................................78


Propriedade Endereço ..................................................................................................................................79
Mostra um endereço de célula com valor absoluto .....................................................................................80

Macro excel vba mostra a última célula usada mesmo deletada ................................................................81
VBA - Excel macro descrimina um determinado erro ocorrido .................................................................81
VBA - Excel funciona se houver Erros na célula ........................................................................................81
VBA - Excel Deleta espaços entre as palavras ............................................................................................82
VBA - Excel - deleta os espaços ..................................................................................................................82
VBA Excel - Deleta os espaços nos caracteres inseridos ............................................................................82
VBA Excel mostra um modelo da estrutura Modo Case .............................................................................82
28/7/2014 MACROS PARA EXCEL - VBA-

VBA - Excel - Estrutura Case indica números correspondentes .................................................................83

VBA - Excel - Extenso número e moeda .....................................................................................................83


VBA Excel - Ver se existe ou não Formatação Condicional .......................................................................87
Excel - Formatação condicional (formulas) .................................................................................................88

VBA Excel - Arredondas casas decimais para cima ....................................................................................88


VBA Excel - Verifica o formato personalizado da célula ...........................................................................89
VBA Excel verifica se a formatação personalizada é em Euro ...................................................................89
Excel VBA - Formata o número da células selecionadas em Reais ............................................................90
VBA Excel - Copia e Cola formatos ............................................................................................................90
VBA Excel - Função área .............................................................................................................................90
VBA Excel - Alterna linhas grades ..............................................................................................................91
VBA Excel - Inseri hiperlink para navegar entre as planilhas ....................................................................91
VBA Excel - Inseri um Hiperlink na Célula A5 ...........................................................................................91
Excel VBA - inseri hiperlink para as navegar entre as planilhas ................................................................92
VBA Excel - Inseri hiperlink para navegação entre as planilhas ................................................................92
VBA Excel - Deleta todos os hiperlinks da coluna B Plan Ativa ...............................................................92

Sub Hyperlink_navegar_planilhas() .............................................................................................................93


VBA Excel - deleta todos os hiperlinks da planilha ativa ...........................................................................93

Excel VBA - Adiciona uma planilha e relaciona os hyperlink ...................................................................93


VBA Excel - aciona um link de e-mail celula A5 .......................................................................................94

VBA Excel - Calcula a velocidade média horária (Km/h) .........................................................................94


VBA Excel - Cabeçalho e Rodapé com numero de Páginas .......................................................................95

VBA Excel - macro copia linhas da primeira até a ultima ..........................................................................96


VBA Excel - macro conta linhas selecionadas (msgbox) ............................................................................96
VBA Excel - deleta linhas/colunas em branco ............................................................................................96
VBA Excel - atribui altura das linhas a uma seleção ..................................................................................97
VBA Excel - Deleta linhas condicionalmente .............................................................................................97

VBA Excel - Envia para lixeira determinado arquivo .................................................................................98


Personalizam a tabulação .............................................................................................................................98
VBA Excel - Retorna o nome do usuário do computador ...........................................................................99

Macro para contagem de abertura de um programa quantas vezes abriu .................................................103

Ocultar Plan com ChekBox .......................................................................................................................103

Ocultar coluna com ChekBox ...................................................................................................................104

Faz em A1 um cronômetro decressivo ....................................................................................................104

Faz uma contagem até 10000 ................................................................................................................ ...104

Mensagem por botão e form ......................................................................................................................105

Piscar tela ...................................................................................................................................................106


28/7/2014 MACROS PARA EXCEL - VBA-

Célula piscante 1 ........................................................................................................................................106

Célula piscante 2 .......................................................................................................................................107

Célula que fica piscando ............................................................................................................................108

Sub pioscar tela() ........................................................................................................................................108

Código para piscar célula ...........................................................................................................................109

Contador de vezes em que se abre uma plan’ programa ‘ ........................................................................109

Abrir combo com teclado “F4” ................................................................................................................110

Abrir combo ao receber foco evento ENTER ...........................................................................................110

Senha para Expirar tempo de uso ...............................................................................................................110

Esta macro seleciona em coluna especificada, está sendo repetido ..........................................................111

Inverter tabela horizontal vertical ......................................................................................................... ...112

Salvamento altomático 1 ...........................................................................................................................112

Salvamento altomático 2 ...........................................................................................................................114

Salvamento altomático 3 ........................................................................................................................ ...114

Código para form de fechar em 5 segundos ...............................................................................................115

Colocar o código abaixo no referido workbook .........................................................................................119

Macro para VER e OCULTAR Shapes de mensagem ...............................................................................119

Duplicados 2 Formata célula em vermelho ...............................................................................................................119

Macro para dizer bom dia com o nome da pessoa ....................................................................................120

A macro abaixo lista os nomes das planilhas existente no seu projeto .....................................................121

Ver SHAPES ocultar SHAPES .................................................................................................................121

Calendário mensal esta macro insere um calendário mensal atualizado basta formatar os dias e colocar em A7 dia/mês/ano . .................... ...121

Macro para inspirar tempo de programa .................................................................................................122

Função ano Bissexto ..................................................................................................................................122

Macro para calcular a soma de 2 TextBox ..............................................................................................122

'TextBox total .............................................................................................................................................123

Desproteger planilha .................................................................................................................................123


28/7/2014 MACROS PARA EXCEL - VBA-

Formato de moeda em TextBox ...............................................................................................................123

Formatação condicional ............................................................................................................................123

Desproteger planilha com senha ...............................................................................................................126

Adiciona planilha com mensagem ............................................................................................................128

'Função último dia do mês .........................................................................................................................128

Esta macro desabilita o XIS ......................................................................................................................128

Mensagem em label ...................................................................................................................................129

Função de extenso ......................................................................................................................................129

'Macro que impede de deletar planilha principal ......................................................................................132

'Macro que dá um aviso se quer ou não deletar ........................................................................................133

'Macro que reabilita a planilha ..................................................................................................................133

Macro para rodapé personalizado ..............................................................................................................133

Backup válido ............................................................................................................................................134

Backup perfeito ..........................................................................................................................................134

Backup ........................................................................................................................................................135

Criando Backup com senha .......................................................................................................................135

Resolução de tela .........................................................................................................................................136

‘ProgressBar percentual ............................................................................................................................136

Copia arquivo Excel para arquivo de texto ................................................................................................137

Esta macro apaga dados de todas as planilhas ...........................................................................................137

Excel XP: Propriedade FullName ..............................................................................................................138

Excel XP + VBA: Quantidade de planilhas ...............................................................................................139

Excel XP + VBA: Acessando várias planilhas ao mesmo tempo ..............................................................140

Excel XP: Método Select ............................................................................................................................140

Nome na barra de títulos ............................................................................................................................141

Controlador do tempo ...............................................................................................................................141

VBA – Nome da Guia baseado numa célula e vice-versa ........................................................................142


28/7/2014 MACROS PARA EXCEL - VBA-

Deixa maiúscula as células .......................................................................................................................142

Listar LISTVIEW Esta acro lista dados de uma plan p/ListView ...........................................................143

Macro que não deixa sair sem preencher os dados ...................................................................................143

Código que encerra o Excel em 1 minuto .................................................................................................143

Esta macro ou função marca a letra da coluna digitando o n, da linha ....................................................144

Não fechar programa sem fazer tal coisa ..................................................................................................144


Utilizando artificios de segurança(auto destruição) ..................................................................................145
Substituindo Erros por Caracteres .............................................................................................................145

'Esta macro faz uma formatação especialnas células ...............................................................................145


Abrindo a página da Internet .....................................................................................................................146
Abrindo o Módulo do VBA direto do Excel .............................................................................................146
Abrir planilha pelo nome pelo InputBox ..................................................................................................146
Agrupando Colunas ...................................................................................................................................147

Criando atalhos na área de trabalho ..........................................................................................................147

Criando Menus Personalizados .................................................................................................................147

Copiando dados da Planilha no Bloco de notas ........................................................................................148

Criando pasta no diretório no Excel ..........................................................................................................148

Criando teclas de Atalho para Abrir Formulários ....................................................................................148


Criando uma nova Planilha do os Meses do Ano .....................................................................................148
Dividindo a Planilha .................................................................................................................................149
Duplicar Imagem ......................................................................................................................................149
Enviando E-mail da planilha atual ...........................................................................................................149
Evento duplo click na planilha .................................................................................................................150
Executando macro com tempo .................................................................................................................150

'Executando uma macro ao selecionar célula ..........................................................................................150


Exemplo de Loop ......................................................................................................................................150

Exibir usuário ............................................................................................................................................151


Extrair apenas Numeros ............................................................................................................................151
Extrair valores Unicos de Uma lista .........................................................................................................151
Formatando textBox ..................................................................................................................................151

Esta macro cancela e envia digitação entre A1:C10 ................................................................................153

Proteger todas as celulas menos as Específicas ........................................................................................154


Protegendo e Desprotegendo todas as Planilhas .......................................................................................154
Removendo Duplicados .............................................................................................................................154
Ocultando os Valores Zero .......................................................................................................................155
Limitar Digitação ......................................................................................................................................155
Ocultando Menu principal ........................................................................................................................155
28/7/2014 MACROS PARA EXCEL - VBA-

Função personalizada que conta valores únicos .......................................................................................155

Ordenar Dados ...........................................................................................................................................156


Função que retorna Nome e Caminho .......................................................................................................156
Função para Extrair só textos ....................................................................................................................156
Sobre Escrever em Celulas .......................................................................................................................156
Msgbox com 3 Opções ...............................................................................................................................157
Função personalizada que extrai números de células ................................................................................157

Excel Fórmulas e Funções


Extrair apenas Números .............................................................................................................................157
Função para Extrair só textos ....................................................................................................................158
Função que retorna Nome e Caminho ........................................................................................................158

Função para calcular a direfença entre uma data qualque e hoje ................................................................158
Função REPT ..............................................................................................................................................158
Função "CARACT" ....................................................................................................................................158

Protege fórmula na plan ..............................................................................................................................158

Esta macro oculta plan designada colocar no módulo da plan …………………………………………………159

Cria planilha indicada .................................................................................................................................159

Programar ListView 1 ...............................................................................................................................159

Função criada para arredondar casas decimais ...........................................................................................160

'Esta função captura todo o conteúdo de sua tela atual e coloca em PictureBox .........................................160

Sub LimparDados() ......................................................................................................................................161

Esta macro controlada pela data, fecha o arquivo desaparecendo ..............................................................161

Senha 1 ............................................................................................................................................... ........162

Senha 2 .......................................................................................................................................................163

Senha 3 ........................................................................................................................................................163

Acesso registrado …………………………………………………………………………………………..164

Planilha e ordem alfabética .........................................................................................................................164

Tempo expirado por vezes de abertura …………………………………………………………………….165

Deixar células em maiúsculas e minúsculas .................................................................................................166

Rodapé personalisado ....................................................................................................................................169

Funcionando uma macro ao selecionar a célula ...........................................................................................169


28/7/2014 MACROS PARA EXCEL - VBA-

Função personalizada inverter texto ..............................................................................................................169

Separa endereço em colunas .........................................................................................................................170

'Botão salvar .................................................................................................................................................171

Botão de inclusão de contatos ......................................................................................................................171

Ordenar por linha ..........................................................................................................................................178


Abrir sites direto do Excel ............................................................................................................................178
Abrir planilha pelo nome pelo InputBox ......................................................................................................178
Abrir a pasta onde a planilha esta Alojada ...................................................................................................179
Abrindo a página da Internet ........................................................................................................................179

Formatação de números ................................................................................................................................180

Ativar Cx Dialogo Abrir ................................................................................................................................181

Exibe um UserForm .....................................................................................................................................181

Para atualizar campeonato ............................................................................................................................181

Caixa de Dialogo Auto correção ...................................................................................................................181

Caixa ..............................................................................................................................................................182

Ativa Calculadora ..........................................................................................................................................182

Chama UserForm com duplo clic ..................................................................................................................182

Deletar linha especificada ..............................................................................................................................183

Dados duplicados ............................................................................................................................................183

Cx diálogo proteger ........................................................................................................................................183

Cx diálogo desproteger planilha .....................................................................................................................183

Cx diálogo bordas ...........................................................................................................................................183

Sub Copiar_Figura() ………………………………………………………………………….……………..184

Sub ConverterMinuscula() ............................................................................................................................184

Sub ConverterPriMaiuscula() ........................................................................................................................184

Converter em dólar ........................................................................................................................................184

Função nome contrário ..................................................................................................................................185

Cx diálogo conf pg ............................................................................................................................... ........185

Desproteger planinha ....................................................................................................................................185


28/7/2014 MACROS PARA EXCEL - VBA-

Sub Fechar() ..................................................................................................................................................186

Sub Formulário() ...........................................................................................................................................186

Extenso ..........................................................................................................................................................186

Inserir .............................................................................................................................................................190

Abre cx dialogo inserir figura .......................................................................................................................190

Sub Inserir_Objeto() ......................................................................................................................................190

Sub Limpar() ........................................................................................................................................ .........191

Sub Nomes_Barras() ......................................................................................................................................191

Sub Ola() ........................................................................................................................................................191

‘Exibe cx dialogo opções de cálculo .............................................................................................................191

Function Raiz() ..............................................................................................................................................191

Sub Termina() ................................................................................................................................................191

Sub Sair() .......................................................................................................................................................192

Sub Salvar() ...................................................................................................................................................192

Sub Salvar_Como() .......................................................................................................................................192

Function Saudação() .....................................................................................................................................192

Sub Saudação() .............................................................................................................................................192

Sub separatexto() ..........................................................................................................................................192

Sub Sequencia_numerica() ...........................................................................................................................193

Sub Soma() ....................................................................................................................................................193

Sub Travar_Cel() ...........................................................................................................................................193

Sub Troco() ....................................................................................................................................................193

Sub Voltar() ....................................................................................................................................................194

Sub Zerar_Dados() ........................................................................................................................................194

Sub Zoon() .....................................................................................................................................................194

Cor na linha ...................................................................................................................................................194

‘Esta pasta de trabalho evento Open .............................................................................................................194


28/7/2014 MACROS PARA EXCEL - VBA-

CÓDIGOS
Sub ExibirForm() ...........................................................................................................................................195

Sub Abrir_Plan() ............................................................................................................................................195

Function Apelido(tot) ....................................................................................................................................195

Copiar para linha ...........................................................................................................................................196

Sub ConverterMaiuscula() .............................................................................................................................196

Sub ConverterMinuscula() .............................................................................................................................196

Sub ConverterPriMaiuscula() ........................................................................................................................196

Sub Entrada_Estoque() ..................................................................................................................................196

Sub Filtra_Cliente_Click() ............................................................................................................................198

Sub Lançamento_Caixa() ..............................................................................................................................198

‘Valor zero em célula ...................................................................................................................................200

Sub Macro1() .................................................................................................................................................200

Funções feriados e dias úteis .........................................................................................................................200

Comentários ...................................................................................................................................................202

Function Msg(ParamArray parm()) ...............................................................................................................202

Sub Testar_Msg() ...........................................................................................................................................203

Sub Limpar() ...................................................................................................................................................203

Sub Procura() .................................................................................................................................................203

Sub Transfer() ................................................................................................................................................203

‘Estenso para Euro .........................................................................................................................................203

Imagem ..........................................................................................................................................................204

MÓDULOS
Function ProcessaParcela(num) As String ....................................................................................................205

Converter a informação a Minúscula ou Maiúscula .....................................................................................206


28/7/2014 MACROS PARA EXCEL - VBA-

‘Deixar letras maiúsculas em células .............................................................................................................206

‘Código para formatar txtbox maiúsculo ......................................................................................................207

Soma valores de uma coluna .........................................................................................................................208


‘Formato moeda de um TexBox ....................................................................................................................208
‘Botões de próximo, anterior e alterar ...........................................................................................................208

Sub OrdenarPlanilhas() ..................................................................................................................................209

‘Esta macro soma automaticamente uma coluna apresentada ......................................................................210

Macro para puxar mensagem de célula em label ..........................................................................................210

Macro para inserir linhas ...............................................................................................................................211

Macro para inserir colunas ............................................................................................................................211

Insere um "ok" nas celulas "B2:B10" com um duplo click ..........................................................................211


VBA Excel - inseri uma marca d’agua .........................................................................................................212

Insere marca d’água .......................................................................................................................................212


*VBA Excel - inseri formatação em celulas com Zero - Ex: ( 0 ) - ( 0,00 ) .................................................213
Fórmulas Excel - Fórmula inseri uma formatação condicional quadriculada ..............................................213
Inseri Linhas no NotePad (Bloco de Notas) ..................................................................................................213
Inseri um Autofiltro na coluna A ..................................................................................................................214
Fórmula inseri uma AutoNumeração ............................................................................................................214
Inseri uma barra de progressão ......................................................................................................................214
Inseri uma barra de progressão ......................................................................................................................214
Insere na coluna A1,B1,C1 (cabeçalho) .........................................................................................................216
Inseri shapes célula arredondando os cantos .................................................................................................216
VBA Excel - inseri colunas a partir de um InputBox ...................................................................................216

Inseri comentário e autor (predeterminado) e uma frase ..............................................................................217


Inseri as doze planilhas dos meses ................................................................................................................217
Inseri uma planilha por semana até o fim do ano .........................................................................................218

VBA Excel - inseri formatação em celulas com Zero - Ex: ( 0 ) - ( 0,00 ) ....................................................218
VBA Excel - Inseri um ícone do NotePad no Excel .....................................................................................219
VBA Excel - Inseri um rodapé personalizado ...............................................................................................219

Inserir um gráfico no comentário, será que é possível??? ............................................................................219

Inserir estes códigos no módulo da planilha ...................................................................................................220

Ordenar crescente ...........................................................................................................................................220

Ordenar Planilhas ...........................................................................................................................................221

Sub Classificar(List() As String) 'Classifica as planilhas em ordem crescente ............................................221

Macro para inserir dados ...............................................................................................................................222


28/7/2014 MACROS PARA EXCEL - VBA-

‘Desproteger plan ..........................................................................................................................................222

Desproteger várias planilhas .........................................................................................................................223

Proteger várias planilhas ...............................................................................................................................223

‘Reenzibindo várias planinhas ......................................................................................................................223

Sub InserirPlanilhaComNome() ...................................................................................................................224


Sub Ocultar_Coluna() ...................................................................................................................................225

Sub Exibindo_coluna2() ...............................................................................................................................225

Sub Selecionando_Planilha() ........................................................................................................................225

Sub Selecinar_Célula() .................................................................................................................................225

Sub Preencher_Célula() ................................................................................................................................225

Sub Ocultar_Linha() .....................................................................................................................................225

Sub RenomearPlanilha() ..............................................................................................................................225

Sub Copiar_e_colar() ...................................................................................................................................226

Sub MaximizarTela() ...................................................................................................................................226

Sub Calcula2() ..............................................................................................................................................226

Sub Macro_otimizada() ................................................................................................................................226

‘Selecionando planilhas com valores determinados .....................................................................................227


Criando uma planilha ....................................................................................................................................227
Excluindo planilha ........................................................................................................................................227
‘Macro para fazer alteração 1 ListBox -1 Form com TextBox- 1 commandButtom ..................................228

*VBA - Formatações e macros para TextBox's ..........................................................................................229

‘Texbox só para numéricos ........................................................................................................................229

‘Seleccionar o conteúdo de uma TextBox ..................................................................................................230

Gráfico .........................................................................................................................................................230

‘Inserir gráfico em form ..............................................................................................................................230

‘MACRO para pesquisa 1 UserForm 1 TextBox 1 Botão Comando ........................................................230

Sub Calcula2() ............................................................................................................................................231


28/7/2014 MACROS PARA EXCEL - VBA-

MACROS PARA EXCEL - VBA-

VBA EXCEL - FUNÇÃO ÁREA


VBA Excl - Função Área
=MPG(A18,A19,B19)

Function MPG(StartMiles As Integer, FinishMiles As Integer, Litres As Single)

MPG = (FinishMiles - StartMiles) / Litres * 4.546

End Function

função área

Function Area(Length As Double, Optional Width As Variant)

If IsMissing(Width) Then

Area = Length * Length

Else

Area = Length * Width

End If

End Function

=Area(B1;B1)

Function Area(Length As Double, Width As Double)

Area = Length * Width

End Function

VBA EXCEL - ARREDONDAS CASAS DECIMAIS PARA CIMA


Excel VBA - Esta macro arredonda casas para cima mas somente no formato,
28/7/2014 MACROS PARA EXCEL - VBA-

formato personalizado ex: 13,95 = 14, mas o valor real é 13,95

Sub Arred_para_cima_formato()

Worksheets(”Plan1″).Range(”b1″).NumberFormat = “0;-0;;@”

End Sub

Formatos especiais

6154848484 (16) 84 84 84 84

184848484 (1) 84 84 84 84

74848484 84 84 84 84 Formato para as células B5:B7:

‘[>=200000000](##\ #) ##\ ##\ ##\ ##;[>=100000000](##) ##\ ##\ ##\ ##:00\ 00\ 00\ 00 este da um erro >> substitui pela formatação
abaixo

[>=2000000000](## #) ## ## ## ##;[>=100000000](##) ## ## ## ##;00 00 00 00

KILOFRANCS (KF):

Valores Simples Valores em KF

10.000,00 F 10 KF Formatos para as células B13:B15:

1.250.000,00 F .250 KF

15.000,00 F 15 KF # ##0 ” KF”

VBA EXCEL - VERIFICA O FORMATO PERSONALIZADO DA CÉLULA


VBA Excel - Esta macro verifica formato personalizado da célula

Sub Verificar_Formato()

Dim Frt As String

Range(”A1″).Select

Frt = Selection.NumberFormat
28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox “O formato desta célula é :” & Frt

End Sub

VBA EXCEL VERIFICA SE A FORMATAÇÃO PERSONALIZADA É EM


EURO
VBA Excel - Esta macro verifica se é formato em Euro

Sub Formatação_perssonalizada()

ActiveCell.Select

If Selection.NumberFormat = “#,##0.00 [$€-1]” Then ‘verifica se o formato é Euro

ActiveCell.Value = ActiveCell.Value * 6.55957

Selection.Style = “Currency”

Else

If ActiveCell.Value = “” Then Exit Sub

‘verifica dentro da célula se existe ou não formato euro ou se está vazia

If IsNumeric(ActiveCell) = False Then Exit Sub

‘verifica a célula ativa se existe ou não euro se é tabem número

ActiveCell.Value = ActiveCell.Value / 6.55957

Selection.NumberFormat = “#,##0.00 [$€-1]”

End If

End Sub

VBA EXCEL - VER SE EXISTE OU NÃO FORMATAÇÃO CONDICIONAL


Excel VBA - Este procedimento e para ver ser existe ou não formação condicional

inserir no módulo Worksheet

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

If HasCondFormat(ActiveCell) Then

MsgBox ActiveCell.Address & ” existe formato condicional nesta planilha.”


28/7/2014 MACROS PARA EXCEL - VBA-

End If

End Sub

EXCEL VBA - EXTRAÇÃO DE NÚMERO DE LOTO


Excel VBA - Extração de número de loto , loteria

=AleatórioLoto(1;49;6)

Function AleatorioLoto(Botao As Integer, Top As Integer, Amount As Integer)

Dim iNum As String

Dim strNum As String

Dim i As Integer

Application.Volatile

iNum = Int((Top - Botao + 1) * Rnd + Botao)

For i = 1 To Amount

strNum = Trim(strNum & ” ” & iNum)

Do Until InStr(1, strNum, iNum) = 0

iNum = Int((Top - Botao + 1) * Rnd + Botao)

Loop

Next i

AleatorioLoto = strNum

End Function

*EXCEL VBA - LOTO - EXTRAI SEIS NÚMEROS ALEATÓRIOS


‘Esta macro extrai 6 números aleatórios

Sub Loto()

Dim i, choice, balls(60)

For i = 1 To 60
28/7/2014 MACROS PARA EXCEL - VBA-

balls(i) = i

Next

Randomize Timer

For i = 1 To 6

choice = 1 + Int((Rnd * (60 - i)))

ActiveCell.Offset(0, i - 1).Value = balls(choice)

balls(choice) = balls(60 - i)

Next

End Sub

VBA EXCEL - ENVIA PARA LIXEIRA DETERMINADO ARQUIVO


VBA Excel - esta macro envia para lixeira o arquivo apg.xls

tem que copiar todo código para lixeira - somente copiar e colar no módulo normal

Declare Function SHFileOperation Lib “shell32.dll” Alias _

“SHFileOperationA” (lpFileOp As SHFILEOPSTRUCT) As Long

Type SHFILEOPSTRUCT

hwnd As Long

wFunc As Long

pFrom As String

pTo As String

fFlags As Integer

fAnyOperationsAborted As Boolean

hNameMappings As Long

lpszProgressTitle As String

End Type
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Enviar_Arquivo_Lixeira()

RecycleFile “c:\Meus documentos\apg.xls”

End Sub

Sub RecycleFile(sFile As String)

Const FO_DELETE = &H3

Const FOF_ALLOWUNDO = &H40

Dim FileOperation As SHFILEOPSTRUCT

Dim lReturn As Long

Dim sFileName As String

With FileOperation

.wFunc = FO_DELETE

.pFrom = sFile

.fFlags = FOF_ALLOWUNDO

End With

lReturn = SHFileOperation(FileOperation)

End Sub

VBA EXCEL - MACRO COPIA LINHAS DA PRIMEIRA ATÉ A ULTIMA


VBA Excel - macro copia linhas da primeira até a ultima

Sub Copia_linha_ate_a_ultima()

Dim i As Integer

ligne1:

If ActiveCell.Value <> “” Then ActiveCell.Offset(1, 0).Select: GoTo ligne1

ActiveCell.Value = ActiveCell.Offset(-1, 0).Value

ActiveCell.Offset(1, 0).Select

GoTo ligne1:

ligne99:
28/7/2014 MACROS PARA EXCEL - VBA-

Range(”A1″).Select
End Sub

VBA EXCEL - MACRO CONTA LINHAS SELECIONADAS (MSGBOX)


VBA Excel - macro conta linhas selecionadas e mostra msgbox

Sub conta_linhas()

minha_linha = Selection.Rows.Count

MsgBox minha_linha

End Sub

VBA EXCEL - DELETA LINHAS/COLUNAS EM BRANCO


VBA Excel - deleta linhas/colunas em branco

Sub Deleta_Linhas_Branco()

Sheets(”SuaPlanilha”).Select

Dim r, c, x As Integer

‘r is your first row

For r = 1 To 150

‘c is your first column loop until c reaches 184 (unlik ely)

For c = 1 To 184

‘if active cell in loop is blank then…

If Cells(r, c) = “” Then

‘find next non blank cell in this row - the column number will become x

x = Cells(r, c).End(xlToRight).Column

‘if x > 184 (your last column) then you can sk ip the rest of this row as it’s blank

If x > 184 Then GoTo 10

‘find out what the column before the next non-blank cell is
28/7/2014 MACROS PARA EXCEL - VBA-

Y=x-1

‘test difference between column being processed and y

Select Case Y - c

‘if more than one blank cell in between current cell and next non blank then delete ‘range of blank s

Case Is > 0

Range(Cells(r, c), Cells(r, Y)).Delete Shift:=xlToLeft

Case 0

‘if difference between y & c is 0 then only one cell to delete

Cells(r, c).Delete Shift:=xlToLeft

Case Else

‘if it’s negative you have an error!!

MsgBox “Error: Macro Will Stop”, vbCritical, “Error”

Exit Sub

End Select

End If

‘move to next column

Next c

‘10 is a shortcut to cut out the above loop… so if all blank goto 10 - ie just go to the next row

10

Next r

End Sub

VBA EXCEL - ATRIBUI ALTURA DAS LINHAS A UMA SELEÇÃO


VBA Excel - Atribui altura de linhas a uma determinada seleção

Sub Atribui_altura_linhas()

Set ASelectionner = Application.InputBox _

(Prompt:=”selecionar a regiao da celulas “, _

Title:=” Regiao de celulas à serem selecionadas”, Type:=8)

AHauteur = Application.InputBox _

(Prompt:=”Entre com altura (pontos) (exemplo 12)”, Type:=1)

ASelectionner.Select ‘Seleciona a região desejada


28/7/2014 MACROS PARA EXCEL - VBA-

ASelectionner.RowHeight = AHauteur

End Sub

VBA EXCEL MOSTRA A AJUDA SOLICITADA PELO ID


VBA Excel exemplo de ajuda, mostra o tipo de ajuda solicitado pelo ID

Sub Example_Show_Help()

Dim IDNum As Long

‘Fill in the Help ID number

IDNum = 5199659

‘If the Excel version is 2000, 2002 or 2003

If Val(Application.Version) > 8 And Val(Application.Version) < 12 Then

Application.Help “XLMAIN” & Val(Application.Version) & “.CHM”, IDNum

End If

‘If the excel version is 12 (Excel 2007)

‘We use the new Application.Assistance.ShowHelp now but the old

‘Application.Help is also working in Excel 2007

If Val(Application.Version) = 12 Then

Application.Assistance.ShowHelp “XLMAIN11.CHM” & IDNum, “”

End If

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - EXEMPLO DE AJUDA (SHOW HELP)


REtorna

‘Esta macro retorna informações do computador

Sub PCInformation()

Dim msg

msg = “UserName” & vbTab & Environ$(”username”) & vbNewLine _

& “UserProfile” & vbTab & Environ(”UserProfile”) & vbNewLine _

& “Computer #” & vbTab & Environ$(”ComputerName”) & vbNewLine _

& “Logon Server” & vbTab & Environ$(”Logonserver”) & vbNewLine _

& “UserDomain ” & vbTab & Environ$(”UserDomain”)

MsgBox msg, , “Environment Variables“

End Sub

Sub Retorna_Logon_Nome()

Dim wshNetwork As Object

Dim LogonName As Variant

Set wshNetwork = CreateObject(”WScript.Network”)

LogonName = “Logon Name = ” & wshNetwork.UserName

MsgBox LogonName

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

RETORNA O NOME DO USUÁRIO E NOME MÁQUINA


Estas macros com as declarações e funções retorna o nome do usuario e o nome do máquina

Option Explicit

Public Declare Function GetUserName Lib “advapi32.dll” Alias “GetUserNameA” _

(ByVal lpBuffer As String, nSize As Long) As Long

Public Declare Function GetComputerName Lib “kernel32″ _

Alias “GetComputerNameA” _

(ByVal lpBuffer As String, nSize As Long) As Long

Function OSUserName() As String

Dim Buffer As String * 256

Dim BuffLen As Long

BuffLen = 256

If GetUserName(Buffer, BuffLen) Then _

OSUserName = Left(Buffer, BuffLen - 1)

End Function

Function OSMachineName() As String

Dim Buffer As String * 256

Dim BuffLen As Long

Dim lngX As Long

Dim strCompName As String

BuffLen = 255

If GetComputerName(Buffer, BuffLen) Then _

OSMachineName = Left(Buffer, BuffLen)

End Function
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Teste_Usuário_host()

MsgBox OSUserName & ” ” & OSMachineName

End Sub

RETORNA O NÚMERO SERIAL DO HD DO CPU


‘Esta macro com as funções e declarações retorna uma mensagem com o número do HD do seu computador mostro aqui
duas funções.

Private Declare Function GetVolumeInformation& Lib “Kernel32″ Alias “GetVolumeInformationA” _

(ByVal lpRootPathName As String, _

ByVal pVolumeNameBuffer As String, _

ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _

lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _

ByVal lpFileSystemNameBuffer As String, _

ByVal nFileSystemName As Long)

Private Const MAX_FILENAME_LEN = 256

Public Function GetSerialNumber(sDrive As String) As Long

Dim ser As Long

Dim s As String * MAX_FILENAME_LEN

Dim s2 As String * MAX_FILENAME_LEN

Dim j As Long

Dim i As Long

Call GetVolumeInformation _

(sDrive + “:\”, s, MAX_FILENAME_LEN, ser, i, j, s2, MAX_FILENAME_LEN)

GetSerialNumber = ser

End Function
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Teste_Numero_HD()

MsgBox (”Número do HD “) & GetSerialNumber(”C”)

MsgBox (”Número do HD “) & DriveSerialNumber(”C”)

End Sub

Function DriveSerialNumber(Lecteur)

Dim sab, d

Set sab = CreateObject(”Scripting.FileSystemObject”)

Set d = sab.GetDrive(sab.GetDriveName _

(sab.GetAbsolutePathName(Lecteur & “:\”)))

DriveSerialNumber = d.SerialNumber

End Function

MOSTRA O NÍVEL DE SEGURANÇA DAS MACROS

‘Esta macro retorna o nível de segurança atual no seu aplicativo Excel

‘conforme abaixo

Sub Teste_Nivel_Segurança()

MsgBox Nivel_Seguranca

End Sub

Function Nivel_Seguranca()

‘para Excel 2000 et 2002,2003 a função retorna

‘ 1 -> nivel de segurança Baixo


28/7/2014 MACROS PARA EXCEL - VBA-

‘ 2 -> nivel de segurança Médio

‘ 3 -> nivel de segurança Alto

Dim Cle2000$, Cle2002$, WSH

Cle2000 = “HKCU\Software\Microsoft\Office\9.0\Excel\Security\Level”

Cle2002 = “HKCU\Software\Microsoft\Office\10.0\Excel\Security\Level”

Cle2003 = “HKCU\Software\Microsoft\Office\11.0\Excel\Security\Level”

Set WSH = CreateObject(”WScript.Shell”)

Select Case Val(Application.Version)

Case 9

Nivel_Seguranca = WSH.RegRead(Cle2000)

Case 10

Nivel_Seguranca = WSH.RegRead(Cle2002)

Case 11

Nivel_Seguranca = WSH.RegRead(Cle2003)

Case Else

Nivel_Seguranca = “Versão d’Excel não conhecida “

End Select

End Function

MOSTRA OS ARQUIVOS ATIVOS NA MEMÓRIA(RAM)


‘Arquivos ativos na memória

‘Estas declarações com a macro mostra todos os arquivos que estão

‘na memória RAM do seu computador, cria uma planilha com a relação

‘****************** Début de code *******

Private Declare Function GetWindow Lib “user32″ _

(ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Declare Function FindWindow Lib “user32″ Alias “FindWindowA” _

(ByVal lpClassName As String, ByVal lpWindowName As String) As Long


28/7/2014 MACROS PARA EXCEL - VBA-

Private Declare Function GetParent Lib “user32″ (ByVal hwnd As Long) As Long

Private Declare Function GetWindowTextLength Lib “user32″ _

Alias “GetWindowTextLengthA” (ByVal hwnd As Long) As Long

Private Declare Function GetWindowText Lib “user32″ _

Alias “GetWindowTextA” (ByVal hwnd As Long, ByVal lpString As String, _

ByVal cch As Long) As Long

Const GW_HWNDFIRST = 0

Const GW_HWNDNEXT = 2

Sub Load_Lista_Memória()

Dim CurrWnd As Long

Dim Length As Long

Dim TaskName As String

Dim Parent As Long

i=1

Sheets.Add ‘renvoie la liste dans une nouvelle feuille de calcul

twnd& = FindWindow(”Shell_traywnd”, vbNullString)

CurrWnd = GetWindow(twnd, GW_HWNDFIRST)

While CurrWnd <> 0

Length = GetWindowTextLength(CurrWnd)

TaskName = Space$(Length + 1)

Length = GetWindowText(CurrWnd, TaskName, Length + 1)

TaskName = Left$(TaskName, Len(TaskName) - 1)

If Length > 0 Then

Cells(i, 1).Value = TaskName

i=i+1

End If

CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)

DoEvents

Wend
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

MOSTRA O TOTAL DA MEMÓRIA


Option Explicit

Declare Function GetCommandLine Lib “kernel32″ _

Alias “GetCommandLineA” () As Long

Declare Sub CopyMemory Lib “kernel32″ Alias “RtlMoveMemory” _

(lpvDest As Any, lpvSource As Any, ByVal NumBytes As Long)

Sub TestCommand()

MsgBox VBACommand

MsgBox VBACommand2

End Sub

Function VBACommand() As String

Dim Buffer() As Byte

Dim Addr As Long

Dim sTemp As String

Dim i As Long

Const BufferLen = 256

ReDim Buffer(0 To BufferLen - 1)

Addr = GetCommandLine()

CopyMemory Buffer(0), ByVal Addr, BufferLen

‘convert the characters of the ANSI string to Unicode

sTemp = StrConv(Buffer(), vbUnicode)


28/7/2014 MACROS PARA EXCEL - VBA-

‘then truncate at the null byte

i = InStr(sTemp, Chr$(0))

If i > 0 Then

VBACommand = Left$(sTemp, i - 1)

Else

VBACommand = sTemp & “…..”

End If

End Function

Function VBACommand2() As String

Dim Buffer As String

Dim Addr As Long

Const BufferLen = 256

Buffer = String$(BufferLen, 0)

Addr = GetCommandLine()

CopyMemory ByVal Buffer, ByVal Addr, BufferLen

‘no need to convert from ANSI to Unicode, don’t know why…

VBACommand2 = Left$(Buffer, InStr(1, Buffer, Chr$(0)) - 1)

End Function

DESABILITA A MACRO DO EXCEL


’Esta macro desabilita o Alerta para Excel, por ex: quando for fechar algum workbook, aparece uma msg perguntando se
quer salvar ou não aquele arquivo, tornar false este este item impede que seja perguntado, fecha sem a mensagem.

Sub NoAlerts()

Application.DisplayAlerts=False

‘Insira aqui seu código

Application.DisplayAlerts=True

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SALVA E ENCERRA O APLICATIVO EXCEL


‘Esta macro salva e encerra o aplicativo Excel

Sub Encerrar()

ActiveWorkbook.Save

Application.Quit
End Sub

MOSTRA O DICIONÁRIO DE CORREÇÃO DE UMA PLANILHA


‘Mostra o dicionário de correção de uma planilha copiando as palavras para

‘uma determianda planilha

Function GetFiles(strPath As String, _

dctDict As Scripting.Dictionary, _

Optional blnRecursive As Boolean) As Boolean

‘David Shank, Microsoft Corporation

‘http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office09072000.asp

Dim fsoSysObj As Scripting.FileSystemObject

Dim fdrFolder As Scripting.Folder

Dim fdrSubFolder As Scripting.Folder

Dim filFile As Scripting.File

‘ Return new FileSystemObject.

Set fsoSysObj = New Scripting.FileSystemObject

On Error Resume Next

‘ Get folder.

Set fdrFolder = fsoSysObj.GetFolder(strPath)

If Err <> 0 Then

‘ Incorrect path.

GetFiles = False
28/7/2014 MACROS PARA EXCEL - VBA-

GoTo GetFiles_End

End If

On Error GoTo 0

‘ Loop through Files collection, adding to dictionary.

For Each filFile In fdrFolder.Files

‘récupère nom et chemin complet

dctDict.Add filFile.Path, filFile.Path

Next filFile

‘ If Recursive flag is true, call recursively.

If blnRecursive Then

For Each fdrSubFolder In fdrFolder.SubFolders

GetFiles fdrSubFolder.Path, dctDict, True

Next fdrSubFolder

End If

‘ Return True if no error occurred.

GetFiles = True

GetFiles_End:

Exit Function

End Function

Sub TestGetFiles()

‘ Call to test GetFiles function.

Dim dctDict As Scripting.Dictionary

Dim varItem As Variant

Dim strDirPath As String

strDirPath = “D:\06OfficeVBA\04Modules\”

‘ Create new dictionary.


28/7/2014 MACROS PARA EXCEL - VBA-

Set dctDict = New Scripting.Dictionary

‘ Call recursively, return files into Dictionary object.

If GetFiles(strDirPath, dctDict, True) Then

Sheets.Add

‘récupère directement le tableau des items du dictionaire

‘dans la colonne A de la nouvelle feuille

Range(”A1:A” & dctDict.Count).Value = _

Application.Transpose(dctDict.Items)

End If

End Sub

LISTA TODOS OS ARQUIVOS EM C:\


‘Esta macro lista todos os arquivos em c:\

Sub Lista_todos_arquivos_C()

Lister 1, “c:\”

End Sub

‘* nRow = Ligne de départ

‘* FolderName = Chemin du répertoire à lister

‘* Suffix = Filtre optionnel des types de fichiers

‘* SubDir = True pour étendre la liste aux sous-répertoires

Sub Lister(nRow&, FolderName$, Optional Suffix$ = “*.*”, _

Optional SubDir As Boolean = True)

Dim i As Long, x As Long, File As String, Folder As String, nbFolders() As String

Cells(nRow, 1) = FolderName

Cells(nRow, 1).Font.Bold = True

nRow = nRow + 1
28/7/2014 MACROS PARA EXCEL - VBA-

If Not Right(FolderName, 1) = “\” Then FolderName = FolderName & “\”

File = Dir(FolderName & Suffix)

Do While Len(File) > 0

Cells(nRow, 1) = FolderName & File

Cells(nRow, 2) = FileLen(FolderName & File)

Cells(nRow, 3) = FileDateTime(FolderName & File)

nRow = nRow + 1: File = Dir

Loop

If Not SubDir Then Exit Sub

x = 0: Folder = Dir(FolderName, vbDirectory)

Do While Folder > “”

If Folder <> “.” And Folder <> “..” Then

If (GetAttr(FolderName & Folder) And vbDirectory) = vbDirectory Then x = x + 1

End If

Folder = Dir

Loop

ReDim nbFolders(x + 1): i = 1

nbFolders(i) = Dir(FolderName, vbDirectory)

Do While nbFolders(i) > “”

If nbFolders(i) <> “.” And nbFolders(i) <> “..” Then

If (GetAttr(FolderName & nbFolders(i)) And vbDirectory) = vbDirectory Then i = i + 1

End If

nbFolders(i) = Dir

Loop

For i = 1 To UBound(nbFolders()) - 1

Call Lister(nRow, FolderName & nbFolders(i), Suffix)

Next

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

TODOS OS ARQUIVOS DE PROGRAMA INSTALADO NO COMPUTADOR


‘Estas macro mostra todos os arquivos de programa instalado no computador

Sub TousLesDossiers(LeDossier$, Idx As Long)

Dim fso As Object, Dossier As Object

Dim sousRep As Object, Flder As Object

Set fso = CreateObject(”Scripting.FileSystemObject”)

Set Dossier = fso.GetFolder(LeDossier)

‘examima o corrente diretorio

For Each Flder In Dossier.subfolders

Idx = Idx + 1

Cells(Idx, 1).Value = Flder.Path

Next

‘Trata os recursos dos arquivos

For Each sousRep In Dossier.subfolders

TousLesDossiers sousRep.Path, Idx

Next sousRep

Set fso = Nothing

End Sub

Sub Mostra_todos_Arquivos_de_programas()

TousLesDossiers “c:\Arquivos de Programas”, 0

End Sub

LISTA OS ARQUIVOS EM UM DETERMINADO DIRETÓRIO


‘Esta macro lista os arquivos em um determinado Diretório

Sub Testar_Lista_Arquivos_InFolder()
28/7/2014 MACROS PARA EXCEL - VBA-

Dim RootFolder$

‘ Diretório à scanear

RootFolder = ChoisirDossier

If RootFolder = “” Then Exit Sub

‘ create a new workbook for the file list

Workbooks.Add

‘ add headers

With Range(”A1″)

.Formula = ” Contendo os Diretórios : ” & RootFolder

.Font.Bold = True

.Font.Size = 12

End With

Range(”A3″).Formula = “Caminho: “

Range(”B3″).Formula = “Nome : “

Range(”C3″).Formula = “Data Criação : “

Range(”D3″).Formula = “Data último Accesso : “

Range(”E3″).Formula = “Data última Modificação : “

With Range(”A3:E3″)

.Font.Bold = True

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = True

End With

‘ list all files included subfolders

ListFilesInFolder RootFolder, True

Columns(”A:H”).AutoFit

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As Boolean)

‘ lists information about the files in SourceFolder

‘ example: ListFilesInFolder “C:\FolderName\”, True

Dim FSO ‘As Scripting.FileSystemObject

Dim SourceFolder ‘As Scripting.Folder

Dim SubFolder ‘As Scripting.Folder

Dim FileItem ‘As Scripting.File

Dim r As Long

Set FSO = CreateObject(”Scripting.FileSystemObject”)

Set SourceFolder = FSO.GetFolder(SourceFolderName)

r = Range(”A65536″).End(xlUp).Row + 1

For Each FileItem In SourceFolder.Files

‘ display file properties

Cells(r, 1).Formula = FileItem.ParentFolder

Cells(r, 2).Formula = FileItem.Name

Cells(r, 3).Formula = FileItem.DateCreated

Cells(r, 3).NumberFormatLocal = “dd/mm/aaa”

Cells(r, 4).Formula = FileItem.DateLastAccessed

Cells(r, 5).Formula = FileItem.DateLastModified

Cells(r, 5).NumberFormatLocal = “dd/mm/aaaa”

‘ next row number

r=r+1

Next FileItem

If IncludeSubfolders Then

For Each SubFolder In SourceFolder.SubFolders


28/7/2014 MACROS PARA EXCEL - VBA-

ListFilesInFolder SubFolder.Path, True

Next SubFolder

End If

Set FileItem = Nothing

Set SourceFolder = Nothing

Set FSO = Nothing

ActiveWorkbook.Saved = True

End Sub

Private Function ChoisirDossier()

Dim objShell, objFolder, chemin, SecuriteSlash

Set objShell = CreateObject(”Shell.Application”)

Set objFolder = _

objShell.BrowseForFolder(&H0&, “Procurar por um Diretório”, &H1&)

On Error Resume Next

chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & “”

If objFolder.Title = “Bureau” Then

chemin = “C:\Windows\Bureau”

End If

If objFolder.Title = “” Then

chemin = “”

End If

SecuriteSlash = InStr(objFolder.Title, “:”)

If SecuriteSlash > 0 Then

chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & “”

End If
28/7/2014 MACROS PARA EXCEL - VBA-

ChoisirDossier = chemin

End Function

MOSTRA O DIRETÓRIO DE DETERMINADO ARQUIVO


‘Esta macro mostra o caminho de determinado arquivo

Sub Teste()

Dim Fich$

Fich = Application.GetOpenFilename

MsgBox GetInfo(Fich)(0) & vbLf & _

GetInfo(Fich)(1) & vbLf & GetInfo(Fich)(2)

MsgBox SplitInfo(Fich)(0) & vbLf & _

SplitInfo(Fich)(1) & vbLf & SplitInfo(Fich)(2)

MsgBox FSOInfo(Fich)(0) & vbLf & _

FSOInfo(Fich)(1) & vbLf & FSOInfo(Fich)(2)

End Sub

Function GetInfo(ByVal s As String) As Variant

‘Utilisation:

‘GetInfo(”c:\rep\test.xls”)(0) => “C:”

‘GetInfo(”c:\rep\test.xls”)(1) => “rep\”

‘GetInfo(”c:\rep\test.xls”)(2) => “test.xls”

Dim Dr As String, Rep As String, Fic As String

Dr = Left(s, InStr(1, s, “\”) - 1)

Fic = s

Do

Fic = Right(Fic, Len(Fic) - InStr(1, Fic, “\”))

Loop Until InStr(1, Fic, “\”) = 0

Rep = Mid(s, Len(Dr) + 1, Len(s) - Len(Dr) - Len(Fic))

GetInfo = Array(Dr, Rep, Fic)


28/7/2014 MACROS PARA EXCEL - VBA-

End Function

Function SplitInfo(NomFich$)

Dim Chemin$, NomBase$, Ext$

NomBase = Split(NomFich, “\”)(UBound(Split(NomFich, “\”)))

Ext = Split(NomBase, “.”)(1)

Chemin = Left(NomFich, Len(NomFich) - Len(NomBase))

NomBase = Split(NomBase, “.”)(0)

SplitInfo = Array(Chemin, NomBase, Ext)

End Function

Function FSOInfo(NomFich$)

Dim fso, Fich, Chemin, NomBase, Ext

Set fso = CreateObject(”Scripting.FileSystemObject”)

Set Fich = fso.getfile(NomFich)

Chemin = Fich.ParentFolder

NomBase = fso.GetBaseName(NomFich)

Ext = fso.GetExtensionName(NomFich)

FSOInfo = Array(Chemin, NomBase, Ext)

End Function

CRIA UM ARQUIVO TXT EM C:\ CHAMADO MEU ARQUIVO ASCII.TXT

‘Esta macro cria um arquivo texto em C:\ chamado MeuArquivoAscii.txt

‘onde traz os dados Fechamento de Hoje data e hora e o nome do Usuário

Sub Criar_Escrever_ArquivoAscii()

Dim strNombreArchivo, strRuta, strArchivoTexto As String


28/7/2014 MACROS PARA EXCEL - VBA-

Dim f As Integer

‘nombre y ruta del archivo de texto

strNombreArchivo = “MeuArquivoAscii.txt”

strRuta = “C:\”

strArchivoTexto = strRuta & strNombreArchivo

‘abrimos el archivo para escribir

f = FreeFile

Open strArchivoTexto For Append As #f

‘escrevermos no arquivo

Print #f, “Fechamento de Hoje: ” & Now()

Print #f, “Usuário: ” & Application.UserName

‘fechamos o arquivo de texto

Close f

End Sub

‘Esta macro lê o arquivo acima e importa os dados para o Excel

‘Ler arquivo Ascii - INPUT

Sub Ler_Arquivo()

Dim strNombreArchivo, strRuta, strArchivoTexto As String

Dim f, i As Integer

Dim strTexto As String

‘nome do caminho do arquivo texto

strNombreArchivo = “MeuArquivoAscii.txt”
28/7/2014 MACROS PARA EXCEL - VBA-

strRuta = “C:\”

strArchivoTexto = strRuta & strNombreArchivo

‘abrimos o arquivo para leitura

f = FreeFile

Open strArchivoTexto For Input As #f

‘lemos o arquivo texto a coluna do Excel (importar)

i=1

While Not EOF(f)

Line Input #f, strTexto

Cells(i, 1) = strTexto

i=i+1

Wend

‘fechamos o arquivo de texto

Close f

End Sub

ABRE ARQUIVO TXT NOTEPAD E VERIFICA A EXISTÊNCIA


Terça-feira, 22 de Abril, 2008

‘Esta macro abre arquivo txt notepad - e verifica a existência de arquivo e abre sim ou não.xls

Sub abrir_arquivo_txt_96()

If MsgBox(”Deseja Abrir o documento ? “, vbYesNo, “Excel VBA Estudos®”) = vbYes Then

abrir_arquivo_txt_96_1

Else
28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox (”Não quis abrir o documento”) ‘Workbook.Close

‘ou ThisWorkbook.Saved = True

End If

End Sub

Sub abrir_arquivo_txt_96_1()

Dim f As String

f = “C:\Documents and Settings\E_Marcondes\Excel Word e Textos\Readme.txt”

Shell “Notepad ” & f, vbNormalFocus

End Sub

COPIA COLA DA PLAN2 NO ARQUIVO LOG.TXT


‘Esta macro Copia ColA da Plan2, no arquivo log.txt

‘–’

Sub Imprime_logTxt_ColA_Plan2()

Open ThisWorkbook.Path & “\log.TXT” For Output As #1 ‘Cria um arquivo]

For i = 1 To Range(”Plan2!A65000″).End(xlUp).Row

Write #1, Range(”Plan2!A” & CStr(i)).Value

Next i

Close #1

End Sub

Open ThisWorkbook.Path & “\loloessai.TXT” For Output As #1

par exemple :

Open ThisWorkbook.Path & “\lolo-” & format(now,”yyyy-mm-dd”) & “.TXT” For Output As #1

ABRE O APLICATIVO NOTEPAD (.EXE)


‘Esta macro abre o aplicativo NotePad
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Abrir_NotePad()

Shell “C:\WINDOWS\NOTEPAD.EXE”, 4

End Sub

IMPORTA PARA O EXCEL UM ARQUIVO CHAMADO TEXTO.TXT


‘Esta macro abre importa para o Excel um arquivo txt chamado Texto.TXT

‘ (texto.txt) abrir importar texto

Sub Abrir_Arquivo_TXT()

Workbooks.OpenText Filename:=”C:\Meus documentos\Texto.TXT”, _

Origin:=xlWindows, StartRow:=1, _

DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, _

ConsecutiveDelimiter:=False, Tab:=False, _

Semicolon:=True, Comma:=False, Space:=False, _

Other:=False, FieldInfo:=Array(Array(1, 1), _

Array(2, 1), Array(3, 1))

End Sub

ABRE UM ARQUIVO LOG EM DETERMINADO DIRETORIO


‘Estas macros (procedimentos) abre um arquivo ativo.log no diretório

‘C:\Meus documentos\ e inseri a ‘data e horário da abertura e fechamento de

‘determinada ‘planilha. Arquivo log txt

‘WorkBook_Open e Workbook_BeforeClose quando fechar

Private Sub Workbook_Open()


28/7/2014 MACROS PARA EXCEL - VBA-

Dim LogFile As String

LogFile = “C:\Meus documentos\Ativo.log”

ChDir “C:\Meus documentos”

Celula = Now()

Open LogFile For Append Shared As #1

Print #1, “Abertura do Excel” & Celula

Close #1

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim LogFile As String

LogFile = “C:\Meus documentos\Ativo.log”

ChDir “C:\Meus documentos”

Celula = Now()

Open LogFile For Append Shared As #1

Print #1, “Fechamento do Excel a ” & Celula

Print #1, “———————————-”

Close #1

End Sub

ABRE UM DETERMINADO ARQUIVO TXT NO EXCEL


‘Esta macro abre determinado arquivo no Excel

‘com os endereços de dados

Sub Abre_arquivo_txt_no_excel()

AdresseFichier = Application.GetOpenFilename(”Text Files (*.txt),*.txt”, _

, “Abrir dados de um determinado arquivo txt”)

If F = “False” Then End


28/7/2014 MACROS PARA EXCEL - VBA-

Workbooks.OpenText Filename:=AdresseFichier, Origin:=932, _

StartRow:=1, DataType:=xlDelimited, TextQualifier:= _

xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

Semicolon:=False, _

Comma:=False, Space:=False, Other:=False, _

FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _

TrailingMinusNumbers:=True

End Sub

ABRE UM ARQUIVO TXT E INSERI TEXTO


‘Esta macro abre arquivo txt e inseri texto

Sub Read_text_File()

Open “c:\Meus documentos\Textfile.txt” For Input Access Read As 1

Do While Not EOF(1)

Line Input #1, TextLine

Loop

Close #1

End Sub

EXIBE E ANIMA O ASSISTENTE.


’Usando o objeto Assistant
28/7/2014 MACROS PARA EXCEL - VBA-

‘Use a propriedade Assistant para retornar o objeto Assistant. Não há uma coleção de ‘objetos Assistant; somente um
objeto Assistant pode estar ativo de cada vez. Use a ‘propriedade Visible para exibir o assistente, e use a propriedade
On para ativar o ‘assistente.

Comentários

‘O assistente padrão é o Rex. Para selecionar um assistente diferente através de ‘programação, use a propriedade
FileName.

‘O exemplo a seguir exibe e anima o assistente.

Sub Tornar_visivel_assistente()

With Assistant

.Visible = True

.Animation = msoAnimationGreeting

End With

End Sub

EXIBE O ASSISTENTE DO OFFICE E O BALÃO INTERNO


‘O conteúdo deste tópico pode não ser aplicável a alguns idiomas.

‘Exibe o Assistente do Office e o balão interno “O que você deseja fazer?” para Ajuda ‘on-line padrão do Office.

Sub Assistente_Office()

Set b = Assistant.NewBalloon

With b

.Heading = “User Information”

.Text = “Select your skill level”

.CheckBoxes(1).Text = “Beginner.”

.CheckBoxes(2).Text = “Advanced.”

.CheckBoxes(3).Text = “Eu preciso de mais informações.”

.Show

End With
28/7/2014 MACROS PARA EXCEL - VBA-

If b.CheckBoxes(3).Checked = True Then

Assistant.Help

End If

End Sub

CHAMAR O ASSISTENTE COM DETERMINADA ANIMAÇÃO


’Esta macro chama o assistente (observar se o assistente esta instalado )

‘A relação de animação do assistente esta logo abaixo.

Sub Assistente_usar_animacao()

Dim ball As Balloon

Application.Assistant.Visible = True

Set ball = Application.Assistant.NewBalloon

With ball

.Heading = “Demonstração de como usar o assistente”

.Text = “Selecione uma option ou pressione o botão”

.Icon = msoIconTip

.Button = msoButtonSetAbortRetryIgnore

.Labels(1).Text = “Option1″

.Labels(2).Text = “Option2″

.Animation = msoAnimationWritingNotingSomething

‘msoAnimationThinking

‘msoAnimationSendingMail

‘msoAnimationSendingMail

‘msoAnimationSearching

‘msoAnimationSaving

‘msoAnimationRestPose

‘msoAnimationPrinting
28/7/2014 MACROS PARA EXCEL - VBA-

‘msoAnimationLookUpRight

‘msoAnimationLookDownLeft

‘msoAnimationLookLeft

‘msoAnimationLookDownRight

‘msoAnimationLookDown

‘msoAnimationListensToComputer

‘msoAnimationIdle

‘msoAnimationGreeting

‘msoAnimationGoodbye

‘msoAnimationGetWizardy

‘msoAnimationGetTechy

‘msoAnimationGetAttentionMinor

‘msoAnimationGetAttentionMajor

‘msoAnimationGetArtsy

‘msoAnimationGestureUp

‘msoAnimationGestureRight

‘msoAnimationGestureLeft

‘msoAnimationGestureDown

‘msoAnimationEmptyTrash

‘msoAnimationDisappear

‘msoAnimationBeginSpeaking

‘msoAnimationCheckingSomething

‘msoAnimationEmptyTrash

‘msoAnimationCharacterSuccessMajor

‘msoAnimationGetArtsy

.BalloonType = msoBalloonTypeButtons

End With

result = ball.Show
28/7/2014 MACROS PARA EXCEL - VBA-

If result = 1 Then MsgBox “Você pressionou Option1″, vbCritical, “XLeves®”

If result = 2 Then MsgBox “Você pressionou Option2″, vbCritical, “XLeves®”

If result = msoBalloonButtonAbort Then MsgBox “Você pressionou Cancelar!”

If result = msoBalloonButtonRetry Then MsgBox “Você pressionou Repetir!”

If result = msoBalloonButtonIgnore Then MsgBox “Você pressionou Ignorar!”

End Sub

CHAMA O ASSISTENTE COM DADOS PERSONALIZADOS


‘Esta macro chama o assistente, dados de acordo com a necessidade.

Sub Assistente()

‘Excel VBA Estudos®

‘e-mail: excelvbaestudos@hotmail.com

With Assistant.NewBalloon

.Animation = msoAnimationBeginSpeaking

.Icon = msoIconAlertInfo

.Heading = “Excel VBA Estudos®” & vbCr & _

“© E_Marcondes”

.Text = “Pesquisas e ensinos sobre VBA :”

.BalloonType = msoBalloonTypeButtons

.Labels(1).Text = “Aprender nunca e tarde” & vbCr & _

“- O Aprendizado leva-nos a perfeição.”

.Labels(2).Text = “É só utilizar um pouquinho de boa vontade” & vbCr & _

“- O Esforço é parte do sucesso!” & vbCr & _


28/7/2014 MACROS PARA EXCEL - VBA-

“- Caro Amigo,” & vbCr & _

“- Seja Bem Vindo ao Mundo do VBA®”

.Show

End With

End Sub

CRIA UM ATALHO NA ÁREA DE TRABALHO


‘Criar Atalho na Area de Trabalho

Sub CriarAtalho()

Dim Atalho As String, Pasta As String

Dim LocalExcel As String, Livro As String

Pasta = “C:\Documents and Settings\Nil\Desktop\”

Atalho = Pasta & ActiveWorkbook.Name & “.url”

LocalExcel = Application.Path & “\Excel.exe”

Livro = ActiveWorkbook.FullName

On Error GoTo Erro

Open Atalho For Output As #1

Print #1, “[InternetShortcut]” & vbCrLf & “URL = ” & Livro

Print #1, “IconIndex=1″ & vbCrLf & “IconFile=” & LocalExcel

Close #1

MsgBox “Foi criado o atalho em ” & Atalho & ” de ” & Livro, vbInformation, “Atalhos”

Exit Sub

Erro:

MsgBox Err.Number & ” - ” & Err.Description, vbCritical

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Criar atalho de um Livro - JJoão (02/2001)

Criar um atalho do livro activo no ambiente de trabalho do

utilizador corrente, este exemplo utiliza uma funcção em VBScript

para apurar a localização do ambiente de trabalho.

Function Ambiente_de_Trabalho()

'Exemplo usando VBScript para recolher a localização do ambiente de trabalho

Dim WsShell As Object

Set WshShell = CreateObject("WScript.Shell")

Ambiente_de_Trabalho = WshShell.SpecialFolders("Desktop")

Set WshShell = Nothing

End Function

Sub CriarAtalho()

Dim Atalho As String, Pasta As String

Dim LocalExcel As String, Livro As String

'ambiente de trabalho do utilizador corrente

Pasta = Ambiente_de_Trabalho & "\"

Atalho = Pasta & ActiveWorkbook.Name & ".url"

LocalExcel = Application.Path & "\Excel.exe"

Livro = ActiveWorkbook.FullName

On Error GoTo Erro

Open Atalho For Output As #1

Print #1, "[InternetShortcut]" & vbCrLf & "URL = " & Livro

Print #1, "IconIndex=1" & vbCrLf & "IconFile=" & LocalExcel

Close #1

MsgBox "Foi criado o atalho em " & _

Atalho & _

" de " & _

Livro, _

vbInformation, "Atalhos"

Exit Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Erro:

MsgBox Err.Number & " - " & Err.Description, vbCritical

End Sub

VBA EXCEL - TESTA SE A CÉLULA A SER FILTRADA É A ESCOLHIDA


‘VBA Excel - esta macro testa se a célula a ser Filtrada é a predeterminada (escolhida)

Sub Celula_Visivel_Filtro_modo()

Dim bHidden As Boolean

With Plan1

If .FilterMode = True Then

bHidden = .Range(”A5″).EntireRow.Hidden

MsgBox “O filtro do conteudo Range(A5) é..:” & vbCrLf & _

“isto é,conteudo de A5 não foi selecionado para filtrar ” & vbCrLf & bHidden

End If

End With

End Sub

DELETA VALORES E LINHAS ONDE HÁ DETERMINADOS VALORES


‘Esta macro deleta valores e linhas onde determinados valores estão inseridos

‘neste caso a palavra “ron”

Option Explicit

Sub Delete_with_Autofilter()

Dim DeleteValue As String

Dim rng As Range


28/7/2014 MACROS PARA EXCEL - VBA-

Dim calcmode As Long

With Application

calcmode = .Calculation

.Calculation = xlCalculationManual

.ScreenUpdating = False

End With

‘Fill in the value that you want to delete

‘Tip: use DeleteValue = “<>ron” to delete rows without ron

DeleteValue = “ron”

‘Sheet with the data, you can also use Sheets(”MySheet”)

With ActiveSheet

‘Firstly, remove the AutoFilter

.AutoFilterMode = False

‘Apply the filter

.Range(”A1:A” & .Rows.Count).AutoFilter Field:=1, Criteria1:=DeleteValue

With .AutoFilter.Range

On Error Resume Next

Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _

.SpecialCells(xlCellTypeVisible)

On Error GoTo 0

If Not rng Is Nothing Then rng.EntireRow.Delete

End With
28/7/2014 MACROS PARA EXCEL - VBA-

‘Remove the AutoFilter

.AutoFilterMode = False

End With

With Application

.ScreenUpdating = True

.Calculation = calcmode

End With

End Sub

RETORNA O ENDEREÇO CÉLULAS AUTOFILTRO APLICADO


‘Esta macro mostra o endereço das células onde estão aplicados

‘o AutoFiltro por Ex: se estiver visível o autofiltro - msgbox retorna


‘ex: $A$1:$F$1

Sub AutoFiltro_Retorna_Endereco_Aplicado()

With ActiveSheet

If .AutoFilterMode = True Then

MsgBox .AutoFilter.Range.Address

Else

MsgBox “AutoFiltro não esta aplicado“

End If

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

PERMITE O AUTOFILTRO EM PLANILHAS PROTEGIDAS.


‘Esta macro permite o auto-filtro em planilha protegida.

Sub Auto_Open()

‘Não exibe mudanças na tela

Application.ScreenUpdating = False

‘Desprotege a planilha

ActiveSheet.Unprotect ‘password:=”" , protege com senha.

‘Permite o AutoFiltro

ActiveSheet.EnableAutoFilter = True

‘Protege novamente a planilha

ActiveSheet.Protect contents:=True, userInterfaceOnly:=True ‘, password:=”"

‘Volta a exibir as mudanças de tela

Application.ScreenUpdating = True

End Sub

RETORNA O NÚMERO DE LINHAS FILTRADAS


‘Esta macro retorna o numero de linha filtrada
Sub Numero_linha_Filtrada()

Dim iNbLigne As Integer

For Each r In Sheets(”Plan1″).AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows

iNbLigne = iNbLigne + 1

Next

MsgBox “Filtrado < ” & iNbLigne - 1 & ” > Linhas”, vbInformation, “XL-Eves®”

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SEPARA DETERMINADOS DADOS E TRANSFERE OUTRA PLANILHA


VBA: Esta Macro separa determinados dados e transfere para outra planilha

Option Explicit

Sub Transfere_Transforma_Dados()

Dim wbBook As Workbook

Dim wsData As Worksheet, wsTransposed As Worksheet

Dim rnUnique As Range, rnStart As Range, rnData As Range

Dim rnFilter As Range, rnFind As Range, rnSource As Range

Dim vaField As Variant

Dim i As Long, j As Long

Set wbBook = ThisWorkbook

With wbBook

Set wsData = .Worksheets(”Rawdata”)

Set wsTransposed = .Worksheets(”Finalized data”)

End With

With wsData

Set rnUnique = .Range(.Range(”C1″), .Range(”C65536″).End(xlUp))

Set rnSource = .Range(.Range(”C2″), .Range(”C65536″).End(xlUp))

Set rnFilter = .Range(.Range(”A1″), .Range(”D65536″).End(xlUp))

Set rnData = .Range(”A1″)

End With

With wsTransposed

Set rnStart = .Range(”A1″)

End With

Application.ScreenUpdating = False

‘First we sort the table.

rnFilter.Sort Key1:=Range(”C2″), _

Order1:=xlAscending, _
28/7/2014 MACROS PARA EXCEL - VBA-

Header:=xlGuess, _

Ordercustom:=1, _

MatchCase:=True, _

Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

‘Then we create the unique collection of fieldnames.

rnUnique.AdvancedFilter _

Action:=xlFilterCopy, _

CriteriaRange:=rnUnique, _

CopyToRange:=Range(”J1″), _

Unique:=True

‘Read the unique collection into an array.

With wsData

vaField = .Range(.Range(”J2″), .Range(”J65536″).End(xlUp))

End With

With rnStart

.Value = “Request_ID”

‘Add the collection to the first row in the target-worksheet.

.Offset(0, 1).Resize(1, UBound(vaField)).Value = Application.Transpose(vaField)

‘Add the Request-ID numbers to the first column in the target-worksheet.

.Offset(1, 0).Resize(rnUnique.Rows.Count, 1).Value = rnUnique.Offset(1, -2).Value

End With

‘Loop through the collection, set the condition and finally

‘transfer the data into the target-worksheet.

For i = 1 To UBound(vaField)

rnData.AutoFilter Field:=3, Criteria1:=vaField(i, 1)

Set rnFind = rnSource.SpecialCells(xlCellTypeVisible)

j = rnFind.Rows.Count

rnStart.Offset(1, i).Resize(j, 1).Value = rnFind.Offset(0, 1).Value

Next i
28/7/2014 MACROS PARA EXCEL - VBA-

wsData.AutoFilterMode = False

Application.ScreenUpdating = False

MsgBox “Concluido”

End Sub

DELETA DADOS REFERENTE A DETERMINADO CRITERIO


‘Esta macro deleta dados referente ao critério AAA na coluna A

‘Autofiltro.para este tipo de macro seria ideal inserir um botão

‘para macro na barra de ferramenta, pois ela deleta as linhas e

‘com elas vão também os botões.

Option Explicit

Sub Deleta_Determinado_Codigo()

Dim rnData As Range

Dim lnSistaRaden As Long

Application.ScreenUpdating = False

With ActiveSheet

.UsedRange

lnSistaRaden = .Cells.SpecialCells(xlCellTypeLastCell).Row

Set rnData = .Range(”A1″, .Cells(lnSistaRaden, “A”))

rnData.AutoFilter Field:=1, Criteria1:=”AAA”

rnData.SpecialCells(xlCellTypeVisible).EntireRow.Delete

.Rows(”1:1″).Insert Shift:=xlDown
28/7/2014 MACROS PARA EXCEL - VBA-

.Range(”A1:C1″).Value = Array(”Codigo”, “Ordem”, “Valor”)

.UsedRange

End With

Application.ScreenUpdating = True

End Sub

Sub copiar_dados()

Sheets(”Plan2″).Select

Range(”A1:C15″).Select

Selection.Copy

Sheets(”Plan1″).Select

Range(”A1″).Select

ActiveSheet.Paste

Range(”E1″).Select

End Sub

‘Montar a planilha. (será deletado os codigos do critério AAA)

‘inserir dois botões na planilha

Plan1 para as duas macros (uma é para copiar para seu teste.)

Na Plan1 copiar estes dados embaixo para serem filtrados pela macro

‘Na plan2 inserir estes dados ai em baixo para ser copiados.

Planilha (Plan1) e tambem na Plan2 Ok

A1 B1 C1

Codigo Ordem Valor

AAA 1 3

BBB 2 4

CCC 3 5
28/7/2014 MACROS PARA EXCEL - VBA-

DDD 4 6

EEE 5 7

FFF 6 8

GGG 7 9

AAA 8 10

BBB 9 11

CCC 10 12

DDD 11 13

EEE 12 14

FFF 13 15

GGG 14 16

CHECA SE O AUTOFILTRO ESTA INSERIDO OU NÃO


‘Esta macro “checka ” se o modo auto filtro esta inserido ou não, isto é visilvel ou não.

Sub Checkar_se_Autofiltro_Inserido()

e-mail: vba@saberexcel.com

If ActiveSheet.AutoFilterMode = True Then

MsgBox “Autofiltro está visível”, vbInformation, “Saberexcel.com®”

Else

MsgBox “Autofiltro não está visível”, vbInformation, “Saberexcel.com®”

End If

End Sub

EXEMPLO DA PROPRIEDADE AUTOFILTERMODE


‘Exemplo da propriedade AutoFilterMode
28/7/2014 MACROS PARA EXCEL - VBA-

‘Este exemplo exibe o status atual da propriedade AutoFilterMode em Plan1.

Sub AutoFiltroMode()

If Worksheets(”Plan1″).AutoFilterMode Then

isOn = “Aberto “

Else

isOn = “Fechado”

End If

MsgBox “AutoFilterMode é ” & isOn

End sub

AJUSTA TODAS AS COLUNAS(A) DO WORKBOOK MEDIDA 17.43


‘Alinhamento Texto e Ajuste Coluna pelo Vba

‘Esta macro ajusta todas as colunas (A) do workbook para medida 17.43

Sub Ajusta_ColA_e_Texto_Wkb()

For i = 1 To Worksheets.Count

Worksheets(i).Activate

ActiveSheet.Columns(”A”).ColumnWidth = 17.43

ActiveSheet.Columns(”A”).VerticalAlignment = xlVAlignTop

ActiveSheet.Columns(”A”).HorizontalAlignment = xlHAlignRight

Next

End Sub

‘uma linha de comando

xShet.Columns(”A”).Cells.HorizontalAlignment = xlHAlignRight
28/7/2014 MACROS PARA EXCEL - VBA-

AJUSTA A COLUNA DE ACORDO COM O NOME INSERIDO


‘Ésta macro ajusta a coluna de acordo com tamanho do nome inserido

Sub ajusta_coluna()

Selection.Columns.AutoFit

End Sub

USANDO USERFORM E LABEL PARA AUTONUMERAÇÃO


‘Usando Userform para AutoNumeração, isto é, mostra no label uma autonumeração

Option Explicit

Private Sub cmbOK_Click()

Unload Me

End Sub

Private Sub UserForm_Initialize()

Dim rgNr As Range

Set rgNr = ActiveWorkbook.Worksheets(”Plan1″).Range(”A1″)

rgNr.Value = rgNr + 1

Label_OrdemNr.Caption = CStr(rgNr.Value)

End Sub

‘Label_OrdemNr. é um Label

FAZ UM BACKUP DE DETERMINADAS PLANILHAS


‘Esta planilha faz uma copia para de determinadas planilhas de um wk b

‘com um determinado nome e em diretório determinado, isto é faz uma

‘cópia das planilhas Pagamento e Combustível com o nome Back up_Segurança.xls


28/7/2014 MACROS PARA EXCEL - VBA-

Sub Backup_Planilhas_determinadas()

Sheets(Array(”Pagamento”, “Combustível”)).Copy

ActiveWork book .SaveAs “C:\Back up_Segurança.xls”

ActiveWork book .Close

End Sub

FAZ UM BACKUP COM SENHA DO ARQUIVO ABERTO


‘VBA Excel - cria um arquivo com Senha Através de outro arquivo já aberto.

Faz um back up com senha do arquivo aberto salva com nome segundo

‘O nome inserido na macro SaveAs como salva com outro nome

Sub Backup()

ActiveWork book .SaveAs Filename:=”C:\Meus documentos\EVES.xls”, _

FileFormat:=xlNormal, Password:=”123″, WriteResPassword:=”123″, _

ReadOnlyRecommended:=False, CreateBack up:=False

Range(”I5″).Select

End Sub

FAZ UM BACKUP NA PASTA B, FORMATO ANO_MES_DIA


‘Esta macro faz um Backup na pasta BK, com nome no formato yyyy_mmdd ( ano,mês,dia)

Sub backupBYDATE()

Dim dname As String, strTest As String

dname = “c:\mybackup\B” & Format(Now(), “yyyy_mmdd”)

strTest = Dir(dname, vbDirectory)

If (strTest = “”) Then Mk Dir (dname)


28/7/2014 MACROS PARA EXCEL - VBA-

ActiveWork book .SaveCopyAs dname & “\BK_” & ActiveWork book .Name

ActiveWork book .Save ‘also save current file

End Sub

VBA EXCEL - CHAMA AS BARRAS DE MENU DESEJADAS


VBA Excel

‘Esta macro chama as barras menu desejadas

Sub Congela_Controles()

Application.OnDoubleClick = “chama_macro”

CommandBars(”Work sheet Menu Bar”).Controls(”Extras”). _

Controls(”controle…”).Enabled = False

CommandBars(”Chart Menu Bar”).Controls(”Extras”). _

Controls(”controle…”).Enabled = False

CommandBars(”Toolbar List”).Enabled = False

End Sub

‘Macro para chamada

Sub chama_macro()

‘Insira o código

End Sub

‘Esta macro descongela os controles desejados

Sub Congela_Controles_II()

Application.OnDoubleClick = “chama_macro”

CommandBars(”Work sheet Menu Bar”).Controls(”Extras”). _

Controls(”controle…”).Enabled = True

CommandBars(”Chart Menu Bar”).Controls(”Extras”). _


28/7/2014 MACROS PARA EXCEL - VBA-

Controls(”controle…”).Enabled = True

CommandBars(”Toolbar List”).Enabled = True

RestoreDoubleKlick

End Sub

‘Restaura o Duplo Clic

Sub RestoreDuploClick()

Application.OnDoubleClick = “”

End Sub

BUSCA DETERMINADA PALAVRA EM TODAS AS PLANILHAS


‘Esta macro procura palavras em todas as planilhas inputbox solicita a palavras, e procura em todas.

Option Explicit

Sub Procura_palavra_todas_planilhas()

Dim wsPlan As Work sheet

Dim xcelula_string As String

Dim rnFAdress As Range, rngAtiva As Range

Dim xtexto As String, stPrompt As String, _

xTitulo As String, stVar As String


28/7/2014 MACROS PARA EXCEL - VBA-

xtexto = “Voce deseja que o sistema continua procurando?”

stPrompt = “Digite a palavra que deseja procurar!:”

xTitulo = “Procura Palavra Todas Planilhas!”

On Error Resume Next

xcelula_string = Application.InputBox( _

Prompt:=stPrompt, _

Title:=xTitulo, _

Type:=2)

If xcelula_string = “” Then

MsgBox “Voce não digitou nada!”, vbInformation, “Será finalizada! XL-Eves®”

End

End If

For Each wsPlan In ActiveWork book .Work sheets

With wsPlan.UsedRange

Set rngAtiva = .Find(xcelula_string, Look In:=xlValues, _

Look at:=xlPart, MatchCase:=False)

If Not rngAtiva Is Nothing Then

rnFAdress = rngAtiva.Address

wsPlan.Activate

Do

stVar = MsgBox(xtexto, vbYesNo, xTitulo)

If stVar = 7 Then End

Set rngAtiva = .FindNext(rngAtiva)

Loop While Not rngAtiva Is Nothing And rngAtiva.Address <> rnFAdress

End If

End With

Next

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

BUSCA E LOCALIZA DETERM PALAVRA E OCULTA LINHA OU DELETA


‘Esta macro localiza na coluna 3 a palavra toto e oculta a coluna para eliminar é

‘Preciso lançar no código a palavra EntireRow . Delete elimina.


Sub Busca_elimina__palavra_toto()

For Each ligne In ActiveSheet.UsedRange.Rows

r = ligne.Row

cherche = Application.Find(”toto“, Cells(r, 3))

If Not (IsError(cherche)) Then _

Cells(r, 3).EntireRow.Hidden = True ‘ oculta as linhas (Hidden), mas no caso de deletar (Delete)

Next

End Sub

BUSCA E ELIMINA PALAVRAS “MAL” DERIV “MALDOSO” DA COL 3


(C)
‘Esta macro elimina as palavras Mal e Maldoso da col 3 (c)

Sub Elimina_Palavras_Mal_Maldoso()

For Each ligne In ActiveSheet.UsedRange.Rows

r = ligne.Row

chercheMal = Application.Find(”mal“, Cells(r, 3))

chercheMaldoso = Application.Find(”maldoso“, Cells(r, 3))

If Not (IsError(chercheMal)) Or Not _

(IsError(chercheMaldoso)) Then Cells(r, 3).EntireRow.Hidden = True ‘ oculta as linhas

Next

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

LOCALIZA NA COL(A) NÚMERO IGUAL CONTIDO EM (B1)


‘Esta macro busca localiza na coluna A o número igual contido em B1

‘Localiza e colori de verde.

Sub buca_localiza_iguais()

Dim x As Range

Set x = Cells(1, 2)

If x = “” Then Exit Sub ’se a célula B1 estiver em branco (finaliza a macro)

‘Seleciona todas as coluna A

Columns(”A:A”).Select

Selection.Interior.ColorIndex = xlNone

Selection.Find(What:=x, After:=ActiveCell, Look In:=xlFormulas, Look At _

:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _

False).Activate

ActiveCell.Select

With Selection.Interior

.ColorIndex = 35

End With

End Sub

CRIA UMA LINHA DE CABEÇALHO


‘Esta macro cria uma linha de cabeçalho

Sub Cabeçalho()

Cells.Clear ‘ deleta todas as células

Range(”A1″).Formula = “Data”

Range(”B1″).Formula = “Nome”

Range(”C1″).Formula = “Endereço”
28/7/2014 MACROS PARA EXCEL - VBA-

Range(”D1″).Formula = “Cidade”

Range(”E1″).Formula = “CEP”

Range(”F1″).Formula = “Telefone”

End Sub

ABRE CAIXA DE DIALOGO ALINHAMENTO DE CÉLULAS


‘abre a caixa de dialogo alinhamento de células

Sub Alinhamento()

On Error Resume Next

Application.Dialogs(xlDialogAlignment).Show

End Sub

ABRE CAIXA DE DIALOGO SUPLEMENTOS


‘Abre a caixa de suplementos

Sub AddinMananger()

On Error Resume Next

Application.Dialogs(xlDialogAddinManager).Show

End Sub

ABRE CAIXA DE DIALOGO FONTES


‘abre a caixa de dialogo fontes

Sub CellFont()

On Error Resume Next


28/7/2014 MACROS PARA EXCEL - VBA-

Application.Dialogs(xlDialogActiveCellFont).Show

End Sub

ABRE CAIXA DE DIALOGO ABRIR ARQUIVO SUGERINDO O ARQUIVO


‘Esta macro abre a caixa de dialogo abrir o arquivo e embaixo na linha aparece o nome

’saberexcel.com – sugerido pelo código vba. Abrir

Sub Salvar_como()

Application.SendKeys “%l{LEFT}saberexcel.com”

planilha = Application.GetOpenFilename

End Sub

EXIBE A CALCULADORA DO WINDOWS


‘Esta macro exibe uma calculadora

Sub Calculadora()

‘Excel VBA Estudos

‘e-mail: excelvbaestudos@hotmail.com

Application.ActivateMicrosoftApp xlMicrosoftCalc

End Sub

‘Esta macro exibe uma calculadora.

Sub Calculadora()

‘Excel VBA Estudos®

‘e-mail: excelvbaestudos@hotmail.com

Shell “CALC.EXE”, 1

End Sub

SUBSTITUI O CARACTER
‘Esta macro substitui o caracter

Sub substitui_caracter()
28/7/2014 MACROS PARA EXCEL - VBA-

Columns(”E:E”).Replace What:=Chr(44), Replacement:=”.”, Look At:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False

Columns(”E:E”).Replace What:=Chr(130), Replacement:=”.”, Look At:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False

End Sub

MOSTRA CARACTER NO PREFIXO


‘Esta macro mostra o caracter no prefixo, merece mais atenção.(exercício de:)

‘Aluno: José Francisco, de Franca/sp.

Sub Prefixo_Le_Caracter()

Dim cel As Range

For Each cel In Selection.SpecialCells(xlConstants, xlTextValues)

If cel.PrefixCharacter <> vbNullString Then

MsgBox “Prefixo Caracter é : ” & cel.PrefixCharacter

End If

Next

End Sub

RETORNA O MAPA DE CARACTERES CHARMAP.EXE


‘Esta macro abre o mapa de caracteres

Sub ShowCharMap()

Dim vCharMap As String

‘ vCharMap = Shell(”C:\Windows\CharMap.exe”, 1)

‘ vCharMap = Shell(”C:\winnt\system32\CharMap.exe”, 1)

vCharMap = Shell(”C:\WINDOWS\system32\CharMap.exe”, 1) ‘(win xp)

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

RETORNA DETERMINADO CARACTER


‘Exemplo da função Chr

‘Este exemplo usa a função Chr para retornar o caractere associado ao código de
‘caracter especificado.

Dim MyChar

MyChar = Chr(65) ‘ Retorna A.

MyChar = Chr(97) ‘ Retorna a.

MyChar = Chr(62) ‘ Retorna >.

MyChar = Chr(37) ‘ Retorna %.

VBA EXCEL - CÉLULA INTERMITENTE (PISCANDO)


VBA Excel esta macro faz uma configuração de colorir a célula e fica intermitente de acordo com as cores definidas new Estilo
(Format / Estilo / Normal/ Adicionar )

‘Exemplo de valores de ColorIndex:

‘1= Preto, 2= Branco, 3= Vermelho, 4= verde,5= Azul, 6= Amarelo

‘Combina o stylo e uma macro Application.OnTime

Sub Flash()

Dim NextTime As Date

NextTime = Now + TimeValue(”00:00:01″)

With ActiveWorkbook.Styles(”Normal”).Font

If .ColorIndex = 2 Then .ColorIndex = 3 Else .ColorIndex = 2

End With

Application.OnTime NextTime, “Flash”

End Sub

Sub Parar()
28/7/2014 MACROS PARA EXCEL - VBA-

Application.OnTime NextTime, “Flash”, schedule:=False

ActiveWorkbook.Styles(”Normal”).Font.ColorIndex = xlAutomatic

End Sub

SELECIONA A PRÓXIMA CÉLULA EM BRANCO À DIREITA


‘Ésta macro seleciona a próxima célula em branco à Direita

Sub Ativa_Proxima_celula_branco_Direita()

ActiveCell.Offset(0, 1).Select

Do While Not IsEmpty(ActiveCell)

ActiveCell.Offset(0, 1).Select

Loop

End Sub

RETORNA QUANTIDADE DE CÉLULAS USADAS RANGE(A1:A10)


‘Esta macro retorna mensagem do total de células usadas na range(A1:A10)

Sub Conta_Celulas_Usadas_Det_range()

Dim Plage As Range

Set Plage = Range(”A1:A10″)

MsgBox Application.Work sheetFunction.CountA(Plage)

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

TESTAR A CÉL SE É EMPTY, VÁZIA, NULL, INTEGER, LONG, SINGLE,


CURRENCY
Testar a célula se é Empty, vázia, Null, Integer, Long, Single, Currency, Date,String, Object, Error, Boolean, Variant,
DataObject,Decimal, Byte, Array,

Sub Testar_Celula()

Dim strType As String

Select Case VarType(Selection.Value)

Case 0

strType = “Empty”

Case 1

strType = “Null”

Case 2

strType = “Integer”

Case 3

strType = “Long”

Case 4

strType = “Single”

Case 5

strType = “Double”

Case 6

strType = “Currency”

Case 7

strType = “Date”

Case 8

strType = “String”

Case 9
28/7/2014 MACROS PARA EXCEL - VBA-

strType = “Object”

Case 10

strType = “Error”

Case 11

strType = “Boolean”

Case 12

strType = “Variant”

Case 13

strType = “DataObject”

Case 14

strType = “Decimal”

Case 17

strType = “Byte”

Case 8192

strType = “Array”

End Select

MsgBox strType

End Sub

SELECIONAR CÉLULAS (VBA)


Estes procedimentos selecionam as células de acordo com a necessidade
PARA SELECIONAR CÉLULAS VBA

seleções vba1

Selection.End(xlDown).Select - abaixo

Selection.End(xlToRight).Select ‘ selec a direita Selection.End(xlToLeft).Select - esquerda

Selection.End(xlUp).Select - acima

ActiveCell.Offset(1, 0).Range(”A1″).Select

ActiveCell.Offset(-1, 0).Range(”A1″).Select ‘uma casa acima


28/7/2014 MACROS PARA EXCEL - VBA-

ActiveCell.Offset(0, -1).Range(”A1″).Select ‘uma casa a direita

ActiveCell.Offset(0, 1).Range(”A1″).Select ‘uma casa a direita

ActiveCell.FormulaR1C1 = “XXX” ‘dentro da cel ativa

Range(”d6″).Value = “XXX“ ‘Cel pre-determinada

Range(”PrecoTotal”).FormulaR1C1 = 99 ‘Célula range determinado

Range(”PrecoTotal”) = Range(”B12″) * 2 ‘Inserir calcular range

ActiveCell.Offset(-3, -2).Range(”A1:C4″).Select

seleciona a2:e5

Range(ActiveCell(2, 1), ActiveCell(5, 5)).Select

Selecione A2:E5.

ActiveCell(2).Resize(4, 5).Select

DELETA DETERMINADA CÉLULAS


‘Esta macro deleta determinadas células a partir de uma macro.

Sub_Limpar_Conteúdo()

Range(”a1:f30″).Select

Selection.ClearContents

Range(”h1″).Select

End Sub

DELETA PLANILHA SE CÉLULA A1 ESTIVER VAZIA


‘Esta macro se a planilha estiver vazia deleta

‘mas se contiver todo o resto dali para

‘baixo e para o lado será ocultado planilha vazia (oculta/deleta)

‘oculta colunas e linhas até onde esta digitado


28/7/2014 MACROS PARA EXCEL - VBA-

Sub Suprime_Planilhas_verifica_A1_()

Dim Sht As Work sheet

Set aSh = ActiveSheet

Application.ScreenUpdating = False

For Each Sht In ActiveWork book .Work sheets

Sht.Activate

ActiveSheet.UsedRange

Selection.SpecialCells(xlLastCell).Select

Application.DisplayAlerts = False

If ActiveCell.Address = “$A$1″ And IsEmpty(ActiveCell) Then

On Error Resume Next ‘no caso de ficar somente uma planilha

Sht.Delete

Else

ActiveCell.Offset(1, 1).Select

Range(Selection, Selection.End(xlDown)).EntireRow.Hidden = True

Range(Selection, Selection.End(xlToRight)).EntireColumn.Hidden = True

End If

Next Sht

End Sub

DELETA LINHAS EM BRANCO


Esta macros deleta linhas em branco

SpecialCells limit problem

Using SpecialCells in VBA is very useful for a lot of things in Excel.

XlCellType options are:


28/7/2014 MACROS PARA EXCEL - VBA-

• xlCellTypeAllFormatConditions

• xlCellTypeAllValidation

• xlCellTypeBlanks

• xlCellTypeComments

• xlCellTypeConstants

• xlCellTypeFormulas

• xlCellTypeSameFormatConditions

• xlCellTypeSameValidation

• xlCellTypeVisible

The only problem is that there is a limit of 8192 areas that it can handle.

http://support.microsoft.com/default.aspx?scid=k b;en-us;832293

Example for xlCellTypeBlank s

Note: All xlCellType options have this problem

Example: Manual select all Blank s in a column to delete the rows

1) Select the column

2) F5>Special

3) Select Blank s

4) OK

If there are more then 8192 areas you will see this MsgBox

But if we do the same with VBA, It works great if there are no more then 8192 areas.

However, if there are more than 8192 areas, then all the data on your sheet will be

deleted without any warning. ( And that’s not funny!)

If we use this macro below and there are more then 8192 areas we have a problem.

Sub DeleteBlankRows_1()
28/7/2014 MACROS PARA EXCEL - VBA-

‘This macro delete all rows with a blank cell in column A

On Error Resume Next ‘In case there are no blank cells

Columns(”A”).SpecialCells(xlCellTypeBlank s).EntireRow.Delete

On Error GoTo 0

End Sub

With the code below, we can test if we have more the 8192 areas so we won’t have the problem that it delete all
date on the worksheet.

Sub Delete_Linhas_Branco_2()

‘This macro delete all rows with a blank cell in column A

‘If there are no blanks or there are too many areas you see a MsgBox

Dim CCount As Long

On Error Resume Next

With Columns(”A”) ‘ You can also use a range lik e this Range(”A1:A8000″)

CCount = .SpecialCells(xlCellTypeBlank s).Areas(1).Cells.Count

If CCount = 0 Then

MsgBox “There are no blank cells”

ElseIf CCount = .Cells.Count Then

MsgBox “There are more then 8192 areas”

Else

.SpecialCells(xlCellTypeBlank s).EntireRow.Delete

End If

End With

On Error GoTo 0

End Sub

SELECIONAR CÉLULAS (VÁRIOS EXEMPLOS)


Selecionar células vários exemplos

‘Selecionar determinada range

Range(”A1″).Select

‘Selecionar determinada região para copiar


28/7/2014 MACROS PARA EXCEL - VBA-

CurrentRegion.Select

‘Selecão para copiar

Selection.Copy

’selecionar a planilha1

Sheets(”Plan1″).Select

‘Selecionar a range B1

Range(”B1″).Select

‘Selecionar a celula anterior

Range(”C3″).Select

Selection.End(xlDown).Select

‘Selecionar

ActiveCell.Offset(1, 0).Select

‘Selecionar para acolar

Selection.Paste

‘congelar tela

Application.ScreenUpdating = False

‘Descongelar a tela

Application.ScreenUpdating = True

‘Selecionar celulas(xl - Eves®)

‘Selecionar Abaixo—————–> Selection.End(xlDown).Select

‘Selecionar à Direita—————> Selection.End(xlToRight).Select

‘Selecionar à esquerda———–> Selection.End(xlToLeft).Select

‘Selecionar à Acima————–> Selection.End(xlUp).Select

‘Selecionar abaixo—————-> ActiveCell.Offset(1, 0).Select

‘Selecionar acima—————-> ActiveCell.Offset(-1, 0).Select

‘Selecionar esquerda ———–> ActiveCell.Offset(0, -1).Select


28/7/2014 MACROS PARA EXCEL - VBA-

‘Selecionar Direita ————–> ActiveCell.Offset(0, 1).Select

ACIONA O CURSOR PULA UMA COLUNA E SELECIONA CEL ABAIXO


‘Esta macro quando aciona o cursor pula uma coluna e seleciona

‘uma célula abaixo a direita.

Sub Pula_Celula_e_Seleciona_Abaixo()

Dim Linha_Var, Coluna_Var

Linha_Var = 1

Coluna_Var = 2

Selection.Offset(Linha_Var, Coluna_Var).Select

End Sub

SELECIONA A PRÓXIMA CÉLULA EM BRANCO À DIREITA


‘Ésta macro seleciona a próxima célula em branco à Direita

Sub Ativa_Proxima_celula_branco_Direita()

ActiveCell.Offset(0, 1).Select

Do While Not IsEmpty(ActiveCell)

ActiveCell.Offset(0, 1).Select

Loop

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

RETORNA QUANTIDADE DE CÉLULAS USADAS RANGE(A1:A10)


‘Esta macro retorna mensagem do total de células usadas na range(A1:A10)

Sub Conta_Celulas_Usadas_Det_range()

Dim Plage As Range

Set Plage = Range(”A1:A10″)

MsgBox Application.Work sheetFunction.CountA(Plage)

End Sub

TESTAR A CÉL SE É EMPTY, VÁZIA, NULL, INTEGER, LONG, SINGLE,


CURRENCY
Testar a célula se é Empty, vázia, Null, Integer, Long, Single, Currency, Date,String, Object, Error, Boolean, Variant,
DataObject,

Decimal, Byte, Array,

Sub Testar_Celula()

Dim strType As String

Select Case VarType(Selection.Value)

Case 0

strType = “Empty”

Case 1

strType = “Null”

Case 2

strType = “Integer”

Case 3

strType = “Long”

Case 4
28/7/2014 MACROS PARA EXCEL - VBA-

strType = “Single”

Case 5

strType = “Double”

Case 6

strType = “Currency”

Case 7

strType = “Date”

Case 8

strType = “String”

Case 9

strType = “Object”

Case 10

strType = “Error”

Case 11

strType = “Boolean”

Case 12

strType = “Variant”

Case 13

strType = “DataObject”

Case 14

strType = “Decimal”

Case 17

strType = “Byte”

Case 8192

strType = “Array”

End Select

MsgBox strType

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SELECIONAR CÉLULAS (VBA)


Estes procedimentos selecionam as células de acordo com a necessidade

PARA SELECIONAR CÉLULAS VBA

seleções vba1

Selection.End(xlDown).Select - abaixo

Selection.End(xlToRight).Select ‘ selec a direita Selection.End(xlToLeft).Select - esquerda

Selection.End(xlUp).Select - acima

ActiveCell.Offset(1, 0).Range(”A1″).Select

ActiveCell.Offset(-1, 0).Range(”A1″).Select ‘uma casa acima

ActiveCell.Offset(0, -1).Range(”A1″).Select ‘uma casa a direita

ActiveCell.Offset(0, 1).Range(”A1″).Select ‘uma casa a direita

ActiveCell.FormulaR1C1 = “XXX” ‘dentro da cel ativa

Range(”d6″).Value = “XXX“ ‘Cel pre-determinada

Range(”PrecoTotal”).FormulaR1C1 = 99 ‘Célula range determinado

Range(”PrecoTotal”) = Range(”B12″) * 2 ‘Inserir calcular range

ActiveCell.Offset(-3, -2).Range(”A1:C4″).Select

seleciona a2:e5

Range(ActiveCell(2, 1), ActiveCell(5, 5)).Select

Selecione A2:E5.

ActiveCell(2).Resize(4, 5).Select

DELETA DETERMINADA CÉLULAS


‘Esta macro deleta determinadas células a partir de uma macro.

Sub_Limpar_Conteúdo()

Range(”a1:f30″).Select

Selection.ClearContents

Range(”h1″).Select

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

DELETA PLANILHA SE CÉLULA A1 ESTIVER VAZIA


‘Esta macro se a planilha estiver vazia deleta ‘mas se contiver todo o resto dali para

‘baixo e para o lado será ocultado planilha vazia (oculta/deleta)‘oculta colunas e linhas até onde esta digitado

Sub Suprime_Planilhas_verifica_A1_()

Dim Sht As Work sheet

Set aSh = ActiveSheet

Application.ScreenUpdating = False

For Each Sht In ActiveWork book .Work sheets

Sht.Activate

ActiveSheet.UsedRange

Selection.SpecialCells(xlLastCell).Select

Application.DisplayAlerts = False

If ActiveCell.Address = “$A$1″ And IsEmpty(ActiveCell) Then

On Error Resume Next ‘no caso de ficar somente uma planilha

Sht.Delete

Else

ActiveCell.Offset(1, 1).Select

Range(Selection, Selection.End(xlDown)).EntireRow.Hidden = True

Range(Selection, Selection.End(xlToRight)).EntireColumn.Hidden = True

End If

Next Sht

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - CÓDIGO MORSE CODIFICAÇÃO E DECODIFICAÇÃO


VBA Excel - macro faz a codificação de um texto para o código Morse

Function MORSE(ByVal Texte As String)

Dim CMorse, CNorm, C As String

Dim I As Integer, L As Integer, M As Integer

CNorm = Array(”0″, “1″, “2″, “3″, “4″, “5″, “6″, “7″, “8″, “9″, _

“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, _

“N”, “O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”)

CMorse = Array(”—–”, “.—-”, “..—”, “…–”, “….-”, _

“…..”, “-….”, “–…”, “—..”, “—-.”, “.-”, “-…”, _

“-.-.”, “-..”, “.”, “..-.”, “–.”, “….”, “..”, “.—”, _

“-.-”, “.-..”, “–”, “-.”, “—”, “.–.”, “–.-”, “.-.”, _

“…”, “-”, “..-”, “…-”, “.–”, “-..-”, “-.–”, “–..”)

Texte = UCase$(Texte)

L = Len(Texte)

On Error Resume Next

For I = 1 To L

C = Mid$(Texte, I, 1)

If C Lik e “[.-]” Then MORSE = CVErr(xlErrValue): Exit Function

M = Application.Match(C, CNorm) - 1

If CNorm(M) = C Then MORSE = MORSE & CMorse(M) _

Else MORSE = MORSE & C

If I < L And C <> ” ” Then MORSE = MORSE & ” “

Next I

End Function
28/7/2014 MACROS PARA EXCEL - VBA-

‘ Decodificação de um texto de código Morse

Function MORSINVERSE(Texte As String) As String

Dim CMorse, CNorm, C As String, J As Integer

Dim I As Integer, L As Integer, M As Integer

CNorm = Array(”T”, “M”, “O”, “0″, “E”, “N”, “G”, “9″, “A”, “K”, _

“Q”, “W”, “Y”, “J”, “1″, “I”, “D”, “Z”, “8″, “R”, “C”, “P”, “U”, _

“X”, “2″, “S”, “B”, “7″, “L”, “F”, “V”, “3″, “H”, “6″, “4″, “5″)

CMorse = Array(”-”, “–”, “—”, “—–”, “.”, “-.”, “–.”, _

“—-.”, “.-”, “-.-”, “–.-”, “.–”, “-.–”, “.—”, “.—-”, _

“..”, “-..”, “–..”, “—..”, “.-.”, “-.-.”, “.–.”, “..-”, _

“-..-”, “..—”, “…”, “-…”, “–…”, “.-..”, “..-.”, _

“…-”, “…–”, “….”, “-….”, “….-”, “…..”)

L = Len(Texte)

On Error Resume Next

I=1

Do

Do

J = InStr(I, Texte, ” “)

If J <> I Then Exit Do

MORSINVERSE = MORSINVERSE & ” “

I=I+1

Loop

C = Mid$(Texte, I, IIf(J, J, L + 1) - I)

M = Application.Match(C, CMorse) - 1

If CMorse(M) = C Then MORSINVERSE = MORSINVERSE & CNorm(M) _

Else MORSINVERSE = MORSINVERSE & C

I=J+1

Loop While J
28/7/2014 MACROS PARA EXCEL - VBA-

End Function

VBA EXCEL - NUMERA COLUNAS ALTERNADAS A PARTIR DA COL6


VBA Excel - numera colunas alternadas a partir da coluna 6

Sub Numerar_Colunas_Alternadas()

‘2 3 4 5

Dim MaCellule As Range

Dim MonContenu As Integer

Set MaCellule = Cells(2, 6) ‘linha Range(”F2″)

MonContenu = 2

While MaCellule.Column <= 12

MaCellule.Value = MonContenu

Set MaCellule = MaCellule.Offset(0, 2) ‘je me déplace de 2 vers la droite

MonContenu = MonContenu + 1

Wend

End Sub

VBA EXCEL - COPIA CONTEÚDO PARA OUTRAS COLUNAS


VBA Excel - esta macro inseri o conteúdo A1 na coluna B e coluna E

’se inserir B:B e E:E, inserirá na coluna toda.

Sub Inseri_Conteúdo_A1_ColB_e_ColE()

Worksheets(”Plan1″).Range(”B1:B10,E1:E2″ & MaLigne) = _

Application.WorksheetFunction.Substitute(Range(”a1″), vbCrLf, Chr(10))


28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

‘variavel

Sub Variavel_substituir()

Dim locStrChk As String

locStrChk = “Hoje”

selectioncase = selectioncase + vbCrLf + locStrChk

Cells(1, 4) = Application.WorksheetFunction.Substitute(selectioncase, vbCrLf, Chr(10)


End Sub

VBA EXCEL - DELETA TODAS LINHAS NA COLUNA


VBA Excel - deleta todas as linhas na coluna partir da linha 2

’se a1 contiver qualquer coisa

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then

Range([A1], [A250].End(xlUp)).SpecialCells(xlCellTypeBlanks).Delete

End If

End Sub

VBA EXCEL -SELECIONA SETE COLUNAS E SETE LINHAS


VBA Excel - macro seleciona sete colunas e sete linhas

Sub Seleciona_Sete_Coluna_7_Linhas()

Selection.Resize(7, 7).Select
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

VBA EXCEL - MACRO APAGA CARACTERES


VBA Excel Dados apaga caracteres na colA mesma quantidade colB,‘Esta macro apaga caracteres na coluna A,‘na mesma
quantidade existente na coluna B,

Sub Apaga_na_colA_qt_colB()

Dim rRange As Range

Dim rCell As Range

Dim sContent As String

Dim iLastRow As Integer

iLastRow = Cells.SpecialCells(xlLastCell).Row

Set rRange = Range(”A:A”)

For Each rCell In rRange

If rCell.MergeCells Then

sContent = rCell

rCell.UnMerge

Else

If Not rCell.Offset(0, 1).Value = “” Then

rCell = sContent

End If

End If

If rCell.Row > iLastRow Then Exit Sub

Next rCell

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - MACRO SELECIONA A COLUNA ATÉ ULTIMA CÉLULA


VBA Excel - Macro seleciona a coluna até a última célula usada desde que não haja célula em branco

Sub Seleciona_Coluna_Ativa()

If IsEmpty(ActiveCell) Then Exit Sub

‘ ignora erro se celula ativa é na linha 1

On Error Resume Next

If IsEmpty(ActiveCell.Offset(-1, 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCell.End(xlUp)

If IsEmpty(ActiveCell.Offset(1, 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCell.End(xlDown)

Range(TopCell, BottomCell).Select
End Sub

TORNAM VISÍVEIS TODOS OS COMENTÁRIOS

‘Esta macro tornam visíveis todos os comentários

Sub Tornar_Visivel_Todos_Comentarios()

Dim wks As Worksheet, MyCmt As Comment

For Each wks In Worksheets

For Each MyCmt In wks.Comments

MyCmt.Visible = False ‘ oculta o comentario

MyCmt.Visible = True ‘ mostra o comentario

Next MyCmt

Next wks

End Sub

‘Tornam visível todos os indicadores dos comentários.

Sub Apenas_Indicador()
28/7/2014 MACROS PARA EXCEL - VBA-

Application.DisplayCommentIndicator = xlCommentIndicatorOnly

End Sub

Tornam visíveis todos os comentários e indicadores

Sub Comentario_e_Indicador()

Application.DisplayCommentIndicator = xlCommentAndIndicator

End Sub

MOSTRA UMA LISTA E O TEXTO DOS COMENTARIOS EXISTENTES


‘Esta macro mostra a lista de comentário e o texto existente numa planilha

Sub Mostra_Comentarios()

Application.ScreenUpdating = False

Dim commrange As Range

Dim mycell As Range

Dim curwks As Worksheet

Dim newwks As Worksheet

Dim i As Long

Set curwks = ActiveSheet

On Error Resume Next

Set commrange = curwks.Cells.SpecialCells(xlCellTypeComments)

On Error GoTo 0

If commrange Is Nothing Then

MsgBox “não foi encontrado nenhum comentário”

Exit Sub

End If

Set newwks = Worksheets.Add

newwks.Range(”a1:c1″).Value = Array(”Address”, “Value”, “Comment”)

i=1

For Each mycell In commrange


28/7/2014 MACROS PARA EXCEL - VBA-

With newwks

i=i+1

.Cells(i, 1).Value = mycell.Address

.Cells(i, 2).Value = mycell.Value

.Cells(i, 2).NumberFormat = mycell.NumberFormat

.Cells(i, 3).Value = mycell.Comment.Text

End With

Next mycell

Application.ScreenUpdating = True

End Sub

REMOVE O NOME DO AUTOR DOS COMENTÁRIOS NA PLANILHA


’Esta macro remove o nome do autor do comentário nas planilhas

Sub CommentRemoveUserName()

Dim cmt As Comment


Dim LUSR As Long

Dim USR As String

USR = LCase(Application.UserName) & “:” & CHR(10)

LUSR = Len(USR)

For Each cmt In ActiveSheet.Comments

If Left(LCase(cmt.Text), LUSR) = USR Then

cmt.Text Mid(cmt.Text, LUSR + 1)

End If

Next

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

PEDE O TEXTO DO COMENTÁRIO, SE HOUVER DELETA


‘Esta macro pede o texto do comentário,’se houver texto, inptbox ( deletar ou mudar o conteúdo)

Option Explicit

Sub Comentario_Deleta_ou_Muda_Conteudo()

‘© 2007 todos os direitos reservados XL-Eves®

Dim rnCell As Range

Dim stNamn As String

Dim vaKommentar As Variant

Dim iAtgard As Integer

stNamn = Application.UserName

Set rnCell = ActiveCell

With rnCell

If .Comment Is Nothing Then

vaKommentar = Application.InputBox _

(”Insira seu texto:”, “Inerir / redigir o comentario”, Default:=”", Type:=2)

If vaKommentar = False Then Exit Sub


28/7/2014 MACROS PARA EXCEL - VBA-

.AddComment Text:=stNamn & “:” & vbLf & vaKommentar

With .Comment.Shape.TextFrame

With .Characters.Font

.Size = 11

.ColorIndex = 3

.Name = “Arial”

End With

.AutoSize = True

.Characters(Start:=1, Length:=Len(stNamn)).Font.Bold = True

End With

Else

iAtgard = MsgBox(”você deseja deletar este comentário?”, vbYesNoCancel, “Deletar comentário?”)

Select Case iAtgard

Case vbYes

.Comment.Delete

Exit Sub

Case vbCancel

Exit Sub

Case vbNo

vaKommentar = Application.InputBox _

(”Mudar o comentário Inserido:”, “Mudar / comentário redigido”, Default:=”", Type:=2)

If vaKommentar = False Then Exit Sub

.Comment.Delete

.AddComment Text:=stNamn & “:” & vbLf & vaKommentar

End Select

End If

End With
28/7/2014 MACROS PARA EXCEL - VBA-

Application.DisplayCommentIndicator = xlCommentIndicatorOnly

End Sub

FORMATA UM COMENTARIO EXISTENTE NA CELULA D17


‘Esta macro formata um comentário existente na célula D17,

Sub FormatarComentario()

‘ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False

Dim wk s As Work sheet, MyCmt As Comment

For Each wk s In Work sheets

For Each MyCmt In wk s.Comments

MyCmt.Shape.OLEFormat.Object.AutoSize = True

With MyCmt.Shape.OLEFormat.Object.Font

Range(”D17″).Comment.Text Text:= _

“Excel VBA Estudos ” & Now() & Chr(10) & ” * Digite um valor menor que Célula E18! - << vba@saberexcel.com.com >>”

.Name = “Courrier New”

.Size = 10

.ColorIndex = 12

.Bold = True

End With

MyCmt.Shape.OLEFormat.Object.ShapeRange.Fill.ForeColor.SchemeColor = 27

Next MyCmt

Next wk s

” ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

MOSTRA NUMA MSGBOX (MSG) O NOME DO AUTOR DOS


COMENTÁRIOS
‘Esta macro mostra numa msgbox (MSG) o nome do autor dos comentários‘Comentário

Sub Msg_Autor_Comentario()

Dim c As Comment

For Each c In ActiveSheet.Comments

‘ definir o nome do autor

If c.Author <> “Excel VBA®” Then

c.Visible = True

c.Parent.Select

‘ Emite uma mensagem do autor dos comentários.

MsgBox “Autor do comentário” & vbCrLf & c.Author, vbInformation, “Excel VBA Estudos®”

c.Visible = False

End If

Next

End Sub

Registra acessos à célula E5 toda vez que a cel for acessada

FORMATA AS QUATRO PRIMEIRAS LETRAS DO COMENTÁRIO EM


NEGRITO
‘Esta macro formata as quatro primeiras letras do comentário em negrito,

Sub comentario_4_primeira_letra_Negrito()

If Not ExisteCommentaire Then

ActiveCell.AddComment

End If

ActiveCell.Comment.Visible = True

ActiveCell.Comment.Text Text:=”comentario para teste!”

ActiveCell.Comment.Shape.Select
28/7/2014 MACROS PARA EXCEL - VBA-

Selection.Characters(1, 4).Font.FontStyle = “Bold”

ActiveCell.Comment.Visible = False

‘err: MsgBox (”Comentario Existente!, selecione outra celula!”)

End Sub

AJUSTA O TAMANHO DE TODOS OS COMENTÁRIOS NA PLANILHA


‘Esta macro ajusta o tamanho de todos os comentários

Sub Ajusta_tamanho_todos_comentarios()

Dim Cmt As Comments

Dim C As Comment

Dim facteur As Integer

facteur = ActiveWindow.Zoom

Set Cmt = ActiveSheet.Comments

For Each C In Cmt

C.Visible = True

C.Shape.Select

With Selection

If facteur = 100 Then

.Font.Size = 8

.Height = 30

.Width = 90

Else

.Font.Size = 800 / facteur

.Height = 3000 / facteur

.Width = 9000 / facteur

End If

End With
28/7/2014 MACROS PARA EXCEL - VBA-

Next

ActiveCell.Select

End Sub

CONCATENA VALORES A PARTIR DE VARIÁVEIS DECLARADAS


‘Ésta macro concatena valores a partir

‘de variáveis declaradas

Sub concatenar_valores()

v = “( Aprender “

b = ” Vba “

a = ” é Bom!! )”

Cells(2, 3).Value = “1.000 ” & v & b & a

End Sub

CONCATENA OS DADOS DA COLUNA A2:A.. E B2:B NA COLUNA C2


‘Esta macro concatena os dados da coluna A2:A.. e B2:B na coluna c2

Option Explicit

Option Base 1
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Concatenar_Dados()

‘© XL-Eves®

vba@saberexcel.com

Dim vaColun1 As Variant, vaColun2 As Variant, vaData() As Variant

Dim wsPlan As Worksheet

Dim rnColun1 As Range, rnColun2 As Range, rnData As Range

Dim iAntal As Long

Set wsPlan = Worksheets(”Plan1″)

Set rnColun1 = wsPlan.Range(”A2″, Range(”A65536″).End(xlUp))

Set rnColun2 = wsPlan.Range(”B2″, Range(”B65536″).End(xlUp))

vaColun1 = rnColun1.Value

vaColun2 = rnColun2.Value

ReDim vaData(1 To UBound(vaColun1))

For iAntal = 1 To UBound(vaColun1)

vaData(iAntal) = vaColun1(iAntal, 1) & ” ” & vaColun2(iAntal, 1)

Next iAntal

Set rnData = wsPlan.Range(”C2″, Range(”C” & UBound(vaColun1) + 1))

rnData.Value = Application.Transpose(vaData)

End Sub

Ex: (Facilitação)
28/7/2014 MACROS PARA EXCEL - VBA-

‘inserir estes dados na planilha para ver o resultado.

A B C (nesta coluna c é onde os dados serão concatenados)

Lista 1 Lista 2 Concatenar Dados

Fabio Silva Fabio Silva

XL- Eves® XL- Eves®

Antonio X Antonio X

123 456 23 456

D123 D345 D123 D345

VBA EXCEL - MACRO CONCATENA DUAS COLUNAS


VBA Excel - macro concatenar duas colunas

‘Este exemplo permite concatenar as células das colunas A e B

‘Nas células na coluna C

Sub concatenar_celulas()

Dim t As String

Range(”A1″).Select

While ActiveCell.Value <> “”

t = ActiveCell.Offset(0, 0) & ActiveCell.Offset(0, 1)

ActiveCell.Offset(0, 2).Select

ActiveCell.Value = t

ActiveCell.Offset(1, -2).Select

Wend

End Sub

EXEMPLO DE CONSTANTES
‘O Visual Basic for Applications define constantes para simplificar sua programação. ‘As constantes a seguir podem ser usadas em
qualquer parte do seu código no lugar dos ‘valores reais ( neste caso específico retornará um msgbox concatenando as duas Const

‘Exemplo de Constantes

Public Const inputval = “123″


28/7/2014 MACROS PARA EXCEL - VBA-

Public Const inputval1 = “XL-Eves®”

Public Const vbex = inputval & inputval1

Sub teste_Constante()

Cells(1, 1) = inputval

Sheets(2).Cells(1, 2) = inputval

MsgBox vbex

End Sub

MOSTRA O ÍNDICE DE VARIAÇÃO (VBA)


Esta macro mostra o índice de variação (Produto e Índice)

Sub Indices_Variacao()

Dim carro(3) As Double

Dim variacao(3) As Double

Dim indice, i, j As Integer

valoratual = 66

‘pressupõe-se que nao haja valores iguais

carro(1) = 50

carro(2) = 62

carro(3) = 74

variacao(1) = Abs(carro(1) - valoratual) ‘16

variacao(2) = Abs(carro(2) - valoratual) ‘04

variacao(3) = Abs(carro(3) - valoratual) ‘08

‘Rotina da Excel VBA Estudos

‘acha a menor variacao

For i = 1 To 3 - 1

For j = 1 To 3 - 1
28/7/2014 MACROS PARA EXCEL - VBA-

If variacao(j) > variacao(j + 1) Then

temp = variacao(j)

variacao(j) = variacao(j + 1)

variacao(j + 1) = temp

End If

Next

Next

‘ fim da Rotina da Excel VBA Estudos

For indice = 1 To 3

If Abs(variacao(1) + carro(indice)) = valoratual Or Abs(variacao(1) - carro(indice)) = valoratual Then

MsgBox “Carro ” & indice & ” Valor ” & carro(indice)

End If

Next

End Sub

RECEITA BRUTA (CONTABILIDADE)


Receita Bruta 1.610,88 ValLiq

Taxa 15% Tax

Juros 241,63 =C1*C2

Descontos 0,00 iBox

Receita Líquida 1.369,25 =C1-C3

Insira em a1

‘Apuramento da Receita Bruta

Sub Apurar_Receita_Bruta()

Dim ValLiq, Tax, Cem, iBox

Tax = 88
28/7/2014 MACROS PARA EXCEL - VBA-

Cem = 100

ValLiq = Worksheets(”Plan1″).Range(”C5″)

If ValLiq = “” Then

Exit Sub

End If

iBox = Range(”C4″)

If iBox = “” Then

iBox = 0

End If

ValBrut = (ValLiq - iBox) * Cem / Tax

Range(”C1″).Select

ActiveCell = ValBrut

End Sub

COPIA 20 LINHAS E COLA EM RANGE PRÉ-DETERMINADA


‘Esta macro copia 20 linhas e cola em range pre-determinada

Sub Copia_20_Linhas_cola_range_determinada()

For i = 0 To 20

For j = 0 To 20 ‘Step 2
28/7/2014 MACROS PARA EXCEL - VBA-

Sheets(”Plan1″).Range(”C1:C20″).Offset(0, i).Copy Range(”A210″).Offset(0, j)

Next j

Next i

End Sub

‘copia determinadas linhas e cola em determinadas range

Sub copia_determinadas_Linhas_cola()

For i = 0 To 20

Sheets(”Plan1″).Range(”a1:a20″).Offset(0, i).Copy Destination:=Range(”A210″).Offset(0, 2 * i)

Next i

End Sub

COPIA COLA NA COLB E COLB NA COLC (CONCATENA ABC)


‘Esta macro copia ColunaA cola na ColB e ColB na ColC - Concatena ColB e ColC na colA

Sub Copia_ColA_Inseri_ColB()

Dim Rng As Range

Columns(”A”).Insert

Set Rng = Range(Cells(2, “B”), Cells(2, “B”).End(xlDown))

Rng.Offset(0, -1).Formula = “=B2 & “” “” & C2″

End Sub

COPIA ALTERNANDO UMA LINHA NA PLANILHA


Esta macro copia alternando uma linha
Sub Copia_alternando_uma_Linha()

ActiveCell.Resize(2, 1).EntireRow.Copy
28/7/2014 MACROS PARA EXCEL - VBA-

ActiveCell.Insert xlDown

Application.CutCopyMode = False

End Sub

‘–’

Sub CopyEndorsement()

Dim rng As Range

Set rng = ActiveCell

Dim crng As Range

Set crng = Selection

ActiveCell.EntireRow.Select

Selection.Insert Shift:=xlDown

Selection.Insert Shift:=xlDown

crng.Copy Destination:=crng

End Sub

Sub CopyEndorsement2()

ActiveCell.Resize(2, 1).EntireRow.Copy

ActiveCell.Insert xlDown

End Sub

ABRE A CAIXA DE DIALOGO “COLA ESPECIAL”


‘Esta macro abre a caixa de dialogo colar especial diálogo

Sub Caixa_Dialogo_ColaEspecial()

Range(”a1″).Select

Selection.Copy

Range(”a2″).Select

Application.Dialogs(xlDialogPasteSpecial).Show

End Sub

COLA A PALAVRA VARIAS VEZES NA PLANILHA


28/7/2014 MACROS PARA EXCEL - VBA-

‘Esta macro cola varias vezes a palavra company xl-eves®

Sub copia_cola_varias_vezes()

Selection.CurrentRegion.Select

Selection.Copy

Sheets(”Plan1″).Select

Range(”A2″).Select

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=False

Rows(”2:2″).Select

Application.CutCopyMode = False

Selection.Delete Shift:=xlUp

Range(”M2″).Select

ActiveCell.FormulaR1C1 = “Company XL-Eves®”

Range(”M2:Z2″).Select

Selection.AutoFill Destination:=Range(”M2:Z81″)

Range(”M2:Z81″).Select

End Sub

COPIA UMA CÉLULA COM FORMATO


‘Copia uma célula com formato (link formula)

‘(texto, borda, cor,) inserindo na célula a1 Plan2, com formula link .

Sub Copia_formato_celula()

Range(”A1″).Select

Selection.Copy

Sheets(”Plan2″).Select

Range(”A1″).Select

Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, Sk ipBlank s:=False _

, Transpose:=False
28/7/2014 MACROS PARA EXCEL - VBA-

ActiveSheet.Paste Link :=True

End Sub

COPIA A COLA E VAI INSERINDO QUANTAS VEZES FOR EXECUTADA


‘Esta macro copia a coluna A e vai inserindo

‘Quantas vezes a macro for executada

Sub Copia_Coluna_A_Inserindo()

With Range(”A1″, [A1].End(xlDown))

.Insert

.AdvancedFilter xlFilterCopy, , [A1], True

‘.Delete

End With

End Sub

CONDUZ O CURSOR E ROLA A TELA PARA A PRIMEIRA CÉLULA


ACIMA
‘Esta macro leva o cursor e rola a tela para a primeira célula
Sub Leva_cursor_rola_tela_primeira_Célula()

On Error Resume Next

zz = Application.Windows.Count

xx = ActiveCell.Row

For i = 1 To zz

Application.Windows(i).ScrollRow = xx
28/7/2014 MACROS PARA EXCEL - VBA-

Next

End Sub

CONDUZEM O CURSOR PARA CIMA, PARA BAIXO, DIREITA E


ESQUERDA
‘Estas macros conduzem o cursor para cima, para baixo, direita, esquerda…

Sub Cursor_Abaixo()

ActiveCell.Offset(1, 0).Select

End Sub

‘-’

Sub Cursor_Acima()

ActiveCell.Offset(-1, 0).Select

End Sub

‘-’

Sub Cursor_Direita()

ActiveCell.Offset(0, 1).Select

End Sub

‘-’

Sub Cursor_Esquerda()

ActiveCell.Offset(0, -1).Select

End Sub

‘Estas macros redirecionará o cursor para:

Sub Direita()

‘Vai para a direita

Application.MoveAfterReturnDirection = xlToRight

End Sub

Sub Abaixo()
28/7/2014 MACROS PARA EXCEL - VBA-

‘Volta ao normal antes de sair

Application.MoveAfterReturnDirection = xlDown

End Sub

Sub Esquerda()

Application.MoveAfterReturnDirection = xlToLeft

End Sub

Sub Acima()
Application.MoveAfterReturnDirection = xlUp
End Sub

VBA EXCEL - ENCERRA O APLICATIVO COM DADOS NA CELULA D1


‘Esta macros quando encerrado o Excel inseri a os seguintes dados

‘em D1 = Ultima modificação 05/04/2007 19:52

Private Sub Workbook_Open()

Dim modifica As Boolean

modifica = False

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If modifica = True Then

Sheets(”Plan1″).Range(”D1″).Value = “Ultima modificação” & Format(Date, _

“dd/mm/yyyy”) & ” ” & Format(Time, “hh:mm”)

End If

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

modifica = True

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

ÍNDICE LISTA LIGA FUNÇÃO(ARRAY) MESES E NÚMEROS


Macros com ligação à função ( Array) meses e números

Sub Indice_Lista_Liga()

Dim Liste1, Liste2

Dim MaVar1 As Integer, MaVar2 As Integer

Liste1 = Array(90, 110, 125, 140, 160, 180, 200, 225, 250)

Liste2 = Array(140, 170, 170, 182, 195, 205, 210, 170, 224)

With Application

MaVar1 = .InputBox(”Elemento da Lista 1 ?”, Type:=1)

MaVar2 = Liste2(.Match(MaVar1, Liste1) + (LBound(Liste2) = 0))

End With

MsgBox “Elemento ligado à “ & MaVar1 & ” dentro da Lista 2 : ” & MaVar2

End Sub

‘exemplo de utilização :

Function CodeMois(Mois$)Dim Liste1, Liste2

Liste1 = Array(”Janeiro”, “Fevereiro”, “Março”, “Abril”, “Maio”, “Junho”, _

“Julho”, “Agosto”, “Setembro”, “Outubro”, “Novembro”, “Dezembro”)

Liste2 = Array(”01″, “02″, “03″, “04″, “05″, “06″, _

“07″, “08″, “09″, “10″, “11″, “12″)

CodeMois = Liste2(Application.Match(Mois, Liste1, 0) + (LBound(Liste2) = 0))

End Function

‘Esta macro com as função acima retorna o número referente ao mês de Maio

Sub Testar_Mes()
28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox CodeMois(”Maio”)

MsgBox CInt(CodeMois(”Maio”))

End Sub

DECOMPÕE PALAVRAS SEPARADAS POR ÍFEM


‘Ésta macro separa palavras separadas por hífen

‘Uma espécie de decomposição das palavras

Sub separa_palavras_separadas_por_ifem()

Dim DerniereLigne As Integer

Dim PositionTiret As Integer

Dim Contenu As String

Dim Adroite As String

DerniereLigne = Cells(65535, 1).End(xlUp).Row

For i = 1 To DerniereLigne

Contenu = Cells(i, 1).Value

PositionTiret = InStr(Contenu, “-”)

If PositionTiret > 0 Then

Adroite = Right(Contenu, Len(Contenu) - PositionTiret)

Cells(i, 2).Value = Adroite

End If

Next i

End Sub

‘Na coluna A

‘Célula A1 Insira

10256-1002
28/7/2014 MACROS PARA EXCEL - VBA-

25-1002

6-1002
25982-1002

DECOMPÕE UMA FRASE DE UMA CÉLULA, CADA PALAVRA CÉLULA


DIFERENTE
‘Esta macro separa uma frase de uma célula - cada palavra

‘para uma célula diferente - seria decomposição

‘horizontal da frase - decompõe - decompõe

Sub Decompõe_Frase_Cada_Palavra_Cel_Dif()

For Each Celula In Selection

Celula.TextToColumns Destination:=Celula, OtherChar:=”-”

Next

End Sub

RELAÇÃO DE AUTO-CORREÇÃO DE PALAVRAS DO EXCEL


(DICIONÁRIO)
‘Relação das palavras do Dicionário de correção do Excel.

‘Esta macro inseri na col A e Col B - uma lista dos nomes da auto-correção do Excel -

‘que estão inseridos. Col A - nomes errados digitados e Col B - nomes corrigidos. ‘CORRIGE

Sub Auto_Correção_Portugues_Brasil()

[a1] = “Substituir”

[b1] = “Por”

Dim Corrliste

Corrliste = Application.AutoCorrect.ReplacementList

[A1].Resize(UBound(Corrliste, 1), 2) = Corrliste

Columns(”A:C”).autofit
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

DIGITAÇÃO FAZ UMA ORDEM DE TABULAÇÃO


‘Tem que inserir em nome Range(”VBA_Sk ipCells”) na Planilha Nome_Range -

‘Nome_Range!$B$5;Nome_Range!$B$13:$B$14;Nome_Range!$B$21:$D$23;Nome_’Range!$’’B$30:$D$30

Sub SkipCell()

On Error GoTo errhand

Dim sk ippy As Range

Set sk ippy = Range(”VBA_Sk ipCells”)

If Intersect(ActiveCell, sk ippy).Areas.Count = 1 Then

r = ActiveCell.Row

c = ActiveCell.Column

Cells(r + 1, c).Activate

End If

errhand:

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Call Sk ipLock ed ‘macro acima

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Call Sk ipCell ‘macro acima

End Sub

‘Esta macro faz uma ordem de tabulação, planilha Excel ( procedimentos )

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim lastcell As String


28/7/2014 MACROS PARA EXCEL - VBA-

Select Case lastcell

Case “a1″

Range(”a2″).Select

lastcell = “a2″

Case “a2″

Range(”a3″).Select

lastcell = “a3″

Case “a3″

Range(”b1″).Select

lastcell = “b1″

Case “b1″

Range(”c1″).Select

lastcell = “c1″

Case “c1″

Range(”d1″).Select

lastcell = “d1″

Case “d1″

Range(”b3″).Select

lastcell = “b3″

Case Else

Range(”a1″).Select

lastcell = “a1″

End Select

End Sub

DIGITAÇÃO COLC SERÁ ACEITA SE NÚMERO INSERIDO COLC FOR >


COLB
Digitação coluna c aceitará se o numero inserido ColC for maior que o numero ColB caso contrario, repete o número da
coluna B - digite vários números na coluna B e teste na coluna C inserindo números menores não aceita números menores.

Private Sub Worksheet_Calculate()

Dim InputRange As Range, Cell As Range

Set InputRange = Columns(”B”).SpecialCells(xlConstants, xlNumbers)


28/7/2014 MACROS PARA EXCEL - VBA-

For Each Cell In InputRange

If Cell.Value > Cell.Offset(0, 1).Value Then

Cell.Offset(0, 1).Value = Cell.Value

End If

Next Cell
End Sub

Se a coluna for maior que Oito deleta o que foi inserido

DIGITAÇÃO
‘Se a coluna for maior que 8 apaga o que foi inserido deleta clear coluna

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Column > 8 Then Target.Clear: Exit Sub

On Error GoTo ErrHandler

Application.EnableEvents = False

Target.Formula = UCase(Target.Formula)

ErrHandler:

Application.EnableEvents = True

End Sub

MACROS EXCEL VBA LISTA TODAS AS TRAS_DRIVES_EXISTENTES”


Macro do Exel VBA juntamente com as Declarações Functions, lista todas as “Letras_Drives_Existentes”
28/7/2014 MACROS PARA EXCEL - VBA-

Declare Function GetDriveType Lib “kernel” _

(ByVal DriveNumber As Integer) As Integer

Declare Function GetDriveTypeA Lib “kernel32″ _

(ByVal DriveNumber As String) As Integer

‘ Drive Types

‘ 0 = Drive Unknown

‘ 1 = No Root Directory

‘ 2 = Removable

‘ 3 = Hard disk

‘ 4 = Remote (network) drive

‘ 5 = CD ROM

‘ 6 = RAM Disk

Sub Lista_Todos_Drives()

Dim DrvCtr As Integer, Success As Integer, ListCtr As Integer

Sheets(1).Range(”A1:B26″).ClearContents

If InStr(1, Application.OperatingSystem, “32″) <> 0 Then

For DrvCtr = Asc(”A”) To Asc(”Z”)

Success = GetDriveTypeA(Chr(DrvCtr) & “:\”)

If Success <> 0 And Success <> 1 Then

ListCtr = ListCtr + 1

With Sheets(1)

.Cells(ListCtr, 1) = Chr(DrvCtr)

.Cells(ListCtr, 2) = Success

End With

End If

Next

Else

For DrvCtr = Asc(”A”) - 65 To Asc(”Z”) - 65


28/7/2014 MACROS PARA EXCEL - VBA-

Success = GetDriveType(DrvCtr)

If Success Then

ListCtr = ListCtr + 1

With Sheets(1)

.Cells(ListCtr, 1) = Chr(DrvCtr + 65)

.Cells(ListCtr, 2) = Success

End With

End If

Next

End If

End Sub

POCURA E RELACIONA TODOS ARQUIVOS DO EXCEL/WORD NOS


DIRETÓRIOS
‘Esta macro do Excel VBA relaciona todos os Excel (xls), Word(Doc) e todos, em todos Diretórios s e

‘SubDiretórios

Sub Procura_Relaciona_Todos_Arquivos()

Dim Classeurs() As String, I As Long

With Application.FileSearch

.NewSearch

.FileType = msoFileTypeExcelWork book s ‘ p/ excel

‘.FileType = msoFileTypeWordDocuments ‘ p/ word

‘.FileType = msoFileTypeOfficeFiles ‘ p/ todos

.Look In = “C:\” ‘ localiza os arquivos contidos em C:\

.SearchSubFolders = True

.Execute

With .FoundFiles
28/7/2014 MACROS PARA EXCEL - VBA-

ReDim Classeurs(1 To .Count, 1 To 1)

For I = 1 To .Count

Classeurs(I, 1) = .Item(I)

Next I

Application.ScreenUpdating = False

With Range(”A1″).Resize(.Count)

.Value = Classeurs

.Sort [A1]

End With

End With

End With

End Sub

MACRO EXCEL PROCURA POR ARQUIVO.EXE QUE ESTÃO ATIVOS NO


COMPUTADOR
‘Esta Macro do Excel vba procura por Arquivos EXE que estão ativos no momento no computador

Sub ArquivosEXEativos_no_momento()

Dim svc As Object

Dim sQuery As String

Dim oproc

Set svc = GetObject(”winmgmts:root\cimv2″)

sQuery = “select * from win32_process”

For Each oproc In svc.ExecQuery(sQuery)

MsgBox “Arquivo (*.Exe) Ativo >>> - ” & oproc.Name, vbExclamation, “Saberexcel.com”

Next

Set svc = Nothing

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

PROCURA POR DIRETÓRIO SE EXISTE OU NÃO ( FUNÇÃO EXCEL VBA


)
‘Esta função do juntamente com a macro procura e verifica se existe o diretório

‘( Excel vba macros )

Function DiretorioExiste(Chemin As String) As Boolean

On Error Resume Next

DiretorioExiste = GetAttr(Chemin) And vbDirectory

End Function

Sub Verifica_Diretorio()

If DiretorioExiste(”C:\Meus documentos”) = 0 Then

MsgBox “Diretório INEXISTENTE!”, vbInformation, “Excel VBA Estudos®”

Else

MsgBox (”Diretório existente”), vbInformation, “Excel VBA Estudos®”

End If

End Sub//

CRIA UM DIRETÓRIO EM C:/ (EXCEL MACROS FUNÇÕES )


‘Macro Excel cria uma diretório (pasta) em c:\

Public Sub Salvar_Processo()

Dim nome, nome_arq, diretorio As String

nome = Left(Sheets(”Plan1″).Range(”A2″).Value, 15) ‘área onde está o texto que me interessa

ChDrive “C”

diretorio = Dir(”C:\teste”, 16)

If diretorio = “” Then

Mk Dir “C:\teste”

End If

ChDir “C:\teste”

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

CAMINHO E NOME DO DIRETÓRIO


‘Mostra o diretório ( caminho ) da planilha

Sub caminho_e_nome_Plan()

With ActiveWork book

Nomeplanilha = .Name

MsgBox Nomeplanilha

End With

caminho = Sheets(”Plan1″).Range(”D7″).Value & “\” & Nomeplanilha

‘ActiveWork book .SaveAs Filename:=caminho

MsgBox caminho

End Sub

MOSTRA OS DIRETÓRIOS EXCEL CONTENDO ARQUIVOS.XLS


(FUNÇÕES E PROCEDIMENTOS)
‘Esta função e os procedimentos mostra os diretórios contendo arquivos.xls

Function ChargerFichiers()

Application.ScreenUpdating = False

Dim DirVar As String

‘DirVar = Dir(”c:\Meus documents\*.xls”)

DirVar = Dir(Application.DefaultFilePath & “\*.xls”)

Do While DirVar <> “”

UserForm1.ComboBox1.AddItem DirVar

DirVar = Dir()

Loop

UserForm1.Show

End Function
28/7/2014 MACROS PARA EXCEL - VBA-

Private Sub UserForm_Initialize()

Dim stRep As String

Dim st As String

Dim i As Integer

Dim bDejaVu As Boolean

stRep = ThisWork book .Path & “\vba\”

st = Dir(stRep & “*.xls”)

While st <> “”

‘ PAUL-DURANT-291007.xls

‘ 12345678901 ‘=> 11 car

If Len(st) > 13 Then ‘11 + 3

Debug.Print st;

st = Left(st, Len(st) - 11) ‘ on prends que le nom

Debug.Print ” => ” & st

‘Verifie si pas déjà dans liste et rajoute…

bDejaVu = False

For i = 0 To cbx_ChoixClient.ListCount - 1

If cbx_ChoixClient.List(i) = st Then

bDejaVu = True

Exit For

End If

Next

If Not bDejaVu Then cbx_ChoixClient.AddItem (st)

End If

DoEvents ‘

st = Dir

Wend

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

’seleção de um cliente

Private Sub cbx_ChoixClient_Change()

cbx_ChxDate.Clear

stRep = ThisWork book .Path & “\vba\”

st = Dir(stRep & cbx_ChoixClient.List(cbx_ChoixClient.ListIndex) & “*.xls”)

While st <> “”

If Len(st) > 13 Then ‘11 + 3

Debug.Print st;

st = Left(Right(st, 10), 6) ‘ on prends la date..

Debug.Print ” => ” & st

cbx_ChxDate.AddItem (st)

End If

DoEvents ‘ Au cas ou…

st = Dir

Wend

End Sub

Private Sub cbx_ChxDate_Change()

Dim stFichier As String

stFichier = ThisWork book .Path & “\vba\” & cbx_ChoixClient.List(cbx_ChoixClient.ListIndex) & “-” & _

cbx_ChxDate.List(cbx_ChxDate.ListIndex) & “.xls”

MsgBox “arquivos existentes : ” & vbCrLf & _

stFichier

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - ABRE UM DIRETÓRIO E SALVA UM ARQUIVO COM


NOME ESCOLHIDO
DIRETÓRIOS
VBA Excel

Esta macro abre um diretório predeterminado e salva um arquivo com nome também

‘Predeterminado salva como: Excel VBA®

Sub Abre_Diretorio_Inseri_Nome_Salvar()

ChDir (”C:\Documents and Settings\E_Marcondes\Meus documentos\”)

Application.Dialogs(xlDialogSaveAs).Show “C:\Documents and Settings\E_Marcondes\Meus documentos\Excel VBA®.xls”

End Sub

VBA -EXCEL ENVIA E-MAIL COM ANEXOS


Enviar Email com anexos, assinatura e imagens pelo Excel via Outlook

Mais uma pequena alteração, esta para permitir enviar imagens dentro da mensagem, esta imagem pode ser colocado como background
ou simplesmente inseri-la junto do texto.

Para colocar como background pode fazê-lo através do “<body background=”cid:imagem.jpg”>” ou em tabela no corpo da
mensagem, para esta personalização terá que se explorar um pouco o html.

A rotina permite inserir várias imagens, desde que seja escrito o caminho correcto na celula C14, para mais do que uma, deve-se separar
com o ; (ponto e virgula)

Foi adicionado ”Function recolheImagem(stImagem)” que retira o caminho da imagem quando este já não é necessário.

Option Explicit
Sub Enviar_Email()
Dim enderecos As Range
Dim celula As Range
Dim anexo As String
Dim r As Integer
Dim fim
Dim enviar
28/7/2014 MACROS PARA EXCEL - VBA-

Dim objOlAppApp As Outlook.Application


Dim objOlAppMsg As Outlook.MailItem
Dim objOlAppRecip As Outlook.Recipient

Set objOlAppApp = CreateObject(“Outlook.Application”)


Set objOlAppMsg = objOlAppApp.CreateItem(olMailItem)

‘Celulas com os endereços


Set enderecos = Range(“C4:C10″)

With objOlAppMsg

‘Processar endereços para o envio


For Each celula In enderecos
If celula.Text <> “” And InStr(1, celula.Text, “@”) > 0 Then
Set objOlAppRecip = .Recipients.Add(celula.Text)
‘definir o tipo do destinatario
Select Case UCase(celula.Offset(0, 1).Text)
Case “CC”
objOlAppRecip.Type = olCC
Case “BCC”
objOlAppRecip.Type = olBCC
Case “”
objOlAppRecip.Type = olTo
End Select
End If
Next celula
‘verificar se existe destinatário(s)
If .Recipients.Count = 0 Then GoTo fim
‘Anexar ficheiro(s), com o nome e caminho escrito na celula C13

‘Para mais do que 1 anexo utilizar ; como separador
‘Ex: c:\anexo1.txt;c:\anexo2.txt;c:\anexo3.txt

anexo = Range(“C13″)
‘testar se existe anexos
If Len(anexo) = 0 Then GoTo enviar
‘tratar anexos
Dim anexos
anexos = Split(anexo, “;”)

Dim i
For i = LBound(anexos) To UBound(anexos)
‘verificar se o caminho para o anexo é válido
If Dir(anexos(i)) = “” Then
r = MsgBox(“Anexo ‘” & anexos(i) & _
“‘inexistente ou caminho invalido, “ & _
“pretende enviar assim mesmo ? “, _
vbYesNo, _
“Erro na localização do anexo”)
If r <> vbYes Then GoTo fim
Else
.Attachments.Add anexos(i)
End If

Next i

enviar:
‘definir a sua importancia
.Importance = olImportanceHigh
28/7/2014 MACROS PARA EXCEL - VBA-

‘O assunto
.Subject = “Envio de Livro - “ & Format(Now, “dd-mmm.yyyy hh:mm:ss”)

‘tratar imagens para inserir no email


Dim imagem, arrImagens
‘celula onde colocamos a localização da imagem
imagem = Range(“C14″)

If Len(imagem) > 0 Then

arrImagens = Split(imagem, “;”)


imagem = “<p>Imagem</p>”

For i = LBound(arrImagens) To UBound(arrImagens)


If Dir(arrImagens(i)) <> “” Then
.Attachments.Add arrImagens(i)
imagem = imagem & _
“<p><img src=”"cid:” & _
recolheImagem(arrImagens(i)) & _
“”" /></p>”
End If
Next i

End If

‘O conteudo do Mail, imagens e assinatura (caso existam)


.HTMLBody = “<html><body>Envio de livro ………<br />” & _
“Texto a inserir no conteudo do mail……….<br />” & _
imagem & “<br />” & Assinatura & “</body></html>”

‘enviar mensagem

.Send
End With
fim:
‘Libertar as variaveis
Set objOlAppApp = Nothing
Set objOlAppMsg = Nothing
Set objOlAppRecip = Nothing
End Sub


‘ Função usada para tratar o pedido de inserção de assinatura

Function Assinatura()
Dim fAssinatura, stAssinatura, stLinha
fAssinatura = Environ(“APPDATA”) & “\Microsoft\Signatures\” & Range(“C15″)
stAssinatura = “”
If Dir(fAssinatura) <> “” Then
Open fAssinatura For Input As #1
Do While Not EOF(1)
Line Input #1, stLinha
stAssinatura = stAssinatura & vbCrLf & stLinha
Loop
Close #1
End If
Assinatura = stAssinatura
End Function
28/7/2014 MACROS PARA EXCEL - VBA-


‘ Função que retira o caminho da imagem deixando só o nome desta,
‘ é usado para inserir a imagem no email.
‘ Ex: c:\imagens\imagem.jpg
‘ fica: imagem.jpg

Function recolheImagem(stImagem)
Dim x, ultimo_x
‘buscar somente o nome da imagem
x = InStr(1, stImagem, “\”)
Do
ultimo_x = x
x = InStr(x + 1, stImagem, “\”)
Loop Until x = 0
recolheImagem = Mid(stImagem, _
InStr(ultimo_x, stImagem, “\”) + 1, _
Len(stImagem))
End Function

MACRO EXCEL VBA ENVIA E-MAIL ( TIPO UMA RESPOSTA


AUTOMÁTICA )
‘Esta macro envia E-Mail ( tipo uma resposta automática )’Use a referencia o Outlook Object Library no VBEditor

‘Use a macro de acordo com sua necessidade E-Mail

Sub Send_Msg()

‘Excel VBA Estudos®

‘e-mail: vba@saberexcel.com

Dim objOL As New Outlook .Application

Dim objMail As MailItem

Set objOL = New Outlook .Application

Set objMail = objOL.CreateItem(olMailItem)

With objMail

.To = excelvbaestudos@hotmail.com ‘ inserir mailto: entre aspas

.Subject = “Resposta de e-mail automática”

.Body = “Esta é uma mensagem automática para Excel” & _

“O s: ” & _

Format(Range(”A1″).Value, “$ #,###.#0″) & “.”

.Display

End With
28/7/2014 MACROS PARA EXCEL - VBA-

Set objMail = Nothing

Set objOL = Nothing

End Sub

ENVIA ARQUIVO E MOSTRA SUBJECT SO 3 LETRAS NOME ARQUIVO


‘esta macro excel vba mostra no subject parte do nome do arquivo e no corpo somente com 3 letras

‘parte do nome do arquivo vem com link somente com 5 letras

Sub SendEmail(EmailAddr As String, Texte As String)

‘–definir as células

Temp = Range(”A1″)

i = InStrRev(Temp, “\”)

Temp = Right(Temp, Len(Temp) - i)

Subj = “Tres primeiros nomes do Arquivo(A1) : ” + Left(Temp, Len(Temp) - 4)

Temp = “file:” + Range(”A1″)

‘–Composição da menssagem

Msg = “Bom dia ” & “%0A”

Msg = Msg & “%0A” & Texte & “%0A”

Msg = Msg & “%0A” & Temp & “%0A”

Msg = Msg & “%0A” & ” “

‘–Construir Link hypertexto

HLink = “mailto:” & EmailAddr & “?”

HLink = HLink & “subject=” & Subj & “&”

HLink = HLink & “body=” & Msg


‘–Transmettre le message

ActiveWork book .FollowHyperlink HLink

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Sub ENVIAR()

SendEmail “excelvbaestudos@hotmail.com“, “Segue holerite pagamento mês dezembro“

End Sub

MACRO EXCEL ENVIA DETERMINADA PLANILHA VIA E-MAIL


‘Esta macro faz uma espécie de agendamento para envio da Planilha Excel

‘Envia somente determinada planilha ex: (Plan1)

Option Explicit

Sub Envia_planilha_copia_outlook()

Dim olApp As Outlook .Application

Dim olNewMail As Outlook .MailItem

Dim stSok Vag As String

Dim stNamn As String

Set olApp = New Outlook .Application

Set olNewMail = CreateItem(olMailItem)

Application.ScreenUpdating = False

’salva uma copia

ActiveSheet.Copy

ActiveWork book .Save

stSok Vag = ActiveWork book .Path

stNamn = ActiveWork book .Name

ActiveWork book .Close

With olNewMail

With .Recipients.Add(”excelvbaestudos@hotmail.com”)
28/7/2014 MACROS PARA EXCEL - VBA-

.Type = olTo

If Not .Resolve Then

MsgBox “contem planilhas com dados.”, vbInformation

Exit Sub

End If

End With

.Subject = “Atender: Programadores”

.Body = “Estudar VBA com XL-Eves® é aprender mesmo.”

.Attachments.Add stSok Vag & “\” & stNamn, olByValue, _

1, “Programadores“

.Save

End With

Set olNewMail = Nothing

Set olApp = Nothing

Kill stSok Vag & “\” & stNamn

Application.ScreenUpdating = False

End Sub

ENVIA UM E-MAIL COM DUPLO CLICK


‘Este procedimento Excel VBA envia um e-mail com duplo click

Private Sub Worksheet_BeforeDoubleClick(ByVal _

Target As Range, Cancel As Boolean)

ThisWorkbook.FollowHyperlink _

“mailto:vba@saberexcel.com?subject=” & _
28/7/2014 MACROS PARA EXCEL - VBA-

Replace(Target.Value, “&”, “%26″) & _

“&body=É um Teste.”

End Sub

ENVIA ARQUIVO VIA E-MAIL ENDEREÇOS E ASSUNTO REFERE


CÉLULAS EXCEL
ENVIA E-MAIL

‘Esta macro Excel vba envia um documento via e-mail, tendo como endereços e assunto determinadas

‘células da planilha do Excel


Sub SendMail_Outlook ()

‘Acessar a referencia do Editor de VBA e assinalar: Menu / Ferramentas / Referencias / Marque “Microsoft Outlook
Library”

Dim ol As New Outlook .Application

Dim olmail As MailItem

Dim CurrFile As String

Set ol = New Outlook .Application

Set olmail = ol.CreateItem(olMailItem)

With olmail

.To = range(”a3″).value

.Subject = Range(”a1″).Value

.Body = “Contenu ” & Range(”a2″).Value

.Attachments.Add “c:\Meus documentos\pagamento.doc”

.Display ‘.Send

‘On peut switcher entre .send et .display selon que l’on veut envoyer le mail (send) ou

‘seulement le préparer et le vérifier(display)

End With

End Sub

Sub Quit_Outlook()

‘Pelo aplicativo Excel fechar o aplicativo Outlook


28/7/2014 MACROS PARA EXCEL - VBA-

Set myOlApp = CreateObject(”Outlook .Application”)

myOlApp.Quit

End Sub

ENVIA UM E-MAIL OU CONECTA À DETERMINADA PÁGINA WEB


‘Estes procedimentos sub do excel vba envia um e-mail, ou concecta à determinada página da internet

‘na hora de colar os códigos ( o endereço da url e do e-mail tem que estar entre aspas “

Private Sub lblMail_Click()

Link = mailto:excelvbaestudos@hotmail.com

On Error GoTo NoCanDo

ActiveWork book .FollowHyperlink Address:=Link , NewWindow:=True

Unload Me

Exit Sub

NoCanDo:

MsgBox “Desconectado à internet” & Link

End Sub

Private Sub lblWeb_Click()

Link = http://www.saberexcel.com/

On Error GoTo NoCanDo

ActiveWork book .FollowHyperlink Address:=Link , NewWindow:=True

Unload Me

Exit Sub

NoCanDo:

MsgBox “Há um problema com a internet - ver se esta desligado” & Link

End Sub

ENVIA UM E-MAIL PARA UM DETERMINADO E-MAIL


28/7/2014 MACROS PARA EXCEL - VBA-

‘Esta Macro Excel VBA envia a Planilha 1 para um determinado e-mail:

Sub Envia_Planilha()

Work book s(”Pasta1.xls”).Sheets(”Plan1″).Copy

ActiveWork book .SendMail _

Recipients:=”excelvbaestudos@hotmail.com”, _

Subject:=”Envio-lhe o arquivo Budget.xls“

End Sub

MACRO EXCEL COM FUNÇÃO ENCRIPTAR E DESENCRIPTAR DADOS


Esta macro inseri uma Função Encripta e Deseencripta Dados

‘Encripta e Desencripta

Sub Botão1_Clique()

Cells(8, 3) = Encripta(Cells(8, 2))

End Sub

Sub Botão2_Clique()

Cells(8, 4) = Desencripta(Cells(8, 3))

End Sub

Function Encripta(Senha As String) As String

Dim A, C As String

Dim B As Integer

A = “”

For I = 1 To Len(Senha)

B = Int((255 * Rnd) - 1)

While Asc(Mid(Senha, I, 1)) + B > 255

B = B - 28

Wend

C = Chr(B + 30)

A = A & Chr(Asc(Mid(Senha, I, 1)) + B) & C


28/7/2014 MACROS PARA EXCEL - VBA-

Next I

Encripta = A

End Function

Function Desencripta(Senha As String) As String

Dim A, C As String

Dim B As Integer

A = “”

For I = 1 To Len(Senha) / 2

B = Asc(Mid(Senha, I * 2, 1)) - 30

C = Mid(Senha, (I * 2) - 1, 1)

A = A & Chr(Asc(C) - B)

Next I

Desencripta = A

End Function

PROPRIEDADE ENDEREÇO
(Endereço ) VBA (Address)

Propriedade Address

A propriedade Address(Endereço) como ela se aplica ao objeto Hyperlink


Retorna ou define o endereço do documento alvo. String de leitura/gravação.
expressão.Address
expressão necessária. Uma expressão que retorna um dos objetos acima.

A propriedade Address como ela se aplica ao objeto Range


Retorna a referência do intervalo no idioma da macro. String somente leitura.
expressão.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

expressão necessária. Uma expressão que retorna um dos objetos acima.


RowAbsolute Variant opcional. True para retornar a parte de linha da referência como uma referência absoluta. O valor padrão
é True.
28/7/2014 MACROS PARA EXCEL - VBA-

ColumnAbsolute Variant opcional. True para retornar a parte de coluna da referência como uma referência absoluta. O valor
padrão é True.

ReferenceStyle XlReferenceStyle opcional.


XlReferenceStyle pode ser uma das seguintes constantes:
xlA1 padrão. Use xlA1 para retornar uma referência em estilo A1.
xlR1C1. Use xlR1C1 para retornar uma referência em estilo L1C1.

External Variant opcional. True para retornar uma referência externa. False para retornar uma referência local. O valor padrão
é False.

RelativeTo Variant opcional. Quando RowAbsolute e ColumnAbsolute são False e ReferenceStyle é xlR1C1, você precisa incluir
um ponto inicial para a referência relativa. Esse argumento é um objeto Range que define o ponto inicial.

Comentários

Se a referência contiver mais de uma célula, RowAbsolute e ColumnAbsolute se aplicarão a todas as linhas e colunas.

Exemplo

O exemplo seguinte exibe quatro representações diferentes do mesmo endereço de célula em Sheet1. Os comentários do exemplo são
os endereços que serão exibidos nas caixas de mensagem.

Set mc = Worksheets(”Sheet1″).Cells(1, 1)

MsgBox mc.Address() ‘ $A$1

MsgBox mc.Address(RowAbsolute:=False) ‘ $A1

MsgBox mc.Address(ReferenceStyle:=xlR1C1) ‘ R1C1

MsgBox mc.Address(ReferenceStyle:=xlR1C1, _

RowAbsolute:=False, _

ColumnAbsolute:=False, _

RelativeTo:=Worksheets(1).Cells(3, 3)) ‘ R[-2]C[-2]

ENDEREÇO
Cria um endereço de célula como texto, dados números específicos de linhas e colunas.

Sintaxe:

ENDEREÇO(núm_linha;núm_col;núm_abs;a1;texto_planilha)
Núm_linha é o número da linha a ser utilizado na referência da célula.
Núm_col é o número da coluna a ser utilizado na referência da célula.
Núm_abs especifica o tipo de referência a ser retornado.
Núm_abs Retorna este tipo de referência
1 ou omitido Absoluta

2 Linha absoluta, coluna relativa


3 Linha relativa, coluna absoluta
4 Relativa
28/7/2014 MACROS PARA EXCEL - VBA-

A1 é um valor lógico que especifica o estilo de referência A1 ou L1C1. Se A1 for VERDADEIRO ou omitido, ENDEREÇO retornará
uma referência em estilo A1; se for FALSO, ENDEREÇO retornará uma referência em estilo L1C1.

Texto_planilha é o texto que especifica o nome da planilha a ser usada como referência externa. Se texto_planilha for omitido, o
nome da planilha não será utilizado.

Exemplo

Talvez seja mais fácil compreender o exemplo se você copiá-lo para uma planilha em branco.

Crie uma pasta de trabalho ou planilha em branco.

1. Selecione o exemplo no tópico da Ajuda. Não selecione os cabeçalhos de linha ou de coluna.

2. Selecionando um exemplo na Ajuda

3. Pressione CTRL+C.

4. Na planilha, selecione a célula A1 e pressione CTRL+V.

5. Para alternar entre exibir os resultados e exibir as fórmulas que retornam os resultados, pressione CTRL+` (acento grave)
ou, no menu Ferramentas, aponte para Auditoria de fórmulas e clique em Modo de auditoria de fórmulas.

A B
Fórmula Descrição (resultado)
1
=ENDEREÇO(2;3) A referência absoluta ($C$2)
2
=ENDEREÇO(2;3;2) A linha absoluta, coluna relativa (C$2)
3
=ENDEREÇO(2;3;2;FALSO) A linha absoluta, coluna relativa no estilo de referência L1C1 (L2C[3])
4
A referência absoluta a outra pasta de trabalho e planilha
5 =ENDEREÇO(2;3;1;FALSO;”[Pasta1]Plan1″) ([Pasta1]Plan1!L2C3)
6 =ENDEREÇO(2;3;1;FALSO;”PLANILHA EXCEL”) A referência absoluta a outra planilha (’PLANILHA EXCEL’!L2C3)

MOSTRA UM ENDEREÇO DE CÉLULA COM VALOR ABSOLUTO


Macro do Excel VBA mostra um endereço de célula na planilha excel valor absoluto usando a célula A15
Sub Endereço_absoluto()

Dim adr As String

adr = “$A$15″

chaine_non_modif = ActiveCell.FormulaLocal

chaine_modif = chaine_non_modif & “+” & adr

ActiveCell.Clear

ActiveCell.Formula = chaine_modif

End Sub

Sub endereço()
28/7/2014 MACROS PARA EXCEL - VBA-

Dim adr As String

chaineadr = Range(”a15″).FormulaLocal

chaine_non_modif = ActiveCell.FormulaLocal

chaine_modif = chaine_non_modif & “+” & Mid(chaineadr, 2)

ActiveCell.Clear

ActiveCell.FormulaLocal = chaine_modif

End Sub

MACRO EXCEL VBA MOSTRA A ÚLTIMA CÉLULA USADA MESMO


DELETADA
Endereço
‘Esta macro Excel VBA mostra o endereço da ultima célula usada mesmo que tenha sido deletada.

Sub retorna_endereço_celula_ativa()

MsgBox Cells.SpecialCells(xlLastCell).Address

End Sub

VBA - EXCEL MACRO DESCRIMINA UM DETERMINADO ERRO


OCORRIDO
VBA - Excel esta macro descrimina um determinado erro ocorrido

Sub Descrimina_um_Erro()
28/7/2014 MACROS PARA EXCEL - VBA-

‘http://www.saberexcel.com

Dim numero As Byte

On Error GoTo Errorhandler

numero = 500

Exit Sub

Errorhandler:

MsgBox Err.Number & ” - ” & Err.Description & ” - ” & Err.Source

End Sub

VBA - EXCEL FUNCIONA SE HOUVER EERROS NA CÉLULA


VBA - Excel macro só funcionara se houver EERROs na célula Colorindex Blank

Sub EsERR()

For Each cell In Selection

cI = cell.Interior.ColorIndex

If cell.Interior.ColorIndex = xlNone And WorksheetFunction _

.IsError(cell) = True Then

cell.Font.ColorIndex = 2

ElseIf WorksheetFunction.IsError(cell) = True Then

cell.Font.ColorIndex = cI

End If

Next cell

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA - EXCEL DELETA ESPAÇOS ENTRE AS PALAVRAS


‘Esta macro suprime os espaços espacos entre as palavras spaços

Sub Suprime_EspaçosII()

S = “ Eu Amo Jesus Cristo , Meu Senhor!”

MsgBox Trim(S), vbInformation, “«««:::Excel VBA Estudos®:::»»»”

MsgBox Application.Trim(S), vbInformation, “Excel VBA Estudos®:::»»»”

End Sub

VBA - EXCEL - DELETA OS ESPAÇOS


ESPAÇOS
Deleta os espaços se apresentar nos caracteres inseridos

Dim Texte As String

Texte= “ Senhor um verdadeiro Presidente “

RTrim(Texte) Retorna “Senhor Presidente”

Deleta os espaços se por ventura existir diante de um caractere

Dim Texte As String

Texte= “ Senhor um verdadeiro Presidente “

Trim(Texte) ‘Retorna ” Senhor um verdadeiro Presidente “

‘Esta msgbox coloca espace 10 entre as palavras e espaços

Sub Inserir_Espaços()

Dim Minha_Chave

Minha_Chave = “Saude ” & Space(10) & “a voce e toda familia!”


28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox Minha_Chave

End Sub

VBA EXCEL - DELETA OS ESPAÇOS NOS CARACTERES INSERIDOS


Deleta os espaços se apresentar nos caracteres inseridos

Dim Texte As String

Texte= “ Senhor um verdadeiro Presidente “

RTrim(Texte) Retorna “Senhor Presidente”

VBA EXCEL MOSTRA UM MODELO DA ESTRUTURA MODO CASE


‘Esta macro mostra um modelo da estrutura do modo Case

Sub CASO_CASE()

For J = 2 To 7

Select Case J

Case 2

Range(”J8″).Formula = “Recuperar”

Case 3

Range(”J8″).Formula = “Treinamento”

Case 4

Range(”J8″).Formula = ” PROMOVIDO!!”

Case 5

Range(”J8″).Formula = “XL-Eves®”

End Select

Next

End Sub

VBA - EXCEL - ESTRUTURA CASE INDICA NÚMEROS


CORRESPONDENTES
Excel VBA - ESTRUTURA CASE
28/7/2014 MACROS PARA EXCEL - VBA-

’se na coluna I:I, contiver as palavras VERSAILLES, PARIS, LYON, SAINT ‘ETIENNE

‘na colunaB indicara os números correspondentes

‘PARIS, VERSAILLES, 4

‘LYON, SAINT ETIENNE, 2

Sub Case_RangeR2()

Dim cel As Range

For Each cel In Range(”I:I”)

If cel <> “” Then

Select Case cel

Case “PARIS”, “VERSAILLES”

cel.Offset(0, -7).Value = “4″

Case “LYON”, “SAINT ETIENNE”

cel.Offset(0, -7).Value = “2″

Case “TOULOUSE”

‘… etc

Case Else

MsgBox “Celula n’existe “

End Select

End If

Next

End Sub

VBA - EXCEL - EXTENSO NÚMERO E MOEDA


EXTENSO - NÚMERO E MOEDA
‘Ésta função Extenso retorna ( Real ou número)
FUNCAO EXTENSO

Public wk_lin1 As Variant


28/7/2014 MACROS PARA EXCEL - VBA-

Public wk_nu As Variant

Public wk_extnum As Variant

Const n1 = “um”, n2 = “dois”, n3 = “três”, n4 = “quatro”, n5 = “cinco”, n6 = “seis”, n7 = “sete”, _

n8 = “oito”, n9 = “nove”, n10 = “dez”, n11 = “onze”, n12 = “doze”, n13 = “treze”, n14 = “quatorze”, _

n15 = “quinze”, n16 = “dezesseis”, n17 = “dezessete”, n18 = “dezoito”, n19 = “dezenove”, n20 = “vinte”, _

n30 = “trinta”, n40 = “quarenta”, n50 = “cinqüenta”, n60 = “sessenta”, n70 = “setenta”, n80 = “oitenta”, _

n90 = “noventa”, n100 = “cem”, n200 = “duzentos”, n300 = “trezentos”, n400 = “quatrocentos”, n500 = “quinhentos”, _

n600 = “seiscentos”, n700 = “setecentos”, n800 = “oitocentos”, n900 = “novecentos”, n0 = “”

Public Property Let nome_num(nx As String)

Select Case nx

Case “n1″

wk_extnum = n1

Case “n2″

wk_extnum = n2

Case “n3″

wk_extnum = n3

Case “n4″

wk_extnum = n4

Case “n5″

wk_extnum = n5

Case “n6″

wk_extnum = n6

Case “n7″

wk_extnum = n7

Case “n8

wk_extnum = n8

Case “n9″

wk_extnum = n9

Case “n10″
28/7/2014 MACROS PARA EXCEL - VBA-

wk_extnum = n10

Case “n11″

wk_extnum = n11

Case “n12″

wk_extnum = n12

Case “n13″

wk_extnum = n13

Case “n14″

wk_extnum = n14

Case “n15″

wk_extnum = n15

Case “n16″

wk_extnum = n16

Case “n17″

wk_extnum = n17

Case “n18″

wk_extnum = n18

Case “n19″

wk_extnum = n19

Case “n20″

wk_extnum = n20

Case “n30″

wk_extnum = n30

Case “n40″

wk_extnum = n40

Case “n50″

wk_extnum = n50

Case “n60″

wk_extnum = n60

Case “n70″

wk_extnum = n70
28/7/2014 MACROS PARA EXCEL - VBA-

Case “n80″

wk_extnum = n80

Case “n90″

wk_extnum = n90

Case “n100″

wk_extnum = n100

Case “n200″

wk_extnum = n200

Case “n300″

wk_extnum = n300

Case “n400″

wk_extnum = n400

Case “n500″

wk_extnum = n500

Case “n600″

wk_extnum = n600

Case “n700″

wk_extnum = n700

Case “n800″

wk_extnum = n800

Case “n900″

wk_extnum = n900

Case Else

wk_extnum = n0

End Select

End Property

Function Extenso(Valor As Variant, Optional moeda1 As Variant, Optional moedas1 As Variant, Optional moeda2 As Variant, Optional
moedas2 As Variant)

On Error Resume Next

If Valor = 0 Then Exit Function

wk_num = Abs(Valor)
28/7/2014 MACROS PARA EXCEL - VBA-

wk_moeda1 = moeda1

wk_moedas1 = moedas1

wk_moeda2 = moeda2

wk_moedas2 = moedas2

Let wk_num1 = Format(wk_num, “000000000.00″)

Let wk_lin1 = “”

Let wk_Parte1 = Mid(wk_num1, 1, 3)

Let wk_Parte2 = Mid(wk_num1, 4, 3)

Let wk_parte3 = Mid(wk_num1, 7, 3)

Let wk_Parte4 = 0 & Mid(wk_num1, 11, 2)

‘milhão

If wk_Parte1 > 0 Then

wk_nu = wk_Parte1

extenso1

If wk_nu = 1 Then

wk_lin1 = wk_lin1 + ” milhão”

Else

wk_lin1 = wk_lin1 + ” milhões”

End If

If wk_Parte2 = 0 And wk_parte3 = 0 Then

wk_lin1 = wk_lin1 + ” de”

End If

End If

‘milhar

If wk_Parte2 > 0 Then

If wk_Parte1 > 0 Then

If wk_Parte4 > 0 Or wk_parte3 > 0 Then


28/7/2014 MACROS PARA EXCEL - VBA-

wk_lin1 = wk_lin1 + “, “

Else

wk_lin1 = wk_lin1 + ” e “

End If

End If

wk_nu = wk_Parte2

extenso1

wk_lin1 = wk_lin1 + ” mil”

End If

‘Centana

If wk_parte3 > 0 Then

If wk_Parte2 > 0 Or wk_Parte1 > 0 Then

wk_lin1 = wk_lin1 + “, “

End If

wk_nu = wk_parte

extenso1

End If

‘moeda

If Mid(wk_num1, 1, 9) = 1 Then

‘ wk_lin1 = wk_lin1 + ” real”

wk_lin1 = wk_lin1 + ” ” + wk_moeda1

Else

If Mid(wk_num1, 1, 9) > 1 Then

‘ wk_lin1 = wk_lin1 + ” reais”

wk_lin1 = wk_lin1 + ” ” + wk_moedas1

End If

End If

‘centavos
28/7/2014 MACROS PARA EXCEL - VBA-

If wk_Parte4 > 0 Then

If wk_Parte1 > 0 Or wk_Parte2 > 0 Or wk_parte3 > 0 Then

wk_lin1 = wk_lin1 + ” e “

End If

wk_nu = wk_Parte4

extenso1

If wk_Parte4 = 1 Then

‘ wk_lin1 = wk_lin1 + ” centavo”

wk_lin1 = wk_lin1 + ” ” + wk_moeda2

Else

‘ wk_lin1 = wk_lin1 + ” centavos”

wk_lin1 = wk_lin1 + ” ” + wk_moedas2

End If

End If

Extenso = wk_lin1

End Function

Sub extenso1()

Dim wk_x As Variant

Dim wk_y As Variant

Let wk_x = Mid(wk_nu, 1, 1)

If wk_x = 1 Then

If Mid(wk_nu, 2, 2) = 0 Then

wk_y = wk_x + “00″

nome_num() = “n” + wk_y

wk_lin1 = wk_lin1 + wk_extnum

Else

wk_lin1 = wk_lin1 + “cento”


28/7/2014 MACROS PARA EXCEL - VBA-

End If

Else

wk_y = wk_x + “00″

nome_num() = “n” + wk_y

wk_lin1 = wk_lin1 + wk_extnum

End If

Let wk_x = Mid(wk_nu, 2, 2)

If wk_x > 0 And wk_x < 20 Then

If Mid(wk_nu, 1, 1) > 0 Then

wk_lin1 = wk_lin1 + ” e “

End If

If Mid(wk_nu, 2, 1) = 0 Then

wk_x = Mid(wk_nu, 3, 1)

End If

nome_num() = “n” + wk_x

wk_lin1 = wk_lin1 + wk_extnum

Else

If wk_x <> 0 Then

If Mid(wk_nu, 1, 1) > 0 Then

wk_lin1 = wk_lin1 + ” e “

End If

wk_x = Mid(wk_nu, 2, 1)

wk_y = wk_x & 0

nome_num() = “n” + wk_y

wk_lin1 = wk_lin1 + wk_extnum

wk_x = Mid(wk_nu, 3, 1)

If wk_x > 0 Then

If Mid(wk_nu, 1, 2) > 0 Then

wk_lin1 = wk_lin1 + ” e “

End If
28/7/2014 MACROS PARA EXCEL - VBA-

nome_num() = “n” + wk_x

wk_lin1 = wk_lin1 + wk_extnum

End If

End If

End If

End Sub

VBA EXCEL - VER SE EXISTE OU NÃO FORMATAÇÃO CONDICIONAL


Excel VBA - Este procedimento e para ver ser existe ou não formação condicional

inserir no módulo Worksheet

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

If HasCondFormat(ActiveCell) Then

MsgBox ActiveCell.Address & ” existe formato condicional nesta planilha.”

End If

End Sub

EXCEL - FORMATAÇÃO CONDICIONAL (FORMULAS)


Formatação condicional (fórmulas)

=E(CONT.NÚM(A2)=1;A2=0)

=E(A2=0;NÃO(ÉCÉL.VAZIA(A2)))
28/7/2014 MACROS PARA EXCEL - VBA-

=E(A2=0;NÚM.CARACT(A2)>0)

=NÃO(ÉCÉL.VAZIA(A2))*(A2=0)

‘Pode-se usar formatação condicional, nos dados da coluna, com a seguinte fórmula:

=É.NÃO.DISP(PROCH(A2;$A$1:$T$1;1;0))=FALSO
Hoje com três formatações

primeira formatação

=<HOJE()

Segunda Formatação

=<HOJE()+2*7

Terceira Formatação

<=HOJE()+12*7

FORMATAÇÃO CONDICIONAL

=NÃO(ÉCEL.VAZIA(células))

=E(A1<>”";É.NÃO.DISP(PROCV(A1;$B:$B;1;0)))

Condição 1 : =SE(CONT.SE($A:$A;A1)>=1;SE(CONT.SE(B:B;A1)=0;1;0)) >> vermelho

Condição 2 : =SE(CONT.SE($A:$B;A1)>1;1;0) >> verde

Condição1, A formula : =OU(A1=data) formata verde

Condição2, A fórmula : =OU(A1<>data) formata vermelho

Condição1, A formula : =OU(EXACT(A1;Col2)) formata cor cinza

Condição2, A formula: =OU(A1<>Col2) formata verde ou cinza

Condição1, A formula : =OU(EXACT(A1;Col2))

Condição2, A formula: =OU(A1<>Col2) formata a cor verde

inseri formatação condic: ‘=$A1>HOJE()

inseri formatação condic: ‘=SE($K5>5500;VERDADEIRO;FALSO)

Inserir fórmula na célula D5 ( Célula b5 inserir Data )


=SE(B5=”";”";SE(DATA(ANO(B5);MÊS(B5)+1;0)=B5;”";B5+1))
28/7/2014 MACROS PARA EXCEL - VBA-

’numero da semana na célula A6


=SE(B6=”";”";INT((B6-(DATA(ANO(B6+(MOD(8-
DIA.DA.SEMANA(B6);7)-3));1;1))-3+MOD(DIA.DA.SEMANA(DATA(ANO(B6+(MOD(8-
DIA.DA.SEMANA(B6);7)-3));1;1))+1;7))/7)+1)

formatação condicional B e C

=OU(DIA.DA.SEMANA(C7)=1;DIA.DA.SEMANA(C7)=7)

VBA EXCEL - ARREDONDAS CASAS DECIMAIS PARA CIMA


Excel VBA - Esta macro arredonda casas para cima mas somente no formato,

formato personalizado ex: 13,95 = 14, mas o valor real é 13,95

Sub Arred_para_cima_formato()

Worksheets(”Plan1″).Range(”b1″).NumberFormat = “0;-0;;@”

End Sub

Formatos especiais

6154848484 (16) 84 84 84 84

184848484 (1) 84 84 84 84

74848484 84 84 84 84 Formato para as células B5:B7:

‘[>=200000000](##\ #) ##\ ##\ ##\ ##;[>=100000000](##) ##\ ##\ ##\ ##:00\ 00\ 00\ 00 este da um erro >> substitui pela formatação
abaixo

[>=2000000000](## #) ## ## ## ##;[>=100000000](##) ## ## ## ##;00 00 00 00

KILOFRANCS (KF):

Valores Simples Valores em KF

10.000,00 F 10 KF Formatos para as células B13:B15:


28/7/2014 MACROS PARA EXCEL - VBA-

1.250.000,00 F .250 KF

15.000,00 F 15 KF # ##0 ” KF”

VBA EXCEL - VERIFICA O FORMATO PERSONALIZADO DA CÉLULA


VBA Excel - Esta macro verifica formato personalizado da célula

Sub Verificar_Formato()

Dim Frt As String

Range(”A1″).Select

Frt = Selection.NumberFormat

MsgBox “O formato desta célula é :” & Frt

End Sub

VBA EXCEL VERIFICA SE A FORMATAÇÃO PERSONALIZADA É EM


EURO
VBA Excel - Esta macro verifica se é formato em Euro

Sub Formatação_perssonalizada()

ActiveCell.Select

If Selection.NumberFormat = “#,##0.00 [$€-1]” Then ‘verifica se o formato é Euro

ActiveCell.Value = ActiveCell.Value * 6.55957

Selection.Style = “Currency”

Else

If ActiveCell.Value = “” Then Exit Sub

‘verifica dentro da célula se existe ou não formato euro ou se está vazia

If IsNumeric(ActiveCell) = False Then Exit Sub


28/7/2014 MACROS PARA EXCEL - VBA-

‘verifica a célula ativa se existe ou não euro se é tabem número

ActiveCell.Value = ActiveCell.Value / 6.55957

Selection.NumberFormat = “#,##0.00 [$€-1]”

End If

End Sub

EXCEL VBA - FORMATA O NÚMERO DA CÉLULAS SELECIONADAS EM


REAIS
Excel VBA - Esta macro formata o número da célula selecionadas em Reais

Sub Real_Formato()

Selection.NumberFormat = _

“_($* #,##0.00_);_($* (#,##0.00);_($* “” - “”???_);_(@_)”

End Sub

VBA EXCEL - COPIA E COLA FORMATOS


VBA Excel - Esta macro copia e cola formatos

‘ActiveCell.EntireColumn.

‘Pelas colunas :

‘ActiveCell.CurrentRegion.EntireColumn.Select

‘Pelas linhas :

‘ActiveCell.CurrentRegion.EntireRow.Select

‘Ou : Selection.EntireColumn.Select

‘Sub Copia_Cola_Formatos()

Range(ActiveCell.EntireColumn, ActiveCell(1, 2).EntireColumn).Copy

Columns(ActiveCell.Column + 2).Cells(1).PasteSpecial xlPasteFormats

Application.CutCopyMode = False

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - FUNÇÃO ÁREA


VBA Excl - Função Área
=MPG(A18,A19,B19)

Function MPG(StartMiles As Integer, FinishMiles As Integer, Litres As Single)

MPG = (FinishMiles - StartMiles) / Litres * 4.546

End Function

função área

Function Area(Length As Double, Optional Width As Variant)

If IsMissing(Width) Then

Area = Length * Length

Else

Area = Length * Width

End If

End Function

=Area(B1;B1)

Function Area(Length As Double, Width As Double)

Area = Length * Width

End Function

VBA EXCEL - ALTERNA LINHAS GRADES


GRADES

‘Esta macro alterna linhas da grade da planilha (visível e oculta)

Sub Alterna_Linhas_grade()
ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines
End Sub

‘Esta macro alterna grelha ou outro faz outro procedimento.


28/7/2014 MACROS PARA EXCEL - VBA-

Sub Alterna_Situacao_Grelha()

If ActiveWindow.DisplayGridlines = True Then

ActiveWindow.DisplayGridlines = False

Else

ActiveWindow.DisplayGridlines = True

End If

End Sub

VBA EXCEL - INSERI HIPERLINK PARA NAVEGAR ENTRE AS


PLANILHAS
‘Esta macro inseri hiperlink na planilha um para navegar para outras planilhas.

Sub Hyperlink_navegar_planilhas()

Dim i As Integer

For i = 1 To Worksheets.Count

With Sheets(”Plan1″)

.Cells(i, 1).Value = Worksheets(i).Name

.Cells(i, 1).Hyperlinks.Add Anchor:=.Cells(i, 1), _

Address:=”", SubAddress:=.Cells(i, 1) & “!A1″

End With

Next i

End Sub

VBA EXCEL - INSERI UM HIPERLINK NA CÉLULA A5


‘ Exemplo do método Add (coleção Hyperlink s)

‘ Este exemplo adiciona um hyperlink à célula A5.


28/7/2014 MACROS PARA EXCEL - VBA-

Sub Inserir_Hiperlink_RangeA5()

With Work sheets(1)

.Hyperlink s.Add Anchor:=.Range(”a5″), _

Address:=”http://example.microsoft.com”, _

ScreenTip:=”Microsoft Web Site”, _

TextToDisplay:=”Microsoft”

End With

End Sub

EXCEL VBA - INSERI HIPERLINK PARA AS NAVEGAR ENTRE AS


PLANILHAS
‘Esta macro adiciona uma planilha e inseri hiperlink para as outras planilhas

Sub Hiperlink_Inseri_Add_Plan()

ActiveSheet.Name = “VBA”

Sheets(”VBA”).Delete

Sheets.Add(Before:=Sheets(1)).Name = “VBA”

[A1] = “Excel VBA Estudos®”

For i = 2 To Sheets.Count

ActiveSheet.Hyperlink s.Add Anchor:=Cells(i, 1), _

Address:=”", SubAddress:=”‘” & Sheets(i).Name & “‘!A1″, _

TextToDisplay:=”Link ” & Sheets(i).Name

Next i

End Sub

VBA EXCEL - INSERI HIPERLINK PARA NAVEGAÇÃO ENTRE AS


PLANILHAS
28/7/2014 MACROS PARA EXCEL - VBA-

‘Esta macro inseri hiperk ink s para navegar entre planilhas.

‘adiciona uma planilha com o nome “Lista_Planilhas”

Sub Lista_nome_das_planilhas_em_hyperlinks()

Sheets.Add.Name = “Lista_Planilhas”

Sheets(”Lista_Planilhas”).Move Before:=Sheets(1)

Dim Minhas_Planilhas As Work sheet

Dim x As Integer

x=1

For Each Minhas_Planilhas In Work sheets

Cells(x, 1).Select

ActiveCell = Minhas_Planilhas.Name

ActiveSheet.Hyperlink s.Add Anchor:=Selection, Address:=”", _

SubAddress:=”‘” & ActiveCell.Value & “‘!A1″ ‘modif. 1

‘SubAddress:=Chr(39) &ActiveCell.Value & Chr(39) & “!A1″ ‘modif. 2

‘SubAddress:=ActiveCell.Value & “!A1″

x=x+1

Next Minhas_Planilhas

x=1

End Sub

VBA EXCEL - DELETA TODOS OS HIPERLINKS DA COLUNA B PLAN


ATIVA
‘Deleta todos os link s da coluna B da planilha ativa

Sub Suprime_Hiperlink_ColB()

[B:B].Hyperlink s.Delete

End Sub

SUB HYPERLINK_NAVEGAR_PLANILHAS()
28/7/2014 MACROS PARA EXCEL - VBA-

Dim i As Integer
For i = 1 To Worksheets.Count
With Sheets(”Plan1″)
.Cells(i, 1).Value = Worksheets(i).Name
.Cells(i, 1).Hyperlinks.Add Anchor:=.Cells(i, 1), _
Address:=”", SubAddress:=.Cells(i, 1) & “!A1″
End With
Next i
End Sub

VBA EXCEL - DELETA TODOS OS HIPERLINKS DA PLANILHA ATIVA


VBA Excel Deleta todos os link s da planilha ativa

Sub Deletar_hiperlinks_Planilha()

Cells.Hyperlink s.Delete

End Sub

EXCEL VBA - ADICIONA UMA PLANILHA E RELACIONA OS


HYPERLINK
‘Esta macro adiciona uma planilha e relaciona o hyperlink na célula ativa

‘o endereço do hyperlink na célula ativa

Sub Lista_Hiperlink()

Set actSh = ActiveSheet

ActiveWork book .Sheets.Add

i=0

For Each hl In actSh.Hyperlink s

i=i+1

Cells(i, 1) = hl.Range.Address

Cells(i, 2) = hl.Name

Cells(i, 3) = hl.Address

Next hl

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - ACIONA UM LINK DE E-MAIL CELULA A5


Este exemplo adiciona um hyperlink de correio eletrônico à célula A5.

Sub Hiperlink_CelA5()

With Work sheets(1)

.Hyperlink s.Add Anchor:=.Range(”a5″), _

Address:=”mailto:excelvbaestudos@hotmail.com?subject=Ola! E_Marcondes”, _

ScreenTip:=”Write us today”, _

TextToDisplay:=”Support VBA”

End With

End Sub

VBA EXCEL - CALCULA A VELOCIDADE MÉDIA HORÁRIA (KM/H)


‘calcular em VBA a velocidade horária de distancia percorrida em determinado trajeto (em k m)

Sub Velocidade_Media()

‘XL-Eves®

Dim Trajeto As Double, Tempo As Double, Velocidade As Double

Distancia = Application.InputBox _

(”Digite a distância percorrida em Km”, Type:=1)

Tempo = Application.InputBox _

(”Digite o tempo gasto em horas ? (Ex: 02:15)”, Type:=1)

Velocidade = Distancia / (Tempo * 24)

Valor_Arredondado = Application.Round _

((Distancia / (Tempo * 24)), 2)

MsgBox “Sua Velocidade Média é de :” _

& Valor_Arredondado & “ Km/h”

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

‘la même en fonction de feuille de calcul

‘cellule au format personnalisé Standard” Km/h”)

Function Velocidade_Media(Distancia As Double, Tempo As Double)

Velocidade_Media = Application.Round(Distancia / (Tempo * 24), 2)

End Function

VBA EXCEL - CABEÇALHO E RODAPÉ COM NUMERO DE PÁGINAS


VBA Excel - Cabeçalho e rodapé com número de páginas.

‘Excel Code Examples

‘Setup Print in a Macro

Sub SetupPrint()

Dim BottomRw As Integer, PrintDate, CopyW, Lfooter, PhonFoot

Dim PageSettg As Integer, LastCol

LastCol = Application.CountA(ActiveSheet.Range(”1:1″))

BottomRw = Application.CountA(ActiveSheet.Range(”A:A”))

If LastCol >= 6 Then

PageSettg = 1 ‘1=xlPortrait

Else

PageSettg = 2 ‘2=xlLandscape

End If

‘============= Get Copyright Date ==========

PhonFoot = “&8″ & Chr(34) & “SKY” & Chr(34) & _

” in Area Code denotes SKY-Pager,” & Chr(10) _


28/7/2014 MACROS PARA EXCEL - VBA-

& “phone # 1-800-GOHAPPY” & Chr(10) & “Smile, you’re on.”

PrintDate = Application.Text(Now(), “mm/dd/yyyy HH:mm:ss”)

CopyW = Chr(169) & Year(Now())

Lfooter = “&8″ & “*=Aardvark ” & Chr(10) & CopyW & _

” Confidential Property of Harvey Flapdipple”

Application.StatusBar = “Beginning page setup”

ActiveSheet.Range(Cells(2, 1), Cells(BottomRw, LastCol)).Select

With ActiveSheet.PageSetup

.LeftHeader = “”

.CenterHeader = “&”"Arial,Bold”"ABCDEFG Phone List” _

& Chr(10) & SpecialMsg

.RightHeader = PrintDate

.LeftFooter = Lfooter

.CenterFooter = “Page &P of &N”

.RightFooter = PhonFoot

.LeftMargin = Application.InchesToPoints(0.75)

.RightMargin = Application.InchesToPoints(0.75)

.TopMargin = Application.InchesToPoints(1)

.BottomMargin = Application.InchesToPoints(1)

.HeaderMargin = Application.InchesToPoints(0.5)

.FooterMargin = Application.InchesToPoints(0.5)

.PrintHeadings = False

.PrintGridlines = False

.PrintNotes = False

.CenterHorizontally = True

.CenterVertically = False

.Orientation = PageSettg ‘Landscape or Portrait

.Draft = False

‘.PaperSize = xlPaperLetter

.FirstPageNumber = xlAutomatic

.Order = xlDownThenOver
28/7/2014 MACROS PARA EXCEL - VBA-

.Black AndWhite = False

.Zoom = False

.FitToPagesWide = 1 ‘Force one page wide

.FitToPagesTall = False ‘Still 1 wide but unlimited down

End With

ActiveWork book .Save

End Sub

VBA EXCEL - MACRO COPIA LINHAS DA PRIMEIRA ATÉ A ULTIMA


VBA Excel - macro copia linhas da primeira até a ultima

Sub Copia_linha_ate_a_ultima()

Dim i As Integer

ligne1:

If ActiveCell.Value <> “” Then ActiveCell.Offset(1, 0).Select: GoTo ligne1

ActiveCell.Value = ActiveCell.Offset(-1, 0).Value

ActiveCell.Offset(1, 0).Select

GoTo ligne1:

ligne99:

Range(”A1″).Select
End Sub

VBA EXCEL - MACRO CONTA LINHAS SELECIONADAS (MSGBOX)


VBA Excel - macro conta linhas selecionadas e mostra msgbox

Sub conta_linhas()

minha_linha = Selection.Rows.Count

MsgBox minha_linha
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

VBA EXCEL - DELETA LINHAS/COLUNAS EM BRANCO


vBA Excel - deleta linhas/colunas em b ranco

Sub Deleta_Linhas_Branco()

Sheets(”SuaPlanilha”).Select

Dim r, c, x As Integer

‘r is your first row

For r = 1 To 150

‘c is your first column loop until c reaches 184 (unlik ely)

For c = 1 To 184

‘if active cell in loop is blank then…

If Cells(r, c) = “” Then

‘find next non blank cell in this row - the column number will become x

x = Cells(r, c).End(xlToRight).Column

‘if x > 184 (your last column) then you can sk ip the rest of this row as it’s blank

If x > 184 Then GoTo 10

‘find out what the column before the next non-blank cell is

Y=x-1

‘test difference between column being processed and y

Select Case Y - c

‘if more than one blank cell in between current cell and next non blank then delete ‘range of blank s

Case Is > 0

Range(Cells(r, c), Cells(r, Y)).Delete Shift:=xlToLeft

Case 0

‘if difference between y & c is 0 then only one cell to delete


28/7/2014 MACROS PARA EXCEL - VBA-

Cells(r, c).Delete Shift:=xlToLeft

Case Else

‘if it’s negative you have an error!!

MsgBox “Error: Macro Will Stop”, vbCritical, “Error”

Exit Sub

End Select

End If

‘move to next column

Next c

‘10 is a shortcut to cut out the above loop… so if all blank goto 10 - ie just go to the next row

10

Next r

End Sub

VBA EXCEL - ATRIBUI ALTURA DAS LINHAS A UMA SELEÇÃO


VBA Excel - Atribui altura de linhas a uma determinada seleção

Sub Atribui_altura_linhas()

Set ASelectionner = Application.InputBox _

(Prompt:=”selecionar a regiao da celulas “, _

Title:=” Regiao de celulas à serem selecionadas”, Type:=8)

AHauteur = Application.InputBox _

(Prompt:=”Entre com altura (pontos) (exemplo 12)”, Type:=1)

ASelectionner.Select ‘Seleciona a região desejada

ASelectionner.RowHeight = AHauteur

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - DELETA LINHAS CONDICIONALMENTE


VBA Excel - Deleta Linhas Condicionalmente
’Esta macro irá perguntar se deseja deletar e mostra quantas linhas foram deletadas

Sub Deleta_Linhas()

Dim strToDelete As String

Dim rngSrc As Range

Dim NumRows As Integer

Dim ThisRow As Integer

Dim ThatRow As Integer

Dim ThisCol As Integer

Dim J As Integer

Dim DeletedRows As Integer

strToDelete = InputBox(”Value to Trigger Delete?”, “Delete Rows“)

Set rngSrc = ActiveSheet.Range(ActiveWindow.Selection.Address)

NumRows = rngSrc.Rows.Count

ThisRow = rngSrc.Row

ThatRow = ThisRow + NumRows - 1

ThisCol = rngSrc.Column

For J = ThatRow To ThisRow Step -1

If Cells(J, ThisCol) = strToDelete Then

Rows(J).Select

Selection.Delete Shift:=xlUp

DeletedRows = DeletedRows + 1

End If

Next J

MsgBox “Number of deleted rows: ” & DeletedRows

End

VBA EXCEL - ENVIA PARA LIXEIRA DETERMINADO ARQUIVO


VBA Excel - esta macro envia para lixeira o arquivo apg.xls
28/7/2014 MACROS PARA EXCEL - VBA-

tem que copiar todo código para lixeira - somente copiar e colar no módulo normal

Declare Function SHFileOperation Lib “shell32.dll” Alias _

“SHFileOperationA” (lpFileOp As SHFILEOPSTRUCT) As Long

Type SHFILEOPSTRUCT

hwnd As Long

wFunc As Long

pFrom As String

pTo As String

fFlags As Integer

fAnyOperationsAborted As Boolean

hNameMappings As Long

lpszProgressTitle As String

End Type

Sub Enviar_Arquivo_Lixeira()

RecycleFile “c:\Meus documentos\apg.xls”

End Sub

Sub RecycleFile(sFile As String)

Const FO_DELETE = &H3

Const FOF_ALLOWUNDO = &H40

Dim FileOperation As SHFILEOPSTRUCT

Dim lReturn As Long

Dim sFileName As String

With FileOperation

.wFunc = FO_DELETE

.pFrom = sFile

.fFlags = FOF_ALLOWUNDO

End With
28/7/2014 MACROS PARA EXCEL - VBA-

lReturn = SHFileOperation(FileOperation)

End Sub

PERSONALIZAM A TABULAÇÃO
Estas macros e procedimentos personalizam a tabulação

” ************* Inserir este código no módulo worksheet ( Activate ) :

‘Private Sub Worksheet_Activate()

‘ Application.OnKey “{ENTER}”, “CellSuivante”

‘ Application.OnKey “+{ENTER}”, “CellPrecedente”

‘ Application.OnKey “~”, “CellSuivante”

‘ Application.OnKey “+~”, “CellPrecedente”

‘End Sub

‘Private Sub Worksheet_Deactivate()

‘ Application.OnKey “{ENTER}”

‘ Application.OnKey “+{ENTER}”

‘ Application.OnKey “~”

‘ Application.OnKey “+~”

‘End Sub

” ********** Inserir este código no módulo WorkBook

‘Private Sub Workbook_BeforeClose(Cancel As Boolean)

‘ Application.OnKey “{ENTER}”

‘ Application.OnKey “+{ENTER}”

‘ Application.OnKey “~”
28/7/2014 MACROS PARA EXCEL - VBA-

‘ Application.OnKey “+~”

‘End Sub

‘ ********** Inserir estes códigos dentro do módulo standard : (comum)

Public Tabulation As Variant, NuCol As Byte

‘b.marchand mpfe

Sub CellSuivante()

If IsEmpty(Tabulation) Then Tabulation = Array(1, 2, 3, 4, 5)

If NuCol + 1 > UBound(Tabulation) Then

Cells(ActiveCell.Row + 1, Tabulation(0)).Activate

NuCol = 0

Else

Cells(ActiveCell.Row, Tabulation(NuCol + 1)).Activate

NuCol = NuCol + 1

End If

End Sub

Sub CellPrecedente()

If IsEmpty(Tabulation) Then Tabulation = Array(1, 2, 3, 4, 5)

If NuCol + 1 < UBound(Tabulation) Then

If ActiveCell.Row > 1 Then

Cells(ActiveCell.Row - 1, Tabulation(UBound(Tabulation))).Activate

NuCol = UBound(Tabulation)

End If

Else

Cells(ActiveCell.Row, Tabulation(NuCol - 1)).Activate

NuCol = NuCol - 1

End If

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

‘La tabulation passe par le tableau tabulation

‘ Tabulation = Array(1, 2, 3, 4, 5)

‘qui dans ton cas Colonnes A, B, C, D et E

‘Cette méthode à la particularité qu’une fois le code installé,

‘les colonnes de tabulation sont

‘facilement modifiables, il serait même aisé de remplir

‘le tableau via un InputBox.

VBA EXCEL - RETORNA O NOME DO USUÁRIO DO COMPUTADOR


VBA Excel - esta macro juntamente com as funções retorna o nome do usuário do computador

Private Declare Function apiGetUserName Lib “advapi32.dll” _

Alias “GetUserNameA” (ByVal lpBuffer As String, nsize As Long) As Long

Sub GetUserNameTest()

MsgBox fOSUserName

MsgBox FindUserName

End Sub

Function fOSUserName() As String

‘ Retorna o login name do usuario

Dim lngLen As Long, lngX As Long

Dim strUserName As String

strUserName = String$(254, 0)

lngLen = 255

lngX = apiGetUserName(strUserName, lngLen)

If lngX <> 0 Then

fOSUserName = Left$(strUserName, lngLen - 1)

Else
28/7/2014 MACROS PARA EXCEL - VBA-

fOSUserName = “”

End If

End Function

‘—‘
Public Function FindUserName() As String

Dim strName As String

strName = Space$(512)

apiGetUserName strName, Len(strName)

FindUserName = Trim$(strName)

End Function

Se pretendermos apagar linhas inteiras a partir de células vazias num determinado range, incluindo
uma mensagem de alerta se, nesse range, não houver nenhuma célula vazia, podemos utilizar o
seguinte código:

Sub FindAndDelete()

Dim myRange As Range

On Error Resume Next


Set myRange = Range("A1:A100")

If Application.CountA(myRange) = 100 Then


MsgBox "Não existem células vazias no Range!"
Else
myRange.SpecialCells(xlBlanks).EntireRow.Delete
End If

End Sub

Uma outra abordagem para a inclusão de comentários num determinado Range de células: o exemplo
tem a ver com a apresentação, no comentário, da data e da hora da modificação do conteúdo da
célula, ou seja, sempre que uma célula do Range é alterada, a data e a hora são actualizadas.
28/7/2014 MACROS PARA EXCEL - VBA-

O Código:

Private Sub Worksheet_Change(ByVal Target As Range)


On Error Resume Next
If InRange(Target, Range("A1:A10")) Then
With Target
.ClearComments
End With

With Target.AddComment
.Visible = False
.Text "Última alteração em: " & Date & " hora:" & Time
End With
End If
End Sub

Function InRange(rng1, rng2) As Boolean


InRange = False
If rng1.Parent.Parent.Name = rng2.Parent.Parent.Name Then
If rng1.Parent.Name = rng2.Parent.Name Then
If Union(rng1, rng2).Address = rng2.Address Then
InRange = True
End If
End If
End If
End Functio

Se tivermos uma folha com valores e fórmulas e quisermos apagar apenas os valores, deixando ficar
as fórmulas, como no exemplo a seguir:

podemos utilizar o seguinte Código:

Private Sub CommandButton1_Click()


On Error Resume Next
Cells.SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Apresento agora um procedimento em VBE que apaga as linhas onde se encontram os valores
duplicados:

Sub RemoveDuplicates()
Worksheets("Sheet1").Range("A2").Sort key1:=Worksheets("Sheet1").Range("A1")
Set currentCell = Worksheets("Sheet1").Range("A1")
Do While Not IsEmpty(currentCell)
Set nextCell = currentCell.Offset(1, 0)
If nextCell.Value = currentCell.Value Then
currentCell.EntireRow.Delete
End If
Set currentCell = nextCel

Loop
End Sub

Se pretendermos apagar a linha que contém a célula activa na Plan1 e, de igual modo, a linha na Plan2
que contenha a primeira ocorrência igual à célula activa daPlan1, podemos utilizar o seguinte Código:

Sub Test()
Dim c As Range, myRange As Range
On Error Resume Next
Set myRange = Sheets(2).Range("A1:A100")

For Each c In myRange


If c.Value = ActiveCell.Value Then
c.EntireRow.Delete
End If
Next c
ActiveCell.EntireRow.Delete
End Sub

Se quisermos executar o código, a partir do menú que se acede a partir do clicar no botão direito do
rato, podemos incluir o seguinte código no Workbook:

Private Sub Workbook_Open()

Dim MyMenu As Object

Set MyMenu = Application.ShortcutMenus(xlWorksheetCell) _


.MenuItems.AddMenu("A minha Macro", 1)

With MyMenu.MenuItems
.Add "Test", "Test", , 1, , ""
28/7/2014 MACROS PARA EXCEL - VBA-

End With

Set MyMenu = Nothing

End Sub

Por vezes, temos necessidade de enviar dados de uma folha do Excel para um determinado documento do Word.

O exemplo a seguir, mostra um botão de comando que, ao ser pressionado, envia os dados do Range A1:B3 para um novo documento do Word.

O Código:

Private Sub CommandButton1_Click()

Dim MSWord As Object

Worksheets("sheet1").Range("A1:B3").Copy

Set MSWord = CreateObject("Word.Application")


MSWord.Visible = True
MSWord.ScreenUpdating = True

With MSWord

With .Documents.Add
.Range.Paste
End With

.WindowState = wdWindowStateMaximize
End With
End Sub

Private Sub IblMail_Click()


Link = "mailto: jorgerod2@sapo.pt "
On Error GoTo NoCanDo
ActiveWorkbook.FollowHyperlink Address:=Link, NewWindow:=True
Unload Me
28/7/2014 MACROS PARA EXCEL - VBA-

Exit Sub
NoCanDo:
MsgBox "Impossível Abrir " & Link
End Sub

MACRO PARA CONTAGEM DE ABERTURA DE UM PROGRAMA


QUANTAS VEZES ABRIU
Private Sub Workbook_Open()

Range("E1").NumberFormat = "000000"

If IsNumeric(Range("E1")) Then

Range("E1") = Range("E1").Value + 1

End If

End Sub

OCULTAR PLAN COM CHECKBOX

Private Sub CheckBox_ExibeOculta_Change()

If CheckBox_ExibeOculta.Value Then

Worksheets("Plan3").Visible = False

Else

Worksheets("Plan3").Visible = True

End If
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

OCULTAR COLUNA COM CHEKBOX


Option Explicit

Private Sub CheckBox_OcultaExibe_Click()

With Worksheets("PropriedadeHidden").Columns("E")’Em PropriedadeHidden trocar para nome da plan

.Hidden = CheckBox_OcultaExibe.Value

End With

End Sub

FAZ EM A1 UM CRONÔMETRO DECRESSIVO

Sub Contador_Chama_Macro()

contador = 120

'este contador decrementa nums

For contador = 120 To 0 Step -1

Range("A1").Formula = contador

'Vai executar a macro tempo em 5 segundos

nouvHeure = Hour(Now())

nouvMinute = Minute(Now())

nouvSeconde = Second(Now()) + 1

Reprise = TimeSerial(nouvHeure, nouvMinute, nouvSeconde)

Application.Wait Reprise

Next
28/7/2014 MACROS PARA EXCEL - VBA-

If Range("A1").Value = 0 Then

'excecução da macro inserida

Call tempo

End If

End Sub

Sub tempo()

MsgBox "fim do contador.", vbInformation, "Excel VBA Estudos®"

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ActiveSheet.Calculate

End Sub

FAZ UMA CONTAGEM ATÉ 10000


Sub Contador()

For rolanum = 1 To 10000

Range("a4").Formula = rolanum

Next

Range("B4") = "Certinho"

End Sub

O código abaixo possibilita gravar as alterações efetuadas em uma planilha do Excel, gerando um log de alterações. Muito
útil quando se quer monitorar e controlar as ações dos usuários em planilhas coorporativas.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim wsHist As Worksheet, Rng As Range


28/7/2014 MACROS PARA EXCEL - VBA-

Set wsHist = Sheets("História")

If Sh Is wsHist Then Exit Sub

Set Rng = wsHist.Range("A" & Rows.Count).End(xlUp).Offset(1)

With Rng

.Value = Now

.Offset(, 1) = Sh.Name

.Offset(, 2) = Target.Address

If Target.Cells.Count > 1 Then

.Offset(, 3) = "Valores Alterados"

Else

.Offset(, 3) = Target.Formula

End If

End With

End Sub

Este código deve ser colocar dentro do módulo EstaPasta_de_trabalho (ThisWorkbook).

Todas as alterações são registradas em uma planilha chamada História que possui a seguinte configuração:

Basta começar a navegar por outras planilhas para ver o resultado.

MENSAGEM POR BOTÃO E FORM


Private Sub CommandButton1_Click()

Dim Ops(1 To 3) As String

Dim Msg As String


28/7/2014 MACROS PARA EXCEL - VBA-

Dim Texto As String

Application.Cursor = xlNormal

Ops(1) = "Elaborado por: "

Ops(2) = "EXCELer, "

Ops(3) = "Vilamoura, Julho de 2005"

Texto = Ops(1) + vbCr

Texto = Texto + Ops(2) + vbCr

Texto = Texto + Ops(3)

Msg = MsgBox(Texto, Buttons:=vbInformation, Title:="Nesse campo colocar a mensagem")

Select Case Msg

End Select

End Sub

Criar um AutoNumber - JJoão (02/2001)

Duvida colocada: "... queria colocar um contador das vezes que o meu livro é aberto, como o posso fazer? "

Solução: Uma macro que cria um item nas propriedades do Livro,

incrementando um contador a cada abertura do ficheiro e assim

contar as vezes que esse ficheiro foi aberto.

Para ver esse contador basta nas propriedades do livro consultar o "personalizar".

A macro deve ser colocada no código do livro em EsteLivro (ThisWorkbook).

Private Sub Workbook_Open()


28/7/2014 MACROS PARA EXCEL - VBA-

With ActiveWorkbook.CustomDocumentProperties

If ExistCustom("AutoNum") = True Then

.Item("AutoNum").Value = .Item("AutoNum").Value + 1

Else

.Add Name:="AutoNum", _

LinkToContent:=False, _

Type:=msoPropertyTypeNumber, _

Value:=1

End If

End With

End Sub

Private Function ExistCustom(nome) As Boolean

For Each c In ActiveWorkbook.CustomDocumentProperties

ExistCustom = False

If c.Name = "AutoNum" Then ExistCustom = True

Next c

End Function

‘PISCAR TELA

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Piscar_Tela()

For i = 1 To Range("h4")

If Range(Range("h3")).Interior.ColorIndex = 3 Then

Range(Range("h3")).Interior.ColorIndex = xlNone
28/7/2014 MACROS PARA EXCEL - VBA-

Else

Range(Range("h3")).Interior.ColorIndex = 3

End If

Sleep (Range("h5"))

Next i

End Sub

Sub Proteger_Pasta()

With Application

.Dialogs(xlDialogProtectSharing).Show

End With

End Sub

CÉLULA PISCANTE 1

Na macro abaixo a célula B10 pisca no dia para a qual estiver programada.
Digite em B10 a data desejada.
Cole a macro na página VBA da planilha em questão.
Sempre q a planilha for ativada e houver coincidência das datas, a célula piscará.

Private Sub Work sheet_Activate()


Dim tempo, inicio
Range("B10").NumberFormat = "dd/mm/yy"
If Range("B10").Value <> Date Then Exit Sub
tempo = 0.2 'tempo de pausa entre piscadas, em segundo
For x = 1 To 31 'total de piscadas
inicio = Timer
Do While Timer < inicio + tempo
DoEvents ' submeta a outros processos
Loop
'piscar B10 nas cores vermelho e amarelo
If Range("b10").Interior.ColorIndex = 3 Then
Range("b10").Interior.ColorIndex = 6
Else
Range("b10").Interior.ColorIndex = 3
End If
Next x
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

CÉLULA PISCANTE 2

Colocar em um módulo

Public RunWhen As Double

Sub StartBlink()
With ThisWorkbook.Worksheets("Plan1").Range("A1").Font
If .ColorIndex = 3 Then ' Red Text
.ColorIndex = 2 ' White Text
Else
.ColorIndex = 3 ' Red Text
End If
End With
RunWhen = Now + TimeSerial(0,0,1)
Application.OnTime RunWhen, "'" & ThisWorkbook.Name & "'!StartBlink", , True
End Sub

Sub StopBlink()
ThisWorkbook.Worksheets("Plan1").Range("A1").Font.ColorIndex = _
xlColorIndexAutomatic
Application.OnTime RunWhen, "'" & ThisWorkbook.Name & "'!StartBlink", , False
End Sub

Private Sub Workbook_Open()


StartBlink
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)


StopBlink
End Sub

CÉLULA QUE FICA PISCANDO


Public RunWhen As Double

Sub StartBlink()
With ThisWorkbook.Worksheets("Menu").Range("A1").Font
If .ColorIndex = 5 Then ' Red Text
.ColorIndex = 2 ' White Text
Else
.ColorIndex = 5 ' Red Text
End If
28/7/2014 MACROS PARA EXCEL - VBA-

End With
RunWhen = Now + TimeSerial(0,0,1)
Application.OnTime RunWhen, "'" & ThisWorkbook.Name & "'!StartBlink", , True
End Sub

Sub StopBlink()
ThisWorkbook.Worksheets("Menu").Range("A1").Font.ColorIndex = _
xlColorIndexAutomatic
Application.OnTime RunWhen, "'" & ThisWorkbook.Name & "'!StartBlink", , False
End Sub

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

SUB PISCAR_TELA()

For i = 1 To Range("i3")

If Range(Range("h3")).Interior.ColorIndex = 30 Then

Range(Range("h3")).Interior.ColorIndex = xlNone

Else

Range(Range("h3")).Interior.ColorIndex = 30

End If

Sleep (Range("j3"))

Next i

For i = 1 To Range("i4")

If Range(Range("h4")).Interior.ColorIndex = 3 Then

Range(Range("h4")).Interior.ColorIndex = xlNone

Else

Range(Range("h4")).Interior.ColorIndex = 3

End If

Sleep (Range("j4"))

Next i

For i = 1 To Range("i5")

If Range(Range("h5")).Interior.ColorIndex = 3 Then

Range(Range("h5")).Interior.ColorIndex = xlNone

Else
28/7/2014 MACROS PARA EXCEL - VBA-

Range(Range("h5")).Interior.ColorIndex = 3

End If

Sleep (Range("j5"))

Next i

End Sub

CÓDIGO PARA PISCAR CÉLULA


Em Esta Pasta_de_Trabalho

Private Sub Workbook_BeforeClose(Cancel As Boolean)

StopBlink

End Sub

Private Sub Workbook_Open()

StartBlink

End Sub

Em um módulo

Public RunWhen As Double

Sub StartBlink()

With ThisWorkbook.Worksheets("Plan1").Range("A1,a2,F7").Font

If .ColorIndex = 3 Then ' Red Text

.ColorIndex = 2 ' White Text

Else
28/7/2014 MACROS PARA EXCEL - VBA-

.ColorIndex = 3 ' Red Text

End If

End With

RunWhen = Now + TimeSerial(0, 0, 1)

Application.OnTime RunWhen, "'" & ThisWorkbook.Name & "'!StartBlink", , True

End Sub

Sub StopBlink()

ThisWorkbook.Worksheets("Plan1").Range("A1,a2,F7").Font.ColorIndex = _

xlColorIndexAutomatic

Application.OnTime

RunWhen, "'" & ThisWorkbook.Name & "'!StartBlink", , False

End Sub

CONTADOR DE VEZEZ EM QUE SE ABRE UMA PLAN “ PROGRAMA”

Private Sub Workbook_Open()

Dim LOldVal As Integer

Dim LNewVal As String

'Retrieve current number

LOldVal = Sheets("Plan1").Range("A2").Value

LNewVal = Format(LOldVal + 1, "0000")

'Update to new number

Sheets("Plan1").Range("A2").Value = "'" & LNewVal

ActiveWorkbook.Save

End Sub

ESTA MACRO COLORE LINHA LADO DIREITO DA COLUNA QUE ESTÁ SELECIONADA

EX: COL.SELECIONADA “g6” COLUNAS PINTADAS D6:E6.


28/7/2014 MACROS PARA EXCEL - VBA-

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Repreenche todo o range:

Range("D6:E100").Interior.ColorIndex = xlNone

If Target.Column = 7 Then 'Significa que está na coluna "G"

If Target.Row > 6 And Target.Row < 100 Then 'Verifica se está no range de linhas entre 6 e 100

Range("D" & Target.Row & ":E" & Target.Row).Interior.Color = RGB(200, 200, 200)

End If

End If

End Sub

ABRIR COMBO COM TECLADO “F4”

Private Sub Combo1_GotFocus()

SendKeys "{F4}"

End Sub

ABRIR COMBO AO RECEBER FOCO EVENTO ENTER

Private Sub ComboBox1()

SendKeys”% ”&”{DOWN}”

End Sub

Esta macro faz uma contagem de 60 segundos para zero, pode-se auterar o nº onde diz contador=?

Sub Contador_Chama_Macro()

contador = 60

'este contador decrementa nums

For contador = 60 To 0 Step -1

Range("A1").Formula = contador
28/7/2014 MACROS PARA EXCEL - VBA-

'Vai executar a macro tempo em 5 segundos

nouvHeure = Hour(Now())

nouvMinute = Minute(Now())

nouvSeconde = Second(Now()) + 1

Reprise = TimeSerial(nouvHeure, nouvMinute, nouvSeconde)

Application.Wait Reprise

Next

If Range("A1").Value = 0 Then

'excecução da macro inserida

Call tempo

End If

End Sub

Sub tempo()

MsgBox "fim do contador.", vbInformation, "Excel VBA Estudos®"

End Sub

SENHA PARA EXPIRAR TEMPO DE USO

Private Sub Workbook_Open()

‘Dim cont, auxcont As Integer

Dim senha, enter_snh As String

senha = "164713"

Range("C40") = Date

If Range("B40") = nill Then

Range("B40") = Date
28/7/2014 MACROS PARA EXCEL - VBA-

End If

cont = Format(Range("C40") - Range("B40"), "0")

auxcont = 30 - cont

If cont >= 30 Then

enter_snh = InputBox(" EXPIROU O TEMPO DE TESTE..., INFORME A SENHA DE ACESSO:", "Informe...")

If enter_snh <> senha Then

MsgBox "Senha incorreta!", vbInformation, "Erro"

Saved = True

ActiveWorkbook.Close

End If

Else

MsgBox "Faltam " & auxcont & " dias para expirar o tempo desse Programa."

End If

‘Colocar o nome da plan onde diz “Dados” que estão as informações

Set Dados = Worksheets("Dados")

End Sub

ESTA MACRO SELECIONA EM UMA COLUNA ESPECIFICADA O QUE


ESTÁ SENDO REPETIDO

Sub Mostrar_Duplicados()

Dim LLoop As Integer

Dim LTestLoop As Integer

Dim LClearRange As String

Dim Lrows As Integer


28/7/2014 MACROS PARA EXCEL - VBA-

Dim LRange As String

'Column A values

Dim LChangedValue As String

Dim LTestValue As String

'Column B values

Dim LChangedValueB As String

Dim LTestValueB As String

'Test first 200 rows in spreadsheet for uniqueness

Lrows = 200

LLoop = 2

'Clear all flags

LClearRange = "A2:B" & Lrows

Range(LClearRange).Interior.ColorIndex = xlNone

'Check first 200 rows in spreadsheet

While LLoop <= Lrows

LChangedValue = "A" & CStr(LLoop)

LChangedValueB = "B" & CStr(LLoop)

If Len(Range(LChangedValue).Value) > 0 Then

'Test each value for uniqueness

LTestLoop = 2

While LTestLoop <= Lrows

If LLoop <> LTestLoop Then

LTestValue = "A" & CStr(LTestLoop)

LTestValueB = "B" & CStr(LTestLoop)

'Value has been duplicated in another cell

If (Range(LChangedValue).Value = Range(LTestValue).Value) And (Range(LChangedValueB).Value =


Range(LTestValueB).Value) Then

'Set the background color to red in column A

Range(LChangedValue).Interior.ColorIndex = 3
28/7/2014 MACROS PARA EXCEL - VBA-

Range(LTestValue).Interior.ColorIndex = 3

'Set the background color to red in column B

Range(LChangedValueB).Interior.ColorIndex = 3

Range(LTestValueB).Interior.ColorIndex = 3

End If

End If

LTestLoop = LTestLoop + 1

Wend

End If

LLoop = LLoop + 1

Wend

End Sub

Sub tirar_format()

Range("A2:B1288").Select

Selection.Interior.ColorIndex = 2

Range("C1").Select

End Sub

Sub Abre_Paleta_Cores()

a = Application.Dialogs(xlDialogEditColor).Show(1, 0, 0, 0)

End Sub

INVERTER TABELA HORIZANTAL VERTICAL

Sub Transpor()
28/7/2014 MACROS PARA EXCEL - VBA-

'

' Transpor Macro

' Macro gravada em 08/04/2009 por Nilson

'

'

Range("A1:F6").Select 'Digite o intervalo onde começa e termina

Selection.Copy

Range("F8").Select 'Altere digitando onde quer copiar a nova tabela alternada

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=True

End Sub

SALVAMENTO AUTOMÁTICO 1
Em meus estudos, descobri um código muito interessante para programarmos osalvamento automático real, com uma certa frequência a
ser definida por nós mesmos. Diferentemente do autosalvamento do excel, esta macro salva o próprio arquivo de modo real, como se
nós mesmos o tivéssemos feito clicando no botão “Salvar”. O fundamento desta macro é salvar o arquivo a cada X minutos caso o
arquivo tenha sofrido modificações e ainda não tenha sido salvo. Esta macro é iniciada ao abrirmos o arquivo, no evento
Workbook_Open da pasta de trabalho. Vou mostrar como criá-la.Abra o Projeto do VBA (Alt+F11) e insira um módulo digitando o
seguinte código:

Public RunWhen As Double

Public Const cRunIntervalSeconds = 600 '10 minutos

Public Const cRunWhat = "SalvamentoProgramado" 'nome do procedimento a ser executado

Sub StartTimer()

RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)

Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _

Schedule:=True

End Sub

Sub SalvamentoProgramado()
28/7/2014 MACROS PARA EXCEL - VBA-

If Application.ThisWorkbook.Saved = False Then

Application.ThisWorkbook.Save

End If

StartTimer ' Reschedule the procedure

End Sub

Sub StopTimer()

On Error Resume Next

Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _

Schedule:=False

End Sub

A constante cRunIntervalSeconds define o tempo, em segundos, para o Cronômetro executar.

O procedimento StartTimer inicia o cronômetro da programação do salvamento. Na sub SalvamentoProgramado é verificado se houve
alterações no arquivo e se ele está salvo, então, ele salvará as modificações no arquivo. StopTimer encerrará a programação da macro.
Poderá ser chamada no menu macros mesmo, ou então criar um atalho para ela.

Agora, abra o código da pasta de trabalho, dando um duplo clique em EstaPasta_de_trabalho e digite o código:

Private Sub Workbook_Open()

Call StartTimer

End Sub

Prontinho. Salve o arquivo. Feche. E abra novamente. A partir de então ele salvará suas alterações no intervalo de tempo estipulado. E
adeus aos trabalhos perdidos.

APRESENTAÇÃO DE TEXTO CORRIDO OU DERROLANTE EM FORM

Usar um form , uma label e o código abaixo colocar no form.

Dim partex, Sb

Private Sub UserForm_Initialize()

Me.Label1.Width = 700

partex = Me.Label1.Left

Mensagem = " >>>> Estou Aprendendo MS Excel VBA com qualidade......Saberexcel"

Me.Label1.Caption = Mensagem & Mensagem & Mensagem


28/7/2014 MACROS PARA EXCEL - VBA-

Sb = Len(Me.Label1.Caption)

End Sub

Private Sub UserForm_Activate()

Me.Label1.Visible = True

For x = partex To -(4.16 * Sb - partex - 1) Step -1

Me.Label1.Left = x

Me.Label1.Top = 10

w = 0.04

temp = Timer

Do While Timer < temp + w

DoEvents

Loop

Next x

UserForm_Activate

End Sub

SALVAMENTO AUTOMÁTICO 2

Call StartTimer Este código vai no Workbook_Open

Este num Módulo

Public RunWhen As Double

Public Const cRunIntervalSeconds = 600 '10 minutos

Public Const cRunWhat = "SalvamentoProgramado" 'nome do procedimento a ser executado

Sub StartTimer()

RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)

Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _

Schedule:=True

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Sub SalvamentoProgramado()

If Application.ThisWorkbook.Saved = False Then

Application.ThisWorkbook.Save

End If

StartTimer ' Reschedule the procedure

End Sub

Sub StopTimer()

On Error Resume Next

Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _

Schedule:=False

End Sub

SALVAMENTO AUTOMÁTICO 3

Public RunWhen As Double

Public Const cRunIntervalSeconds = 600 '10 minutos

Public Const cRunWhat = "SalvamentoProgramado" 'nome do procedimento a ser executado

Sub StartTimer()

RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)

Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _

Schedule:=True

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Sub SalvamentoProgramado()

If Application.ThisWorkbook.Saved = False Then

Application.ThisWorkbook.Save

End If

StartTimer ' Reschedule the procedure

End Sub

Sub StopTimer()

On Error Resume Next

Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _

Schedule:=False

End Sub

CÓDIGO PARA FORM SE FECHAR EM 5 SEGUNDOS

Código para o workbook_Open()

Módulo1.ABRIR

Código em um módulo

Option Explicit

'Define Tipo para funções GetWindowRect e MoveWindow.

Public Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long
28/7/2014 MACROS PARA EXCEL - VBA-

End Type

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _

(ByVal HWNd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _

(ByVal HWNd As Long, ByVal nIndex As Long, _

ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowRect Lib "user32" _

(ByVal HWNd As Long, lpRect As RECT) As Long

Declare Function IsIconic Lib "user32" _

(ByVal HWNd As Long) As Long

Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _

ByVal nIndex As Long) As Long

Declare Function GetParent Lib "user32" _

(ByVal HWNd As Long) As Long

Declare Function GetClientRect Lib "user32" _

(ByVal HWNd As Long, _

lpRect As RECT) As Long

Declare Function GetActiveWindow Lib "user32" _

() As Long
28/7/2014 MACROS PARA EXCEL - VBA-

Declare Function GetDesktopWindow Lib "user32" () As Long

Declare Function IsZoomed Lib "user32" (ByVal HWNd As Long) As Long

Declare Function ShowWindow Lib "user32" (ByVal HWNd As Long, _

ByVal nCmdShow As Long) As Long

Declare Function MoveWindow Lib "user32" (ByVal HWNd As Long, _

ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _

ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Declare Function SHFormatDrive Lib "Shell32" (ByVal HWNd As Long, ByVal Drive As Integer, ByVal fmtID As
Integer, ByVal Options As Integer) As Long

Private Declare Function SetLayeredWindowAttributes Lib "user 32" _

(ByVal HWNd As Long, ByVal crkey As Byte, ByVal balpha As Byte, ByVal dwflags As Long) As Long

Private Declare Function GetSystemMetrics Lib "user32" _

(ByVal nIndex As Long) As Long

' Windows API declarations.

Declare Function CreateIC Lib "gdi32" _

Alias "CreateICA" (ByVal lpDriverName As String, _

ByVal lpDeviceName As String, ByVal lpOutput As String, _

lpInitData As Any) As Long

Declare Function DeleteDC Lib "gdi32" _

(ByVal hdc As Long) As Long


28/7/2014 MACROS PARA EXCEL - VBA-

Declare Function GetWindow Lib "user32" _

(ByVal HWNd As Long, ByVal wCmd As Long) As Long

Declare Function GetClassName Lib "user32" _

Alias "GetClassNameA" (ByVal HWNd As Long, _

ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Declare Function FindWindow Lib "user32" _

Alias "FindWindowA" (ByVal lpClassName As String, _

ByVal lpWindowName As String) As Long

Declare Function GetNextWindow Lib "user32" _

(ByVal HWNd As Long, _

ByVal wFlag As Long) As Long

Declare Function SetFocus Lib "user32" _

(ByVal HWNd As Long) As Long

' GetNextWindow() constants

Public Const GW_CHILD = 5

Public Const GW_HWNDNEXT = 2

' Windows API Constants

Public Const VERTRES = 10

Public Const HORZRES = 8

Public Const LOGPIXELSX = 88

Public Const LOGPIXELSY = 90


28/7/2014 MACROS PARA EXCEL - VBA-

' General Constants

Public Const TwipsPerInch = 1440

' GetWindowLong Constant

Public Const GWL_STYLE = -16

' Windows Style constant

Public Const WS_CAPTION = &HC00000

' System Metrics Constant

Public Const SM_CYCAPTION = 4

Public Const SM_CXFULLSCREEN = 16

Public Const SM_CYFULLSCREEN = 17

' ShowWindows Constant

Public Const SW_HIDE = 0

Public Const SW_SHOWNORMAL = 1

Public Const SW_SHOWMINIMIZED = 2

Public Const SW_SHOWMAXIMIZED = 3

Public Const SW_SHOWNOACTIVATE = 4

Public Const SW_SHOW = 5

Public Const SW_MINIMIZE = 6

Public Const SW_SHOWMINNOACTIVE = 7

Public Const SW_SHOWNA = 8

Public Const SW_RESTORE = 9

Public Const SW_SHOWDEFAULT = 10

' Constantes de GetSystemMetrics.

Const WS_SYSMENU = &H80000


28/7/2014 MACROS PARA EXCEL - VBA-

Public Const GWL_EXSTYLE = (-20)

Public Const WS_EX_LAYERED = &H80000

Public Const WS_EX_TRANSPARENT = &H20&

Public Const LWA_ALPHA = &H2&

'Rotina para esconder o Caption do UserForm

Sub EscondeCaption(oForm As Object)

Dim rct As RECT

Dim intDX As Integer, intDY As Integer

Dim HWNd, lngOldStyle, lngNewStyle

'Verifica aplicativo

Select Case Int(Val(Application.Version))

Case 8 'Excel 97

HWNd = FindWindow("ThunderXFrame", oForm.Caption) 'UserForm

Case 9 'Excel 2000

HWNd = FindWindow("ThunderDFrame", oForm.Caption) 'UserForm

End Select

lngOldStyle = GetWindowLong(HWNd, GWL_STYLE)

' Desliga o bit que ativa a legenda (caption).

lngNewStyle = lngOldStyle And Not WS_CAPTION

' Define o novo estilo da janela.

lngOldStyle = SetWindowLong(HWNd, GWL_STYLE, lngNewStyle)

GetWindowRect HWNd, rct


28/7/2014 MACROS PARA EXCEL - VBA-

' Calcula as novas largura e altura (sem a legenda).

intDX = rct.Right - rct.Left

intDY = rct.Bottom - rct.Top - _

GetSystemMetrics(SM_CYCAPTION)

' Dimensiona (move) a janela para as mesmas coordenadas left e top,

' mas com as novas largura (width) e altura (height).

' Isso fará com que o novo form pareça

' um pouco mais baixo do que o original.

Call MoveWindow(HWNd, rct.Left, _

rct.Top, intDX, intDY, True)

End Sub

'Rotina para esconder o Botão Fechar do UserForm

Sub EscondeBotãoFechar(oForm As Object)

Dim HWNd, lngOldStyle, lStyle

'Verifica aplicativo

Select Case Int(Val(Application.Version))

Case 8 'Excel 97

HWNd = FindWindow("ThunderXFrame", oForm.Caption) 'UserForm

Case 9 'Excel 2000

HWNd = FindWindow("ThunderDFrame", oForm.Caption) 'UserForm

End Select

'Pega o estilo corrente

lStyle = GetWindowLong(HWNd, GWL_STYLE)

'Retira os menu de sistema


28/7/2014 MACROS PARA EXCEL - VBA-

SetWindowLong HWNd, GWL_STYLE, lStyle And Not WS_SYSMENU

End Sub

Sub MaximizeRestoredForm(F As Object)

Dim MDIRect As RECT

Dim retval As Long

HWNd = FindWindow("ThunderXFrame", F.Caption) 'UserForm

' Se o form estiver maximizado, restaura ao normal.

If IsZoomed(F.HWNd) <> 0 Then

retval = ShowWindow(F.HWNd, SW_SHOWNORMAL)

End If

' Obtém coordenadas da tela e o tamanho da janela

' MDIClient do Access.

'RetVal = GetWindowRect(GetParent(F.Hwnd), MDIRect)

GetClientRect GetParent(F.HWNd), MDIRect 'linha alterada por Terry Kreft.

' Move o form para o canto superior-esquerdo

' da janela MDIClient (0,0) e o dimensiona para

' o mesmo tamanho da janela MDIClient, dando o repaint.

'RetVal = MoveWindow(F.Hwnd, 0, 0, MDIRect.Right - _

MDIRect.Left - 4, MDIRect.Bottom - MDIRect.Top - 4, True)

MoveWindow F.HWNd, 0, 0, MDIRect.Right - MDIRect.Left, _

MDIRect.Bottom - MDIRect.Top, True 'linha alterada por Terry Kreft.

With MDIRect

Debug.Print "Top = " & .Top

Debug.Print "Bottom = " & .Bottom

Debug.Print "Left = " & .Left

Debug.Print "Right = " & .Right


28/7/2014 MACROS PARA EXCEL - VBA-

End With

End Sub

Sub SetTime()

Dim DownTime As Date

DownTime = Now + TimeValue("00:00:05")

Application.OnTime DownTime, "ShutDown"

End Sub

Sub ABRIR()

SetTime

UserForm1.Show

End Sub

Sub ShutDown()

Unload UserForm1

End Sub

COLOCAR O CÓDIGO ABAIXO NO REFERIDO WORKBOOK


Private Sub Workbook_Open()
StartBlink
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)


StopBlink
End Sub

MACRO PARA VER E OCULTAR SHAPES DE MENSAGEM

Public Sub ver() 'Colocar a macro no código da plan e salvar shapes na cx de nome como "text"

Sheets("Plan1").Shapes("text").Visible = True

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Public Sub Oc()

Sheets("Plan1").Shapes("text").Visible = False

End Sub

DUPLICADOS 2 FORMATA CÉLULA EM VERMELHO

Sub Mostrar_Duplicados()

Dim LLoop As Integer

Dim LTestLoop As Integer

Dim LClearRange As String

Dim Lrows As Integer

Dim LRange As String

'Column A values

Dim LChangedValue As String

Dim LTestValue As String

'Column B values

Dim LChangedValueB As String

Dim LTestValueB As String

'Test first 200 rows in spreadsheet for uniqueness

Lrows = 200

LLoop = 2

'Clear all flags

LClearRange = "A2:B" & Lrows

Range(LClearRange).Interior.ColorIndex = xlNone

'Check first 200 rows in spreadsheet


28/7/2014 MACROS PARA EXCEL - VBA-

While LLoop <= Lrows

LChangedValue = "A" & CStr(LLoop)

LChangedValueB = "B" & CStr(LLoop)

If Len(Range(LChangedValue).Value) > 0 Then

'Test each value for uniqueness

LTestLoop = 2

While LTestLoop <= Lrows

If LLoop <> LTestLoop Then

LTestValue = "A" & CStr(LTestLoop)

LTestValueB = "B" & CStr(LTestLoop)

'Value has been duplicated in another cell

If (Range(LChangedValue).Value = Range(LTestValue).Value) And (Range(LChangedValueB).Value = Range(LTestValueB).Value)


Then

'Set the background color to red in column A

Range(LChangedValue).Interior.ColorIndex = 3

Range(LTestValue).Interior.ColorIndex = 3

'Set the background color to red in column B

Range(LChangedValueB).Interior.ColorIndex = 3

Range(LTestValueB).Interior.ColorIndex = 3

End If

End If

LTestLoop = LTestLoop + 1

Wend

End If

LLoop = LLoop + 1

Wend

End Sub

Sub tirar_format()

Range("A2:B1288").Select

Selection.Interior.ColorIndex = 2
28/7/2014 MACROS PARA EXCEL - VBA-

Range("C1").Select

End Sub

Sub Abre_Paleta_Cores()

a = Application.Dialogs(xlDialogEditColor).Show(1, 0, 0, 0)

End Sub

MACRO PARA DIZER BOM DIA COM O NOME DA PESSOA

Em Esta_Pasta_de_Trabalho Open

call mensagens

Sub mensagens()

Dim MinhaHora

MinhaHora = Hour(Now)

Select Case MinhaHora

Case 1 To 5

MsgBox "Bom Noite" & Application.UserName

Case 6 To 11

MsgBox "Bom Dia " & Application.UserName

Case 12 To 17

MsgBox "Bom Tarde " & Application.UserName

Case 18 To 24

MsgBox "Bom Noite " & Application.UserName

End Select

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

A MACRO ABAIXO LISTA OS NOMES DAS PLANILHAS EXISTENTE NO


SEU PROJETO

Sub Listar_Planilhas()

Dim j As Integer 'Faz uma lista dos nomes das planilhas existentes

Dim NumSheets As Integer

NumSheets = Sheets.Count

For j = 1 To NumSheets

Cells(j, 1) = Sheets(j).Name

Next j

End Sub

VER SHAPES OCULTAR SHAPES

Sub ver()

Sheets("Plan1").Shapes("ex").Visible = True

End Sub

Sub Ocultar()

Sheets("Plan1").Shapes("ex").Visible = False

End Sub

CALENDÁRIO MENSAL esta macro insere um calendário mensal atualizado basta formatar os dias e
colocar em A7 dia/mês/ano.
28/7/2014 MACROS PARA EXCEL - VBA-

'insere a data do mês a partir de formulas matriciais.

'...........................'

Sub insere_formula_matricial_dias_do_Mes()

Dias_Semana

Range("A7").Select ‘inserir dia mês e ano

'Insere fórmulas matriciais (array)

With Range(ActiveCell.Offset(2, 0), ActiveCell.Offset(7, 6))

'Formula would be too long, so insert shorter formula and replace characters.

.FormulaArray = "=IF(MONTH(DATE(y,m,1))<>MONTH(DATE(y,m,1)-(WEEKDAY(DATE(y,m,1))-1)+{0;1;2;3;4;5}*7+
{1,2,3,4,5,6,7}-1),"""",DATE(y,m,1)-(WEEKDAY(DATE(y,m,1))-1)+{0;1;2;3;4;5}*7+{1,2,3,4,5,6,7}-1)"

.Replace What:=",m,", Replacement:=",MONTH(" & ActiveCell.Address(False, False) & "),"

.Replace What:="y,", Replacement:="YEAR(" & ActiveCell.Address(False, False) & "),"

'.NumberFormat = "d"

'.HorizontalAlignment = xlCenter

'.Interior.ColorIndex = 36

End With

End Sub

'.....................

Sub Dias_Semana()

Range("A8").FormulaR1C1 = "Domingo"

Range("B8").FormulaR1C1 = "Segunda"

Range("C8").FormulaR1C1 = "Terça"

Range("D8").FormulaR1C1 = "Quarta"

Range("E8").FormulaR1C1 = "Quinta"

Range("F8").FormulaR1C1 = "Sexta"

Range("G8").FormulaR1C1 = "Sábado"

Range("B6").Select

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

MACRO PARA INSPIRAR TEMPO DE PROGRAMA

Sub Enter()

Dim cont, auxcont As Integer

Dim senha, enter_snh As String

senha = "164713"

Range("K1") = Date

If Range("L1") = nill Then

Range("L1") = Date

End If

cont = Format(Range("K1") - Range("L1"), "0")

'auxcont Alterar a quantidade de dias a se expirar o tempo

auxcont = 0 - cont

If cont >= 30 Then

enter_snh = InputBox(" EXPIROU O TEMPO DE TESTE..., INFORME A SENHA DE ACESSO:", "Informe...")

If enter_snh <> senha Then

MsgBox "Senha incorreta!", vbInformation, "Erro"

Saved = True

ActiveWorkbook.Close

End If

Else

MsgBox "Faltam " & auxcont & " dias para expirar o tempo desse Programa."

End If

'Colocar o nome da plan onde diz "Dados" que estão as informações

Set Dados = Worksheets("Plan1")

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

FUNÇÃO ANO BISSEXTO

Function AnoBisexto(ValAno As Single) As Boolean

If (ValAno Mod 4 = 0) And ((ValAno Mod 100 <> 0) Or (ValAno Mod 400 = 0)) Then

AnoBisexto = True

Else

AnoBisexto = False

End If

End Function

MACRO PARA CALCULAR A SOMA DE 2 TEXTBOX

'CÓDIGO CALCULA DÁ O RESULTADO TOTAL1 + TOTAL2

Sub Calcula()

If TextBox_ValorUnitario.Value > "" And TextBox_PecasEstoque.Value > "" Then

TextBox_Total.Value = TextBox_PecasEstoque.Value * TextBox_ValorUnitario.Value

TextBox_Total.Value = FormatCurrency(TextBox_Total.Value)

End If

End Sub

'TEXTBOX TOTAL 1

Private Sub TextBox_PecasEstoque_Change()

If TextBox_PecasEstoque.Value = "" Then

TextBox_Total.Value = ""

Exit Sub

End If

If IsNumeric(TextBox_PecasEstoque.Value) Then

Calcula

Else
28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox "Digite o Valor:" & TextBox_PecasEstoque.Value

TextBox_PecasEstoque.Value = ""

TextBox_PecasEstoque.SetFocus

End If

End Sub

'TEXTBOX TOTAL 2

Private Sub TextBox_ValorUnitario_Change()

If TextBox_ValorUnitario.Value = "" Then

TextBox_Total.Value = ""

Exit Sub

End If

If IsNumeric(TextBox_ValorUnitario.Value) Then

Calcula

Else

MsgBox "Digite o Valor:" & TextBox_ValorUnitario.Value

TextBox_ValorUnitario.Value = ""

TextBox_ValorUnitario.SetFocus

End If

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

FORMATO DE MOEDA EM TEXT BOX

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If TextBox1.Value<>"" Then

TextBox1.Value=Format(TextBox1.Value,"#,##0.00")

Else

TextBox1.Value=""

End If

End Sub

FORMAÇÃO CONDICIONAL

Private Sub Worksheet_Change(ByVal Target As Range)

'O código será ativado sempre q mudar valor da célula, em Worksheet apenas a planilha em Workbooks todas

' Desabilita outros eventos para tornar mais rápido

Application.EnableEvents = False

' Verifica se a célula está dentro da área escolhida

If Not Intersect(Target, Me.[C2:C65536]) Is Nothing Then

' Verifica qual o valor e aplica uma formatação

Select Case Target.Value

Case 1

Target.Interior.Color = vbRed

Case 2

Target.Interior.Color = vbYellow

Case 3
28/7/2014 MACROS PARA EXCEL - VBA-

Target.Interior.Color = vbGreen

Case 4

Target.Interior.Color = vbBlue

Case 5 To 10

Target.Interior.Color = vbBlack

Target.Font.Color = vbWhite

Case "OK"

Target.Interior.Color = vbMagenta

Target.Font.Color = vbYellow

Target.Font.Bold = True

Case Else

Target.Interior.Color = xlNone

Target.Font.Color = vbBlack

Target.Font.Bold = False

End Select

End If

' Reabilita os eventos

Application.EnableEvents = True

End Sub

DESPROTEGER PLANILHA 1

Sub AllPasswordsRemover()

Dim w1 As Worksheet

Dim w2 As Worksheet
28/7/2014 MACROS PARA EXCEL - VBA-

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim l As Integer

Dim m As Integer

Dim n As Integer

Dim i1 As Integer

Dim i2 As Integer

Dim i3 As Integer

Dim i4 As Integer

Dim i5 As Integer

Dim i6 As Integer

Dim PWord1 As String

Dim ShTag As Boolean

Dim WinTag As Boolean

' Início da tentativa de desproteger o wb (workBook),

Application.ScreenUpdating = False

' Verifica se está protegido

With wb

Let ShTag = False

' Estão realmente protegidos?

For Each w1 In Worksheets

Let ShTag = ShTag Or w1.ProtectContents

Next w1

' Caso não haja proteção, o processo é encerrado!

If Not ShTag And Not WinTag Then


28/7/2014 MACROS PARA EXCEL - VBA-

GoTo exx

End If

' Dependendo da senha e de quantas planilhas estiverem protegidas com diferentes senhas,

' o processo talvez leve um tempo considerável. Estimo entre 3-6 minutos por senha.

If Not WinTag Then

' Workbook não está protegido... vai checar as planilhas...

Else

' Workbook está protegido, desprontegendo-o

On Error Resume Next

Do

For i = 65 To 66: For j = 65 To 66: For k = 65 To 66

For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66

For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66

For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

With wb

.Unprotect Chr(i) & Chr(j) & Chr(k) & _

Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _

Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

If .ProtectStructure = False And _

.ProtectWindows = False Then

Let PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _

Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _

Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

' Achamos o password para este workbook.

MsgBox "A Worksheet '" & w1.Name & "' foi desprotegida usando o seguinte hash " & _
28/7/2014 MACROS PARA EXCEL - VBA-

"Hashed Password:" & Chr(13) & PWord1 & Chr(13) & "Tente desproteger outras " & _

"planilhas com este mesmo password..."

Exit Do

End If

End With

Next: Next: Next: Next: Next: Next

Next: Next: Next: Next: Next: Next

Loop Until True

On Error GoTo 0

End If

If WinTag And Not ShTag Then

' Worksheets Não estão protegidas.

GoTo exx

End If

' Caso as worksheets estiverem protegidas...

On Error Resume Next

For Each w1 In Worksheets

w1.Unprotect PWord1

Next w1

On Error GoTo 0

ShTag = False

' Checa se a tentativa foi bem sucedida.

For Each w1 In Worksheets

' Checa para todas as ShTag engatilhadas para 1, se não.

Let ShTag = ShTag Or w1.ProtectContents

Next w1
28/7/2014 MACROS PARA EXCEL - VBA-

' Caso haja worksheet protegida, desprotege-a.

If ShTag Then

For Each w1 In Worksheets

With w1

If .ProtectContents Then

On Error Resume Next

Do

For i = 65 To 66: For j = 65 To 66: For k = 65 To 66

For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66

For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66

For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

.Unprotect Chr(i) & Chr(j) & Chr(k) & _

Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _

Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

If Not .ProtectContents Then

PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _

Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _

Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

' Achamos 1!

MsgBox "A Worksheet '" & w1.Name & "' foi desprotegida usando o seguinte hash " & _

"Hashed Password:" & Chr(13) & PWord1 & Chr(13) & "Tente desproteger outras " & _

"planilhas com este mesmo password..."

For Each w2 In Worksheets

w2.Unprotect PWord1

Next w2

Exit Do

End If
28/7/2014 MACROS PARA EXCEL - VBA-

Next: Next: Next: Next: Next: Next

Next: Next: Next: Next: Next: Next

Loop Until True

On Error GoTo 0

Else

Debug.Print ("Estas worksheets '" & w1.Name & "' não estavam protegidas.")

End If

End With

Next w1

End If

GoTo exx

exx:

Application.ScreenUpdating = True

End With

End Sub

DESPROTEGER PLANILHA COM SENHA 2

Sub DesprotegerPlanilhaAtiva()

Dim i, i1, i2, i3, i4, i5, i6 As Integer, j As Integer, k As Integer, l As Integer , m As Integer, n As Integer

On Error Resume Next

For i = 65 To 66

For j = 65 To 66

For k = 65 To 66

For l = 65 To 66

For m = 65 To 66

For i1 = 65 To 66

For i2 = 65 To 66
28/7/2014 MACROS PARA EXCEL - VBA-

For i3 = 65 To 66

For i4 = 65 To 66

For i5 = 65 To 66

For i6 = 65 To 66

For n = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr (i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

If ActiveSheet.ProtectContents = False Then

MsgBox "Planilha desprotegida com sucesso!!!"

Exit Sub

End If

Next

Next

Next

Next

Next

Next

Next

Next

Next

Next

Next

Next

End Sub

Se não for uma das já disponibilizadas pelo Excel, vc terá de criar a sua, ou interativamente ou usando a linguagem vba. Como vc
sugeriu esta última, aqui vai:

No ícone ferramentas clique em macro e na caixa de diálogo q se abrir, clique em nova. Será então exibido o editor do vba e lá vc
terá de criar a sua função. Salve-a! Depois de criada, volte para o Excel e na célula em q vc quer q ela apareça, faça isto: "
=NomeDaMinhaFunçao" (não coloque aspas).
É só isso. Se escreveu a função certinha, o Excel a executará toda vez que entrarem na célula.

Abaixo, um exemplo que tirei de uma de minhas próprias planilhas. Ao clicar no botão "marcar nºs", na planilha, é disparada um
função MsgBox, dando ao usuário instruções sobre como preencher os dados:
--------------------------------------…
Sub InstrUso()
28/7/2014 MACROS PARA EXCEL - VBA-

Dim strMsg As String, strTit As String


Dim intRetVal As Integer
strTit = "PCLOTO-LF - Orientação ao Usuário:"

intRetVal = MsgBox(" << Roteiro de Preenchimento da Planilha >> " & Chr(13) & _
Chr(13) & _
"1 - Inicie pela linha 1, digitando o nº do esquema e " & _
"o nº do concurso; " & Chr(13) & _
"2 - Observe na linha 10 (laranja) os nºs disponíveis para uso; " & _
Chr(13) & _

"3 - A seguir, informe na linha 3 (cabeçalho vermelho) " & _


"os 7 nºs a não " & Chr(13) & _
" jogar (nºs menores que 10 devem ter o zero anteposto);" & Chr(13) & _
"4 - Passe para a linha 5 (cabeçalho azul) e informe os 10 nºs a fixar; " & Chr(13) & _
"5 - Por último, informe na linha 8 (cabeçalho amarelo), os 8 " & Chr(13) & _
"nºs a variar (note que esses nºs são os que sobraram na linha 10)." & Chr(13) & _
Chr(13) & _
" Nenhuma das demais áreas precisará ser preenchida.", vbOKOnly, strTit)
End Sub
-------------------------------------

ADICIONA PLANILHA COM MENSAGEM

Sub Adiciona_planilha_4()

'adiciona uma nova planiha e indica que a planilha foi adicionada

'vem com o vb y/no, se não querer a macro sai da execução

Dim Response As VbMsgBoxResult

Response = MsgBox("Deseja inserir a nova planilha?", vbQuestion + vbYesNo)

If Response = vbNo Then Exit Sub

Worksheets.Add

MsgBox "A nova planilha foi adicionada.", vbInformation, "http://www.saberexcel.com"

End Sub

'esta macro inseri uma autonumeração em B1

'a medida em que vai executando a macro vai

'incrementando um numero em B4

Sub Autonumeracao_incrementa()

Dim ObjCell As Range


28/7/2014 MACROS PARA EXCEL - VBA-

For Each ObjCell In Range("B4").Cells

ObjCell.Value = ObjCell.Value + 1

Next

End Sub

'FUNÇÃO ÚLTIMO DIA DO MÊS

Function fnUltimoDiaDoMes(iAno As Integer, iMes As Integer, Optional iDia As Integer = 1) As Integer

Dim arrayMesesUltimoDia As Variant

arrayMesesUltimoDia = Array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

If iMes = 2 Then

If IsDate("29/2/" & iAno) Then

fnUltimoDiaDoMes = 29

Else

fnUltimoDiaDoMes = 28

End If

Else

fnUltimoDiaDoMes = arrayMesesUltimoDia(iMes)

End If

End Function

ESTA MACRO DESABILITA O XIS


'Desabilita o xis

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)


28/7/2014 MACROS PARA EXCEL - VBA-

If CloseMode = vbFormControlMenu Then

Cancel = True

Me.Caption = "Digite a senha corretamente!"

End If

End Sub

MENSAGEM EM LABEL

'Mensagem em Label, retorna o que aparece na plan designada

Private Sub UserForm_Initialize()

Dim strTotal As Double

strMensagem = Worksheets("Apoio").Range("L2").Value 'Lançar em Worksheet nome da planilha e Range nome da célula

Me.Label3.Caption = strMensagem

Me.Label4.Caption = Time 'Opcional Hora

Me.Label5.Caption = Date 'Opcional Data

End Sub

FUNÇÃO DE EXTENSO

Public Function ConverterParaExtenso(NumeroParaConverter As String) As String

Dim sExtensoFinal As String, sExtensoAtual As String

Dim i As Integer

Dim iQtdGrupos As Integer

Dim sDecimais As String


28/7/2014 MACROS PARA EXCEL - VBA-

Dim sMoedaSing As String, sMoedaPlu As String, sCentavos As String

Dim bSufMoeda As Boolean

'Separa os Decimais

If InStr(1, NumeroParaConverter, ",") > 0 Then

sDecimais = Right(NumeroParaConverter, Len(NumeroParaConverter) - InStr(1, NumeroParaConverter, ","))

NumeroParaConverter = Mid(NumeroParaConverter, 1, InStr(1, NumeroParaConverter, ",") - 1)

End If

'Obtém a separação de milhares

iQtdGrupos = Fix(Len(NumeroParaConverter) / 3)

If Len(NumeroParaConverter) Mod 3 > 0 Then

iQtdGrupos = iQtdGrupos + 1

End If

'Chama as funções para escrever o número

If iQtdGrupos > 2 Then bSufMoeda = True

For i = iQtdGrupos To 1 Step -1

sExtensoAtual = DesmembraValor(NumeroParaConverter, i)

If i = 1 Then

If sExtensoAtual = "" Then

sExtensoFinal = sExtensoFinal & sExtensoAtual

Else

If sExtensoFinal = "" Then

sExtensoFinal = sExtensoFinal & sExtensoAtual

Else

sExtensoFinal = sExtensoFinal & " e " & sExtensoAtual

End If

End If

Else
28/7/2014 MACROS PARA EXCEL - VBA-

sExtensoFinal = sExtensoFinal & sExtensoAtual

End If

If iQtdGrupos > 2 Then

Select Case i

Case 1, 2

If sExtensoAtual <> "" Then

bSufMoeda = False

End If

End Select

End If

Next i

'Define a moeda

sMoedaPlu = " reais"

sMoedaSing = " real"

If bSufMoeda = True Then sMoedaPlu = " de reais"

'Escreve os Centavos

sCentavos = EscreveCentavos(sDecimais)

'Adiciona a moeda e os centavos

sExtensoFinal = IIf((sExtensoFinal = ""), "", sExtensoFinal & IIf((sExtensoFinal = "um"), sMoedaSing, sMoedaPlu)) _

& IIf((sExtensoFinal = ""), sCentavos, IIf((sCentavos = ""), "", " e " & sCentavos))

'retorna o resultado

ConverterParaExtenso = sExtensoFinal

End Function

Private Function DesmembraValor(sValor As String, iGrupoDiv As Integer) As String

Dim iValor As Integer

Dim sExtenso As String

Dim iDivResto As Integer

Dim iDivInteiro As Integer

Dim iPosInicMid As Integer


28/7/2014 MACROS PARA EXCEL - VBA-

Dim iTamMid As Integer

Dim sComplemento As String

Dim vArrDez1 As Variant

Dim vArrDez2 As Variant

Dim vArrCentena As Variant

vArrDez1 = Array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", _

"dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", _

"dezoito", "dezenove")

vArrDez2 = Array("vinte", "trinta", "quarenta", "cinquenta", "sessenta",

"setenta", "oitenta", "noventa")

vArrCentena = Array("cem", "cento", "duzentos", "trezentos", "quatrocentos", _

"quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos")

'Pega o Valor a ser escrito e desmembra para o grupo numérico correto

iPosInicMid = Len(sValor) - ((3 * iGrupoDiv) - 1)

If iPosInicMid <= 1 Then

iTamMid = 2 + iPosInicMid

Else

iTamMid = 3

End If

If iPosInicMid < 1 Then iPosInicMid = 1

iValor = CInt(Mid(sValor, iPosInicMid, iTamMid))

Select Case iGrupoDiv

Case 2

sComplemento = " mil "

Case 3

If iValor = 1 Then

sComplemento = " milhão "

Else

sComplemento = " milhões "


28/7/2014 MACROS PARA EXCEL - VBA-

End If

Case 4

If iValor = 1 Then

sComplemento = " bilhão "

Else

sComplemento = " bilhões "

End If

Case 5

If iValor = 1 Then

sComplemento = " trilhão "

Else

sComplemento = " trilhões "

End If

End Select

Select Case iValor

Case 0 To 19

sExtenso = vArrDez1(iValor)

Case 20 To 99

iDivInteiro = Fix(iValor / 10)

iDivResto = iValor Mod 10

If iDivResto = 0 Then

sExtenso = vArrDez2(iDivInteiro - 2)

Else

sExtenso = vArrDez2(iDivInteiro - 2) & " e " & vArrDez1(iDivResto)

End If

Case 100 To 999

iDivInteiro = Fix(iValor / 100)

iDivResto = iValor Mod 100

If iDivResto = 0 Then

If iDivInteiro = 1 Then

sExtenso = vArrCentena(0) 'Cem


28/7/2014 MACROS PARA EXCEL - VBA-

Else

sExtenso = vArrCentena(iDivInteiro) 'inteiro maior que 100

End If

Else

sExtenso = vArrCentena(iDivInteiro) & " e "

Select Case iDivResto

Case 0 To 19

sExtenso = sExtenso & vArrDez1(iDivResto)

Case 20 To 99

iDivInteiro2 = Fix(iDivResto / 10)

iDivResto2 = iDivResto Mod 10

If iDivResto2 = 0 Then

sExtenso = sExtenso & vArrDez2(iDivInteiro2 - 2)

Else

sExtenso = sExtenso & vArrDez2(iDivInteiro2 - 2) & " e " & vArrDez1(iDivResto2)

End If

End Select

End If

End Select

DesmembraValor = sExtenso & IIf(iValor > 0, sComplemento, "")

End Function

Private Function EscreveCentavos(sCent As String) As String

Dim sExtenso As String

Dim iDivResto As Integer

Dim iDivInteiro As Integer

Dim sComplemento As String

Dim vArrDez1 As Variant

Dim vArrDez2 As Variant

Dim iCent As Integer


28/7/2014 MACROS PARA EXCEL - VBA-

vArrDez1 = Array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", _

"dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", _

"dezoito", "dezenove")

vArrDez2 = Array("vinte", "trinta", "quarenta", "cinquenta", "sessenta", _

"setenta", "oitenta", "noventa")

'Adequando para duas casas decimais

iCent = Fix(sCent & String(2 - Len(sCent), "0"))

'Escrevendo Singular ou plural

If iCent = 1 Then

sComplemento = " centavo"

Else

sComplemento = " centavos"

End If

'Calculando os valores

Select Case iCent

Case 0 To 19

sExtenso = vArrDez1(iCent)

Case 20 To 99

iDivInteiro = Fix(iCent / 10)

iDivResto = iCent Mod 10

If iDivResto = 0 Then

sExtenso = vArrDez2(iDivInteiro - 2)

Else

sExtenso = vArrDez2(iDivInteiro - 2) & " e " & vArrDez1(iDivResto)

End If

End Select

EscreveCentavos = IIf(iCent > 0, sExtenso & sComplemento, "")

End Function
28/7/2014 MACROS PARA EXCEL - VBA-

Impe de de de le tar planilha

'MACRO QUE IMPEDE DE DELETAR PLANILHA PRINCIPAL

Sub Modificar_deletar_planilha()

'adiciona mensagem para quando for deletar a planilha em questao

Dim c As CommandBarControl

For Each c In Application.CommandBars.FindControls(ID:=847)

c.OnAction = "Deleta_Planilha"

Next c

End Sub

'MACRO QUE DÁ UM AVISO SE QUER OU NÃO DELETAR

Sub Deleta_Planilha()

If ActiveSheet.Index = 1 Then

MsgBox "Voce não pode deletar esta planilha!", vbc + vbOKOnly + vbExclamation, "INFORMAÇÃO AO USUÁRIO - Saberexcel.com"

Else

Select Case MsgBox("Atenção voce vai deletar essa planilha, tem certeza !", vbc + vbYesNo + vbExclamation, "INFORMAÇÃO AO
USUÁRIO - Saberexcel.com")

Case vbYes

ActiveSheet.Delete

Case vbOK

Exit Sub

End Select

End If

Exit Sub
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

'MACRO QUE REABILITA A PLANILHA

Sub Reabilitar_deletar_Planilha()

Dim c As CommandBarControl

For Each c In Application.CommandBars.FindControls(ID:=847)

c.OnAction = ""

Next c

End Sub

MACRO PARA RODAPÉ PERSONALIZADO

' Esta macro irá colocar rodapés personalizado em todas as folhas no livro.

Sub Rodapes_Perdonalizados()

Dim s As Worksheet

Application.ScreenUpdating = False

For Each s In ActiveWorkbook.Worksheets

With s.PageSetup

.LeftFooter = "&8" & LCase(Application.ActiveWorkbook.FullName) _

& " [&A]"

.CenterFooter = "Página &P de &N" ‘Mostra página para página

.RightFooter = "&8 &D &T"


28/7/2014 MACROS PARA EXCEL - VBA-

End With

Next s

Application.ScreenUpdating = True

End Sub

BACKUP VÁLIDO COLOCAR ESTE CÓDIGO EM UM MÓDULO OU ESTS PASTA DE


TRABALHO SEGUIDO DA FUNÇÃO ABAIXO EM U MÓDULO

Sub Copia()

Dim MyFilePath$, Extension$

MyFilePath = MyPCpath("Pasta3")

Extension = Left(ThisWorkbook.Name, Len _

(ThisWorkbook.Name) - 4) & " Backup"

On Error Resume Next '<< VERIFICA SE A PASTA EXISTE

MkDir MyFilePath & Extension '<< CRIA A PASTA

'SALVA A PASTA ATUAL DA MESMA FORMA INCLUSIVE COM MODULOS

'SALVA O BKUP COM A DATA

ActiveWorkbook.SaveCopyAs Filename:=MyFilePath & _

Extension & "\" & Extension & _

(Format(Now, " mmm d yyyy, hh.mm.ss AMPM")) & ".xls"

MsgBox " O Excel irá fazer um Backup no Disco C, para aceitar Click OK", vbInformation

End Sub

Public Function MyPCpath$(Folder)

MyPCpath = CreateObject("WScript.Shell").SpecialFolders _
28/7/2014 MACROS PARA EXCEL - VBA-

(Folder) & Application.PathSeparator

End Functio

BACKUP PERFEITO

Sub Backup()

Dim awb As Workbook, BackupFileName As String, i As Integer, OK As Boolean

If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub

Set awb = ActiveWorkbook

If awb.Path = "" Then

Application.Dialogs(xlDialogSaveAs).Show

Else

BackupFileName = awb.Name

OK = False

On Error GoTo NotAbleToSave

If Dir("C:\" & BackupFileName) <> "" Then

Kill "C:\" & BackupFileName

End If

With awb

Application.StatusBar = "Salvando o Arquivo..."

.Save

Application.StatusBar = "Salvando arquivo backup..."

.SaveCopyAs "C:\" & BackupFileName

OK = True

End With

End If

NotAbleToSave:

Set awb = Nothing


28/7/2014 MACROS PARA EXCEL - VBA-

Application.StatusBar = False

If Not OK Then

MsgBox "Backup não concluído!", vbExclamation, ThisWorkbook.Name

End If

End Sub

Sub Backup()

Dim SourceFile, DestinationFile


Dim sPath As String
Dim sDataHora As String
Dim x As Integer

ActiveWorkbook.Save

sDataHora = Format(Now, "dd_mm_yy hh_mm")


sPath = ActiveWorkbook.Path

SourceFile = ActiveWorkbook.Name ' Definir o nome do arquivo de origem.


DestinationFile = sDataHora & "-" & SourceFile ' Definir o nome do arquivo de destino.

Sheets(1).Copy
ActiveWorkbook.SaveAs sPath & "\" & DestinationFile

Windows(SourceFile).ActivateFor x = 2 To ActiveWorkbook.Sheets.Count
Windows(SourceFile).Activate
Sheets(x).Copy Before:=Workbooks(DestinationFile).Sheets(1)
Next

ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub

BACKUP

Um form um textBox um botão comamdo

Private Sub Cmd_Backup_Click()

ActiveWorkbook.SaveCopyAs (TextBox_Caminho.Text)

TextBox_Caminho = ""
28/7/2014 MACROS PARA EXCEL - VBA-

TextBox_Caminho.SetFocus

End Sub

CRIANDO BACKUP COM SENHA


Esta macro cria um Backup de sua planilha e insere senha.

Sub Backup()
ActiveWorkbook.SaveAs Filename:="C:\Meus documentos\EVES.xls", _
FileFormat:=xlNormal, Password:="123", WriteResPassword:="123", _
ReadOnlyRecommended:=False, CreateBackup:=False
Range("I5").Select
End Sub

RESOLUÇÃO DE TELA

Para o Módulo do VBA declare


Declare Function DisplaySize Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Public Const SM_CXSCREEN = 0


Public Const SM_CYSCREEN = 1

Function Video() As String


Dim largura
Dim altura
largura = DisplaySize(SM_CXSCREEN)
altura = DisplaySize(SM_CYSCREEN)
valor = largura * altura
If valor = 307200 Then Video = "640x480"
If valor = 480000 Then Video = "800x600"
If valor = 786432 Then Video = "1024x768"
End Function

Para o Userform declare


Private Sub UserForm_Initialize()

Application.WindowState = xlMaximized
Me.Height = Application.Height
28/7/2014 MACROS PARA EXCEL - VBA-

Me.Width = Application.Width
Me.Left = Application.Left
Me.Top = Application.Top

End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As


Integer, ByVal X As Single, ByVal Y As Single)
UserForm_Initialize
End Sub

‘PROGRESSBAR PERCETUAL

‘Um form um progressBar uma label

Mudar nome da label p/ lblPerc

Private Sub Command1_Click()

Dim i As Long
ProgressBar1.Min = 0
ProgressBar1.Max = 100000
For i = 0 To 100000
DoEvents
ProgressBar1.Value = i
Me.lblPerc.Caption = CInt((i / 1000)) & " %"
Next i

End Sub

COPIA ARQUIVO EXCEL PARA ARQUIVO DE TEXTO


28/7/2014 MACROS PARA EXCEL - VBA-

Sub SaveAsTXT()

Dim LinhaAnterior As Long

Dim Celula As Variant

Dim Regiao As Range

Dim NomeArquivo As String

Set Regiao = Range("A1:A20") 'altere conforme sua necessidade

NomeArquivo = Application.GetSaveAsFilename("", "Texto (*.txt), *.txt", 1)

Open "" & NomeArquivo & "" For Append As #1

LinhaAnterior = 0

For Each Celula In Regiao

If Celula.Value <> "" Then

If (LinhaAnterior <> Celula.Row) And (LinhaAnterior) <> 0 Then Print #1, ""

Print #1, Celula.Value & "";

LinhaAnterior = Celula.Row

End If

Next Celula

Close #1

MsgBox "Dados Exportados com Sucesso..", vbInformation

End Sub

ESSA MACRO APAGA DADOS DE TODAS PLANILHAS


28/7/2014 MACROS PARA EXCEL - VBA-

Sub Apagar_Dados()

If MsgBox("Quer mesmo deletar esses dados?", vbYesNoCancel, "Deletando") = vbYes Then

Cancel = True

Worksheets("Jan").Activate

Range("A1:C23").Select

Selection.ClearContents

Worksheets("Fev").Activate

Range("A1:C23").Select

Selection.ClearContents

Worksheets("Mar").Activate

Range("A1:C23").Select

Selection.ClearContents

End If

Worksheets("Menu").Activate

End Sub

O código abaixo impede via VBA que o usuário utilize a funcionalidades Copiar e Colar no Microsoft Excel. De quebra, ainda desabilita
os botões copiar, e recortar das barras de ferramenta padrão do Excel.

Especificamente, o código trata os principal evento de navegação entre células, desativando o contexto CutCopyMode, o que faz com
que a marcação do copiar e consequentemente a opção de colar do usuário. Para não atrapalhar o funcionamento de outras planilhas, o
código trata também os eventos Workbook_Activate e Workbook_Deactivate, reativando o contexto e os botões das operações em
questão.

Todo o código deve ser colocado no módulo EstaPasta_de_Trabalho no VBA (ThisWorkbook em inglês).

Private Sub Workbook_Activate()

Dim oCtrl As Office.CommandBarControl

'Desabilita todos os comandos de Recortar

For Each oCtrl In Application.CommandBars.FindControls(ID:=21)

oCtrl.Enabled = False

Next oCtrl

'Desabilita todos os comandos de Copiar


28/7/2014 MACROS PARA EXCEL - VBA-

For Each oCtrl In Application.CommandBars.FindControls(ID:=19)

oCtrl.Enabled = False

Next oCtrl

Application.CellDragAndDrop = False

End Sub

Private Sub Workbook_Deactivate()

Dim oCtrl As Office.CommandBarControl

'Habilita todos os comandos de Recortar

For Each oCtrl In Application.CommandBars.FindControls(ID:=21)

oCtrl.Enabled = True

Next oCtrl

'Desabilita todos os comandos de Copiar

For Each oCtrl In Application.CommandBars.FindControls(ID:=19)

oCtrl.Enabled = True

Next oCtrl

Application.CellDragAndDrop = True

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

With Application

.CellDragAndDrop = False

.CutCopyMode = False 'limpa a área de transferência

End With

End Sub

EXCEL XP: PROPRIEDADE FULLNAME


28/7/2014 MACROS PARA EXCEL - VBA-

Retorna o endereço ( caminho e nome ) da pasta de trabalho

Este código, gravado no evento Open da pasta, armazena o endereço completo da pasta ativa

Private Sub Workbook_Open()

With ActiveWorkbook

Worksheets(”Plan1″).Range(”A1″) = .FullName

End With

End Sub

Fica assim: C:\Meus documentos\Testes_Diversos.xls ( local e nome )

EXCEL XP + VBA: QUANTIDADE DE PLANILHAS

Durante o processamento do seu aplicativo, desenvolvido em VBA, você precisa saber o total de planilhas na pasta de trabalho ativa.

Ok. Utilize o código abaixo

Dim TotalPlanilhas as Integer

With ActiveWorkbook

TotalPlanilhas = .Worksheets.Count

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Você pode personalizar a janela do Excel XP, redimensionando-a, alterando o seu tamanho, a sua largura durante a execução do
aplicativo, desenvolvido por você.

Abaixo, segue um pequeno ( é apenas a ponta do iceberg ) exemplo do que você pode fazer.

Tresloucando o Excel.

Abra uma pasta vazia.

Clique no botão Salvar e defina local e nome ( ObjetoActiveWindow.xls ).

Abra o Editor do Visual Basic ( menu Ferramentas / Macro / Editor ).

Clique no menu Inserir e em Módulo.

Em Módulo1, crie a rotina abaixo

Sub FormatarPlanilha()

With Worksheets(“Menu”)’Alterar nome da plan

.Activate

With .Range("A1")

.Activate

.Value = "8 segundos"

With .Font

.Name = "Arial"

.Size = 8

End With

End With

End With

With ActiveWindow

.DisplayGridlines = False

.DisplayHeadings = False

.Caption = "RicardoHorta.Net"

.DisplayHorizontalScrollBar = False

.DisplayVerticalScrollBar = False
28/7/2014 MACROS PARA EXCEL - VBA-

.DisplayWorkbookTabs = False

.WindowState = xlNormal

.Height = 150

.Width = 150

.Top = 0

.Left = 0

Application.Wait (Now + TimeValue("00:00:08"))

.DisplayGridlines = True

.DisplayHeadings = True

.Caption = ""

.DisplayHorizontalScrollBar = True

.DisplayVerticalScrollBar = True

.DisplayWorkbookTabs = True

.WindowState = xlMaximized

End With

With Worksheets(“Menu”).Range("A1")’Alterar nome da plan

.Value = " OK "

End With

End Sub

Na janela Projeto, clique em EstaPasta_de_trabalho.

Na janela Objeto, selecione Workbook.

No evento Open, informe.

Private Sub Workbook_Open()

FormatarPlanilha

End Sub

Feche o Editor.
28/7/2014 MACROS PARA EXCEL - VBA-

Salve e feche a pasta.

Teste.

Reabra ObjetoActiveWindow, clicando em Ativar macros.

A pasta será exibida como uma pequena janela, sem as tradicionais barras de rolagem, linhas de grade, guias, enfim, tudo o que você
está acostumado a ver.

Após 8 segundos, a tela será restaurada e a pasta será exibida com as suas características tradicionais.

EXCEL XP + VBA: ACESSANDO VÁRIAS PLANILHAS AO MESMO


TEMPO

Para ocultar mais de uma planilha, você pode utilizar a sintaxe:

Worksheets(”Plan1″).Visible = False

Worksheets(”Plan2″).Visible = False

Worksheets(”Plan3″).Visible = False ( Este exemplo oculta as planilhas Plan1, Plan2 e Plan3 ).

Porém, inteligente microsoftiano(a), você pode utilizar a função Array para acessar mais de uma planilha ao mesmo tempo.

Worksheets(Array(”Plan1″, “Plan2″, “Plan3″)).Visible = False oculta, ao mesmo tempo, as 3 planilhas citadas.

EXCEL XP: MÉTODO SELECT

Com o método Select você pode selecionar 1 célula, um intervalo contínuo de células ou intervalos não adjacentes.

Para selecionar uma célula, faça

Sub Selecionar_01( )
28/7/2014 MACROS PARA EXCEL - VBA-

With Worksheets("Menu")’Pode se colocar mensagem via validaçao

.Range("A2").Select

End With

End Sub

Para selecionar um intervalo, utilize:

Sub Selecionar_02( )

With Worksheets("Plan1")

.Range("A2:A4").Select

End With

End Sub

Para selecionar intervalos não-adjacentes, utilize:

Sub Selecionar_03( )

With Worksheets("Plan1")

.Range("A2:A4,B2:B4,D1:E1").Select

End With

End Sub

Observe, microsoftiano(a) amigo(a), que os intervalos são separados por vírgulas.


28/7/2014 MACROS PARA EXCEL - VBA-

NOME NA BARRA DE TÍTULOS

Na janela Procedimento, selecione SheetActivate ( ocorre quando uma planilha é ativada ).

Escreva o código abaixo:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

With Application

.Caption = Sh.Name

End With

End Sub

Para restaurar a barra de título, quando a pasta for fechada, selecione, na janela Procedimento, o evento BeforeClose ( ocorre antes da
pasta ser fechada ).

Programe o evento.

Private Workbook_BeforeClose(Cancel As Boolean)

With Application

.Caption = “”

End With

End Sub

Clique no botão Salvar.

Feche o Editor VBA.

Agora, vamos ao teste. Provavelmente, a pasta terá as planilhas Plan1, Plan2, Plan3 e… aí depende da configuração do seu Excel. O
total de planilhas para cada pasta pode variar.

Clique nas guias ( Plan2, Plan3,… ) e observe a barra de título.


28/7/2014 MACROS PARA EXCEL - VBA-

Serão exibidos o nome da planilha e o nome da pasta. Algo como Plan1 - EventoSheetActivate.xls, Plan2 - Evento SheetActivate.xls e
assim por diante.

Feche a pasta e a barra de título microsoftiana será restaurada.

CONTROLADOR DE TEMPO

'Copie e cole este código em um módulo VBA

Sub IniciaProcesso()

Dim Tempo As String

Tempo = "00:00:10" 'altere o valor do tempo aqui

Dim rslt As VbMsgBoxResult

rslt = MsgBox("Esta é a mensagem. Clique em um dos botões para exibir o resultado",


vbYesNo, "Mensagem")

If rslt = vbYes Then

MsgBox "Você clicou em sim. A mensagem aparecerá novamente em " & Tempo & " segundos"

Application.OnTime DateTime.Now + TimeValue(Tempo), "IniciaProcesso"

Else

MsgBox "Você clicou em não. A mensagem não mais aparecerá"

End If

End Sub

'Tomás Vasquez
28/7/2014 MACROS PARA EXCEL - VBA-

VBA – NOME DA GUIA BASEADO NUMA CÉLULA E VICE-VERSA.

Se pretendermos que o tabulador de uma Worksheet obtenha o nome que colocarmos em determinada célula, podemos utilizar o
seguinte código ( créditos para Juan Pablo Gonzalez ):

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Address = "$A$1" Then Sh.Name = Target

End Sub

E se pretendermos fazer exactamente o contrário, ou seja, obter numa determinada célula o nome do tabulador?

Então, aproveitando o código anterior, podemos alterá-lo para que o resultado seja o pretendido:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Range("$A$1") = Sh.Name

End Sub

DEIXA MAIÚSCULA CÉLUAS

Option Explicit

Dim FLAG As Boolean

Public Sub Worksheet_Change(ByVal Target As Range)

'Função para entrar converter letras minusculas em maiusculas

Dim MaiscStr As String, C1, C2

Select Case Target.Cells.Count

Case Is > 1

For Each C1 In Range(Target.Address)

For Each C2 In Range("C5,C7,C9,J9") 'Intervalo pode ser alterado

If C1.Address = C2.Address Then

If FLAG Then
28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox FLAG

Selection.Delete

FLAG = Not FLAG

Exit Sub

End If

MsgBox "Não é permitido arrastar e/ou " & _

"selecionar" & vbCr & "várias células " & _

"Neste intervalo.", vbInformation, "Aviso"

'Desfaz

Exit Sub

End If

Next C2

Next C1

Exit Sub

Case Else

If Application.Intersect(Range(Target.Address), _

Range("C5,C7,C9,J9")) Is Nothing Or _

Target.Value = "" Then Exit Sub ' o intervalo pode ser alterado

End Select

With Target

If .HasFormula = False Then

MaiscStr = UCase(.Value)

Application.EnableEvents = False

.Value = (MaiscStr)

End If

End With

Application.EnableEvents = True

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

LISTAR LISTVIEW ESTA ACRO LISTA DADOS DE UMA PLAN


P/LISTVIEW

Private Sub CommandButton1_Click()

ListView1.ListItems.Clear

For i = 2 To Plan2.Range("P1").Value

ListView1.ListItems.Add 1, , Plan2.Range("A" & i).Value

ListView1.ListItems(1).ListSubItems.Add 1, , Plan2.Range("B" & i).Value

ListView1.ListItems(1).ListSubItems.Add 2, , Plan2.Range("C" & i).Value

ListView1.ListItems(1).ListSubItems.Add 3, , Plan2.Range("D" & i).Value

ListView1.ListItems(1).ListSubItems.Add 4, , Plan2.Range("E" & i).Value

ListView1.ListItems(1).ListSubItems.Add 5, , Plan2.Range("F" & i).Value

ListView1.ListItems(1).ListSubItems.Add 6, , Plan2.Range("G" & i).Value

ListView1.ListItems(1).ListSubItems.Add 7, , Plan2.Range("H" & i).Value

Next i

End Sub

MACRO QUE NÃO DEIXA SAIR SEM PREENCHER OS DADOS

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Range("A1") = "" Then

If MsgBox("Falta Inserir dados na Celula: A1" & vbCrLf & _

"Quer sair sem introduzir os dados?", _

vbDefaultButton2 + vbYesNo) = vbYes Then Exit Sub

Cancel = True

End If
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

CÓDIGO QUE ENCERRA O EXCEL EM 1 MINUTO


Option Explicit

'Fechar um minuto depois de abrir


Private Sub Workbook_Open()
Dim D As Date, N As Integer
On Error Resume Next

Inicio:
D = Now + TimeSerial(0, 1, 0) 'Um minuto . Pode ser outro valor

While D > Now


DoEvents
Wend
N = MsgBox("Este documento irá fechar." & vbCrLf & _
"Pretende gravar as alterações?", vbDefaultButton1 + vbYesNoCancel)
If N = vbCancel Then GoTo Inicio
If N = vbYes Then Me.Close True Else Me.Close False

End Sub

ESTA MACRO OU FUNÇÃO MARCA A LETRA DA COLUNA DIGITANDO


O Nº DA LINHA

Function ColumnLetter(ColumnNumber As Integer) As String

If ColumnNumber > 26 Then

' 1st character: Subtract 1 to map the characters to 0-25,

' but you don't have to remap back to 1-26

' after the 'Int' operation since columns

' 1-26 have no prefix letter


28/7/2014 MACROS PARA EXCEL - VBA-

' 2nd character: Subtract 1 to map the characters to 0-25,

' but then must remap back to 1-26 after

' the 'Mod' operation by adding 1 back in

' (included in the '65')

ColumnLetter = Chr(Int((ColumnNumber - 1) / 26) + 64) & _

Chr(((ColumnNumber - 1) Mod 26) + 65)

Else

' Columns A-Z

ColumnLetter = Chr(ColumnNumber + 64)

End If

End Function

NÃO FECHAR PROGRAMA SEM FAZER TAL COISA


As vezes, ao desenvolver planilhas em VBA, precisamos checar ao fechar a planilha se certa condição foi atendida ou não,
por exemplo, em uma determinada planilha você precisa verificar se uma certa célula foi preenchida, caso contrário você
deseja alertar o usuário e impedir que a planilha seja fechada. As vezes, ao desenvolver planilhas em VBA, precisamos
checar ao fechar a planilha se certa condição foi atendida ou não, por exemplo, em uma determinada planilha você precisa
verificar se uma certa célula foi preenchida, caso contrário você deseja alertar o usuário e impedir que a planilha seja
fechada.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'este evento é executado antes da planilha

'ser fechada

If Cells(1, 1).Value <> "Fechar" Then

'se não estiver escrito a plavra

'"Fechar" na primeira célula da planilha

'exibe a mensagem

MsgBox "não vou fechar"

'cancela o fechamento da planilha

Cancel = True
28/7/2014 MACROS PARA EXCEL - VBA-

End If

End Sub

UTILIZANDO ARTIFICIOS DE SEGURANÇA(AUTO DESTRUIÇÃO)


2010-05-08 10:04

Esta macro deleta todo o conteúdo caso a celula A1 receba o valor "x"'

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


If Range("A1") = "x" Then
Range("A1:IV65536").Select
Selection.ClearContents
Range("A1").Select
End If
End Sub

SUBSTITUINDO ERROS POR CARACTERES


2010-05-10 12:46

Esta macro mascara os erros nas celulas substituindo por qualquer caracter.

Sub Mascara_Erro()
Dim erros As Range
Dim caracter As String
caracter = "@"
Set erros = ActiveSheet.UsedRange
For Each celula In erros.Cells
If IsError(celula.Value) Then
celula.Value = caracter
End If
Next celula
End Sub

'ESTA MACRO FÁZ UMA FORMATAÇÃO ESPECIAL NAS CÉLULAS


Private Sub Worksheet_Change(ByVal Target As Range)

Dim Cel As Range

For Each Cel In Target

'Adaptar o/os trechos.

If Not Intersect(Cel, Range("B1:B30,D1:D30")) Is Nothing Then 'Colunas a serem formatadas

Select Case Cel.Value

Case 5 To 10: Cel.Interior.Color = vbRed 'De 5 à 10 - Vermelho


28/7/2014 MACROS PARA EXCEL - VBA-

Case 11 To 20: Cel.Interior.Color = vbGreen 'De 11 à 20 - Verde

Case 21 To 30: Cel.Interior.Color = vbBlue 'De 21 à 30 - Azul

Case 31 To 50: Cel.Interior.Color = vbYellow 'De 31 à 50 - Amarelo

Case Else: Cel.Interior.ColorIndex = xlNone 'Sem cor

End Select

End If

Next Cel

End Sub

ABRINDO A PÁGINA DA INTERNET


2010-06-10 08:50

Esta macro abre o IE na página so seu site preferido.É só mudar o endereço para o site que vc quer abrir.

Sub Abrir_pagina_IE()
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
With ie
.navigate "http://www.google.com.br/"
.Visible = True
End With
End Sub

ABRINDO O MÓDULO DO VBA DIRETO DO EXCEL.


2010-05-14 08:21

Sub Modulo()
SendKeys "%{F11}"
End Sub

ABRIR PLANILHA PELO NOME PELO INPUTBOX


Esta macro abre uma determinada planilha pelo nome digitado em um InputBox . Mude a pasta para a que costuma salvar as planilhas e
digite apenas o nome da planilha.
28/7/2014 MACROS PARA EXCEL - VBA-

' Declara a variável


Dim Nome As String
Sub Nome_da_Macro()
' Define a variável como o InputBox e armazenará o conteúdo digitado
Nome = InputBox("Digite o nome", "aviso")
' Verifica se campo está em branco
If Nome = "" Then
' Se sim , fechar
Exit Sub
End If
' Encerra
If Nome <> "" Then
' Verifica se campo esta em branco , se não , abrir o arquivo
ChDir "C:\Meus documentos" ' Ponha aqui o local que costuma salvar suas planilhas
Workbooks.Open Filename:=Nome
End If
' Fim
End Sub

AGRUPANDO COLUNAS
2010-05-10 12:32

Esta macro agrupa determinadas colunas.

Sub Agrupar_Colunas()
Columns("F:L").Select
Selection.Columns.Group
Range("D1").Select
End Sub

Alterando o nome do Excel. Olá , esta macro altera o nome do Excel para qualquer um que deseja.

Sub Muda_Nome_Excel()
Dim Meu_Titulo As String
Meu_Titulo = " O Poder do Excel "
Application.Caption = Meu_Titulo
End Sub

CRIANDO ATALHOS NA ÁREA DE TRABALHO


Esta macro é bem legal , caso vc disponibilize planilhas pela internet e que divulgar algo , pode utiliza-lá , bem simples.
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Criar_Atalho()
Set WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
Set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Ver meu site.url")
oUrlLink.TargetPath = "http://exceletudo.webnode.com.br"
oUrlLink.Save
End Sub

CRIANDO MENUS PERSONALIZADOS


Esta macro cria um menu e submenu no excel , tornando seus projetos mais profissional.

Sub Deletar()
On Error Resume Next
Application.CommandBars(1).Controls("Coloniz@dor").Delete
On Error GoTo 0
End Sub
Sub CriarMenu()
Dim Menu As CommandBarPopup
Dim SubMenu As Object
Call Deletar
Set Menu = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, _
before:=10, temporary:=True)
Menu.Caption = "Coloniz@dor"
Set SubMenu = Menu.Controls.Add(Type:=msoControlButton)
SubMenu.OnAction = "Msg"
SubMenu.Caption = "Novo"
End Sub
Sub Msg()
MsgBox "Olá Amigos , isso é excel !"
End Sub

COPIANDO DADOS DA PLANILHA NO BLOCO DE NOTAS


‘Esta macro copia os dados do intervalo A1 a A10 em um bloco de notas.

Sub Colar_Notas()
Dim notas As Double
notas = Shell("NOTEPAD.EXE", vbNormalFocus)
AppActivate notas
Application.SendKeys Range("A1:A10").Value, True
Application.SendKeys "~", True
Application.SendKeys "%FABATCH%S", True
End Sub

CRIANDO PASTA NO DIRETÓRIO NO EXCEL


‘Esta macro cria uma pasta em qualquer diretário que deseja , no caso irá cria uma pasta chamada Excel no diretório C: Para selecionar
outro diretório basta mudar.
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Criar_Macro()
Dim linha, pasta
Set linha = CreateObject("Scripting.FileSystemObject")
Set pasta = linha.CreateFolder("c:\Excel")
CreateFolderDemo = pasta.Path
End Sub

CRIANDO TECLAS DE ATALHO PARA ABRIR FORMULÁRIOS


Esta macro cria uma tela de atalho para abrir o formulário , basta inserir esta macro em um módulo , ir direto na planilha e
clicar Shift + F3 e pronto.

Sub abrir_Formulario()
UserForm1.Show
End Sub
Sub Workbook_Open()
Application.OnKey "+{F3}", "abrir_Formulario"
End Sub

CRIANDO UMA NOVA PLANILHA DO OS MESES DO ANO


Esta macro pode ser encrementada nos projetos para balanços anuais , relatórios etc. Ela cria uma nova planilhas com 12 abas com os
meses do ano.

Sub CriaR()
Dim Mes As Integer
Application.ScreenUpdating = False
Workbooks.Add
Worksheets.Add Count:=12 - ActiveWorkbook.Worksheets.Count
For Mes = 1 To 12
Worksheets(Mes).Name = _
Format(DateSerial(1, Mes, 1), "mmmm")
Next Mes
End Sub

DIVIDINDO A PLANILHA
a macro divide a planilha em duas na tela.

Sub Divide_Duas_Partes()
ActiveWindow.NewWindow
Windows.Arrange ArrangeStyle:=xlVertical
End Sub

DUPLICAR IMAGEM
Esta macro duplica determinada figura.
28/7/2014 MACROS PARA EXCEL - VBA-

Sub Copia_Imagem()
Dim s As Shape

Set s = ActiveSheet.Shapes("Picture 1").Duplicate


s.Top = Range("C3").Top
s.Left = Range("C3").Left
End Sub

ENVIANDO E-MAIL DA PLANILHA ATUAL


Esta macro envia um e-mail anexando a planilha atual aberta.

Sub Envia_Planilha_anexo()
Application.Dialogs(xlDialogSendMail).Show
End Sub

EVENTO DUPLO CLICK NA PLANILHA


Veja como utilizar o evento duplo click para incrementar seus projetos , essa macro insere um "x" nas células que forem clicadas duas
vezes e apaga o "x" se for clicada duas vezes.

Copie e cole esta macro no módulo da planilha.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)


'Continuar a macro caso tenha erro
On Error Resume Next
'Se a célula clicada estiver vazia
If IsEmpty(ActiveCell.Value) Then
'Célula ativa recebe o valor x
ActiveCell.Value = "X"
'Se Célula clicada contem valor x
ElseIf ActiveCell.Value = "X" Then
'Célula ativa fica vazia
ActiveCell.Value = ""
End If
Cancel = True
End Sub

EXECUTANDO MACRO COM TEMPO


ESTa macro é execultada em 10 e 10 segundos com opção de parar ou não.

Sub IniciaProcesso()
Dim Tempo As String
Tempo = "00:00:10" 'altere o valor do tempo aqui

Dim rslt As VbMsgBoxResult


rslt = MsgBox("Esta é a mensagem. Clique em um dos botões para exibir o resultado", vbYesNo, "Mensagem")
If rslt = vbYes Then
MsgBox "Você clicou em sim. A mensagem aparecerá novamente em " & Tempo & " segundos"
28/7/2014 MACROS PARA EXCEL - VBA-

Application.OnTime DateTime.Now + TimeValue(Tempo), "IniciaProcesso"


Else
MsgBox "Você clicou em não. A mensagem não mais aparecerá"
End If

End Sub

'EXECUTANDO UMA MACRO AO SELECIONAR CELULA


'Olá , esta evento executa uma macro toda vez que uma célula ou intervalo de células são selecionado , as celulas podem
ser determinadas por 'Ponha esta macro no Módulo da Planilha WorkSheet.

Private Sub Worksheet_SelectionChange(ByVal target As Excel.Range)

If Intersect(target, Range("A1:B10")) Is Nothing Then Exit Sub

MsgBox ("O Poder do Excel")

End Sub

EXEMPLO DE LOOP
segue um exemplo simples para entender com o Loop funciona. O Loop serve para executar a macro até que um objetivo ou valor seja
alcançado. Digite o nome Colonizador , abaixo do nome escreva várias linhas , selecione a celula com a palavra colonizador e execute
essa macro.

Sub Exemplo_Loop()
'Deletar apenas as celulas não vazias
Do While ActiveCell <> ""
'Enquanto a celula ativa for diferente da palavra Coloniz@dor
'Deleta a celula a baixo da palavra
If ActiveCell <> "Colonizador" Then
ActiveCell.EntireRow.Delete
Else
'Caso contrario descola para linha abaixo
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub

EXIBIR USUÁRIO
Esta macro simples exibe o usuário que esta logado no computador.

Private Declare Function GetUsername Lib "advapi32.dll" _


Alias "GetUserNameA" (ByVal strUsuario_Nome As String, _
ByRef lSize As Long) As Boolean

Sub Mostra_usuario()
MsgBox Environ("username"), vbInformation, "Coliniz@dor"
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

EXTRAIR APENAS NUMEROS


Esta macro extrai apenas os numeros de uma celula.

Function Numeros(Texto As String)


For Num = 1 To Len(Texto)
If Mid(Texto, Num, 1) <= 9 Then
Numeros = Numeros + Mid(Texto, Num, 1)
End If
Next
End Function

EXTRAIR VALORES UNICOS DE UMA LISTA


Olá , esta macro lista em ComboBox os valores unicos , mesmo que haja valores repetidos , somente serão exibidos os valores unicos ,
não exibe duplicado. Em um formulário , insira um combobox e cole esta macro. Ela vai buscar a lista na coluna A , mais vc pode alterar
para qualquer coluna

Private Sub UserForm_Initialize()


Dim i As Integer
For i = 1 To Sheets("Plan1").Range("A65536").End(xlUp).Row
ComboBox1 = Sheets("Plan1").Range("A" & i)
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Plan1").Range("A" & i)
Next i
End Sub

FORMATANDO TEXTBOX
Esta macro formata o textbox para receber dados de data , vc digita 14122009 , e ficara 14/12/2009,

Private Sub TxtData_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)


If Len(TxtData) = 2 Or Len(TxtData) = 5 Then
TxtData.Text = TxtData.Text & "/"
SendKeys "{End}", True
End If
End Sub

Fórmula de diferença de datas

=DATADIF(A1;A2;"Y") & " anos " & DATADIF(A1;A2;"YM") & " meses " & DATADIF(A1;A2; "MD") & " dias"

Programando Execusão de Macro


Esta macro programa a macro salvar para ser executada a cada 10 segundos.

Sub Chamar_Macro()
Application.OnTime Now + TimeValue("00:00:10"), "Salvar"
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub
Sub Salvar()
ActiveWorkbook.Save
End Sub

Macro para Localizar Palavras


Olá , esta macro busca na coluna "A" , a celula que contém o mesmo valor na celula B1 , e a colore . Mais vc pode adaptar as suas
necessidades mudando a cor ou as celulas.

Sub Localizar()
'Declara variável
Dim linha As Range
'Define variável
Set linha = Cells(1, 2)
'Se variável linha vazio , encerra
If linha = "" Then Exit Sub
'Seleciona coluna A
Columns("A:A").Select
Selection.Interior.ColorIndex = xlNone
Selection.Find(what:=linha, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, _
searchdirection:=xlNext, MatchCase:=False).Activate
ActiveCell.Select
'Se a celula selecionada for = B1 , colorir
With Selection.Interior
.ColorIndex = 10
End With
End Sub

Salvando Gráfico como Imagem


Grava um arquivo de Imagem.JPG o seu grafico. Neste caso esta Gravando no C:\Salves da minha maquina.

Sub Salva_Grafico()
Dim Grafico As Chart
Set Grafico = ActiveSheet.ChartObjects(1).Chart
Grafico.Export Filename:="C:\Salves\Grafico.jpg", filtername:="JPG"
End Sub

Limitando tempo de uso


Esta macro limita o tempo de usu da planilha e depois fecha , nesse caso vai durar 10 segundos.] Cole esta macro no módulo da
worksheet.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Dim PauseTime, Start
PauseTime = 10
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
ThisWorkbook.Saved = True
Application.Quit
End Sub

Obrigar o usuário a digitar maiúscula


28/7/2014 MACROS PARA EXCEL - VBA-

Esta macro obriga o usuário a digitar os dados em maiúscula.

Private Sub Worksheet_Change(ByVal Target As Range)


Target = UCase(Target)
End Sub

Programando Macro para executar daqui a algum tempo


Esta macro pode ser util pois só executa a macro depois de determinado tempo , nesse caso em 10 segundos , vc pode limitar por
exemplo o acesso da planilha.

Sub msg()
MsgBox "Texte"
End Sub
Sub Macro()
Application.OnTime Now + TimeValue("00:00:10"), "msg"
End Sub

ESTA MACRO CANCELA E EVITA DIGITAÇÃO ENTRE A1:C10


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

With Range("A1:C10").Validation

.Delete

.Add Type:=xlValidateWholeNumber, _

AlertStyle:=xlValidAlertStop, _

Operator:=xlBetween, _

Formula1:="-100", _

Formula2:="-100"

.IgnoreBlank = True

.InCellDropdown = True

.InputTitle = "Atenção"

.ErrorTitle = "Impossivel digitação"

.InputMessage = "Celulas não aceitam digitação !"

.ErrorMessage = "CANCELE A OPERAÇÃO!"

.ShowInput = True

.ShowError = True

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

PROTEGER TODAS AS CELULAS MENOS AS ESPECÍFICAS


Sub Protege_celulas_menos_especificas()
Range("A1,B2,C3,D4").Select
Selection.Locked = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

PROTEGENDO E DESPROTEGENDO TODAS AS PLANILHAS.


Sub Proteger()
On Error Resume Next
Dim ws As Worksheet
Dim codigo As String
codigo = InputBox("Por favor inserir o Código")
For Each ws In ThisWorkbook.Worksheets
ws.Protect (codigo)

Next ws
End Sub

Sub Desproteger()
On Error Resume Next
Dim ws As Worksheet
Dim codigo As String
codigo = InputBox("Por favor inserir o Código")
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect (codigo)
Next ws
End Sub

REMOVENDO DUPLICADOS
28/7/2014 MACROS PARA EXCEL - VBA-

Olá , esta macro remove o conteúdo das celulas duplicadas.

Sub RemoveDuplicados()
Worksheets("Plan1").Range("A2").Sort key1:=Worksheets("Plan1").Range("A1")
Set currentCell = Worksheets("Plan1").Range("A1")
Do While Not IsEmpty(currentCell)
Set nextCell = currentCell.Offset(1, 0)
If nextCell.Value = currentCell.Value Then
currentCell.EntireRow.Delete
End If
Set currentCell = nextCell
Loop
End Sub

OCULTANDO OS VALORES ZERO


Esta macro Oculta e exibe os valores em zero na planilha.

Sub Mostrar()
ActiveWindow.DisplayZeros = Not ActiveWindow.DisplayZeros
End Sub

LIMITAR DIGITAÇÃO
Esta macro limita a area de digitação.

Sub ScrollArea()
With Sheets("Plan1")
.EnableSelection = 1
.ScrollArea = "$A$1:$F$20"
End With
End Sub

OCULTANDO MENU PRINCIPAL


As vazes vc não quer que o usuario faça qualquer tipo de modificação na planilha , essa macro oculta o menu principal.

Sub Sumir()
Application.CommandBars(1).Enabled = False
End Sub

Essa outra torna visivel.


28/7/2014 MACROS PARA EXCEL - VBA-

Sub Aparecer()
Application.CommandBars(1).Enabled = True
End Sub

Essa macro oculta apenas um determinado menu.

Sub Ocultar()
Application.CommandBars(1).Controls("Ajuda").Visible = True
End Sub

FUNÇÃO PERSONALIZADA QUE CONTA VALORES UNICOS


Esta função retorna a quantidades de valores unicos em um determinado intervalo.Copie esta macro e cole no módulo do vba , vá em
inserir função , função definida pelo usuário e ela estará lá

Function ValorUnico(Valor As Range) As Long


Dim Celula As Range
Dim Unico As New Collection
Application.Volatile
On Error Resume Next
For Each Celula In Valor
Unico.Add Celula.Value, CStr(Celula.Value)
Next Celula
On Error GoTo 0
ValorUnico = Unico.Count
End Function

ORDENAR DADOS
Esta macro ordena crescente as colunas A e B.

Sub Ordem_Crescente()
Columns("A:B").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub

FUNÇÃO QUE RETORNA NOME E CAMINHO


Esta função personalizada retorna o nome e o caminho do arquivo atual.

Basta salvar esta macro no módulo VBA , vá no excel e inserir função , escolha função definida pelo usuário.

Function Nome_Arquivo() As String


Nome_Arquivo = ThisWorkbook.FullName
End Function
28/7/2014 MACROS PARA EXCEL - VBA-

FUNÇÃO PARA EXTRAIR SÓ TEXTOS


Esta macro extrai apenas texto de uma celula.

Function Textos(Texto As String)


For Num = 1 To Len(Texto)
If Mid(Texto, Num, 1) <= 9 Then
Else
Textos = Textos + Mid(Texto, Num, 1)
End If
Next
End Function

SOBRE ESCREVER EM CELULAS


Sub Sobrescrever()
SupStart = Len(ActiveCell.Value)
ActiveCell.Characters(Start:=SupStart, Length:=1).Font.Superscript = True
End Sub

MSGBOX COM 3 OPÇÕES


2010-05-14 08:18

Olá , estamos acostumados a usar o msgbox apenas com a opção de OK , mais tenhomos com incremantas mais funções , veja o
exemplo a seguir:

Sub Msgbox3()
Select Case MsgBox("Clacar Yes, No e Cancel", vbQuestion + vbYesNoCancel)
Case vbYes: MsgBox "Clicou Sim!"
Case vbNo: MsgBox "Clicou Não!"
Case Else: MsgBox "Clicou Cancelar!"
End Select
End Sub

FUNÇÃO PERSONALIZADA QUE EXTRAI NÚMEROS DE CELULAS


Esta função pode ser muito Útil pois extrai todo valor numérico de determinada célula que contenha texto com números juntos.

Copie esta macro e cole no módulo do VBA , vá em inserir função , função definida pelo usuário e pronto.

wqw234gnmg 234.=RetirarNumero(A1)
212vbi3b2 21232.=RetirarNumero(A2)
28/7/2014 MACROS PARA EXCEL - VBA-

Function RetirarNumero(Texto As String)


Dim x As Integer
Dim y As Integer
Dim z As String
For x = Len(Texto) To 1 Step -1
If IsNumeric(Mid(Texto, x, 1)) Then
y=y+1
z = Mid(Texto, x, 1) & z
End If
If y = 1 Then z = CInt(Mid(z, 1, 1))
Next x
RetirarNumero = CLng(z)
End Function

Excel Fórmulas e Funções


EXTRAIR APENAS NUMEROS
Esta macro extrai apenas os numeros de uma celula.

Function Numeros(Texto As String) For Num = 1 To Len(Texto) If Mid(Texto, Num, 1) <= 9 Then Numeros = Numeros + Mid(Texto,
Num, 1) End If Next

End Function

FUNÇÃO PARA EXTRAIR SÓ TEXTOS


Esta macro extrai apenas texto de uma celula.

Function Textos(Texto As String) For Num = 1 To Len(Texto) If Mid(Texto, Num, 1) <= 9 Then Else Textos = Textos + Mid(Texto, Num,
1) End If Next

End Function

FUNÇÃO QUE RETORNA NOME E CAMINHO


Esta função personalizada retorna o nome e o caminho do arquivo atual. Basta salvar esta macro no módulo VBA , vá no excel e inserir
função , escolha função definida pelo usuário.

Function Nome_Arquivo() As String Nome_Arquivo = ThisWorkbook.FullName


28/7/2014 MACROS PARA EXCEL - VBA-

End Function

FUNÇÃO PARA CÁLCULAR A DIREFENÇA ENTRE UMA DATA


QUALQUE E HOJE
2010-05-05 12:51

Olá , Esta fórmula retorna a diferença de anos , meses e dias entra uma data qualquer e hoje. Exemplo: Digite uma data qualquer na
celula A1 e cole esta fórmula na B1. =ARRUMAR(SE(HOJE()-A1;TEXTO(DATADIF(A1;HOJE();"y");"[>1]0"" Anos"";[>]""1...

FUNÇÃO REPT
Esta função cria um diagrama baseado em texto usando um resultado numérico. Exemplo : =REPT("/";B3) O valor da celula B3 irá
determinar quantos "/" será exibidos. Com um truque simples vc poderá transformar seu diagrama em um gráfico de barras. Formate a
célula da...

FUNÇÃO "CARACT"
O Excel permite determinar o caractere representado por um código utilizando a função CARACT() : Esse código deve retornar um
número entre 1 e 255. Poe exemplo , a fórmula abaixo exibe o símbolo de direitos autorais ( código ANSI 169 ): =CARACT(169) Para
criar o conjunto de caracteres...

PROTEGE FORMULA NA PLAN

Sub Proteger_Formulas()

Range("A1,B3,D8").Select

On Error Resume Next

Selection.SpecialCells(xlCellTypeFormulas, 23).Select

With Selection.Validation

.Delete

.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=">1"

.IgnoreBlank = True

.InCellDropdown = True

.InputTitle = ""
28/7/2014 MACROS PARA EXCEL - VBA-

.ErrorTitle = "Existe Fórmula - não digite!"

.InputMessage = ""

.ErrorMessage = "Célula com Fórmula está protegida!!"""

.ShowInput = True

.ShowError = True

End With

End Sub

ESTA MACRO OCULTA PLAN DESIGNADA COLOCAR NO MÓDULO DA


PLAN
Private Sub Worksheet_Activate()

'Oculta a plan Aniversariantes se existir

For Each ws In Worksheets

If ws.Name = "Aniversariantes" Then

ws.Visible = False

End If

Next ws

End Sub

CRIA PLANILHA INDICADA


Private Sub Workbook_Open()

frmNiverForm.Show

Application.ScreenUpdating = False

'Cria a Planilha Aniversariantes após a ultima planilha da pasta

ActiveWorkbook.Sheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = "Aniversariantes"

ActiveWindow.DisplayGridlines = False
28/7/2014 MACROS PARA EXCEL - VBA-

ActiveSheet.Visible = False

Application.ScreenUpdating = True

Call ShowNiversOpen

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call Excluir_nivers

Application.DisplayAlerts = False 'para não perguntar nada ao usuário

ThisWorkbook.Save 'salva a planilha

End Sub

PROGRAMAR LISTVIEW 1
Private Sub UserForm_Initialize()

On Error Resume Next

' Adiciona as colunas

With Form_Iniciais.ListView1

.View = lvwReport

.ColumnHeaders.Add Text:="Código.", Width:=70

.ColumnHeaders.Add Text:="Descrição", Width:=150

.ColumnHeaders.Add Text:="Fornecedor", Width:=120

.ColumnHeaders.Add Text:="Formato", Width:=40

.ColumnHeaders.Add Text:="Qtdade", Width:=40

.HideColumnHeaders = False 'Cabeçalho

.View = lvwReport

Gridlines = True

End With

lastRow = Plan1.Cells(Plan4.Cells.Rows.Count, "B").End(xlUp).Row

' Adiciona itens

For X = 2 To lastRow
28/7/2014 MACROS PARA EXCEL - VBA-

Set li = ListView1.ListItems.Add(Text:=Plan1.Cells(X, "B").Value)

li.ListSubItems.Add Text:=Plan1.Cells(X, "C").Value

li.ListSubItems.Add Text:=Plan1.Cells(X, "D").Value

li.ListSubItems.Add Text:=Plan1.Cells(X, "E").Value

li.ListSubItems.Add Text:=Plan1.Cells(X, "F").Value

li.ListSubItems.Add Text:=Plan1.Cells(X, "G").Value

li.ListSubItems.Add Text:=Plan1.Cells(X, "H").Value

Next

End Sub

FUNÇÃO CRIADA PARA ARREDONDAR CASAS DECIMAIS


'Por exemplo: 1,2 para 1, 1,5 para 1, 1,7 para 1

Public Function ArredNum(mValor As Double, mCasas As Integer)

ArredNum = Int((mValor * 10 ^ mCasas) + 0.99) / 10 ^ mCasas

End Function

'ESTA FUNÇÃO CAPTURA TODO O CONTEÚDO DE SUA TELA ATUAL E


COLOCA EM PICTUREBOX
Private Declare Function BitBlt Lib "gdi32" (ByVal hDCDest As Long, ByVal XDest As Long, _

ByVal YDest As Long, ByVal nWidth As Long, _

ByVal nHeight As Long, ByVal hDCSrc As Long, _

ByVal XSrc As Long, ByVal YSrc As Long, _

ByVal dwRop As Long) As Long

Private Declare Function GetDesktopWindow Lib _

"user32" () As Long

Private Declare Function GetWindowDC Lib _

"user32" (ByVal hWnd As Long) As Long

Private Declare Function ReleaseDC Lib "user32" _


28/7/2014 MACROS PARA EXCEL - VBA-

(ByVal hWnd As Long, ByVal hdc As Long) As Long

'Use esta função fazer a captura de tela


Public Sub PrintScreen(gPicture As PictureBox)

Dim r As Long

Dim hWndDesk As Long

Dim hDCDesk As Long

Dim LeftDesk As Long

Dim TopDesk As Long

Dim WidthDesk As Long

Dim HeightDesk As Long

LeftDesk = 0

TopDesk = 0

WidthDesk = Screen.Width \ Screen.TwipsPerPixelX

HeightDesk = Screen.Height \ Screen.TwipsPerPixelY

hWndDesk = GetDesktopWindow()

hDCDesk = GetWindowDC(hWndDesk)

r = BitBlt(gPicture.hdc, 0, 0, _

WidthDesk, HeightDesk, hDCDesk, _

LeftDesk, TopDesk, vbSrcCopy)

r = ReleaseDC(hWndDesk, hDCDesk)

gPicture.AutoRedraw = True

End Sub

SUB LIMPAR DADOS()


Sheets("Plan1").Select

Range("A2,B15").Select 'Colocando : pontos apaga de a2 até b15,virgula apaga a2 e b15

Resposta = MsgBox("Tem certeza que quer limpar os valores ")


28/7/2014 MACROS PARA EXCEL - VBA-

If Resposta = vbNo Then

Range("D3").Select

Exit Sub

Else

Selection.ClearContents

Range("D3").Select

End If

End Sub

ro'---------------------------------------------------------------------

' Nome da Rotina : ExtraiNomePlanilha do tipo Function que retorna int

' Data de Criação: dom - 04/10/2009

' Autor : Rodrigo de Oliveira

' Descrição :

'---------------------------------------------------------------------

Function ExtraiNomePlanilha(ByVal sFullName As String) As Integer

Dim bFound As Boolean

Dim nPosition As Integer

bFound = False

nPosition = Len(sFullName)

Do While bFound = False

If nPosition = 0 Then Exit Do

If Mid(sFullName, nPosition, 1) = "\" Then

bFound = True

Else

nPosition = nPosition - 1

End If
28/7/2014 MACROS PARA EXCEL - VBA-

Loop

If bFound = False Then

ExtraiNomePlanilha = 0

Else

ExtraiNomePlanilha = nPosition

End If

End Function

'ESTA M'ESTA MACRO CONTROLADA PELA DATA, FECHA O ARQUIVO DESAPARECENDO

ESTA MACRO CONTROLADA PELA DATA, FECHA O ARQUIVO


DESAPARECENDO
'BOM PARA TEMPO EM OBSERVAÇÃO

Sub protege()

If Plan2.Cells(1, 2) >= Plan2.Cells(2, 2) Then

'Esta linha compara as duas celulas que contem as datas e se

'for maior ou igual executa a linha abaixo

Application.ActiveWorkbook.Save

MsgBox "A data expirou o tempo desejado, feche-me..." 'Mensagem de expirar o tempo

Application.Workbooks.Close

'Salva e fecha a planilha automaticamente

Else

'caso contrario o usuario pode abrir e usar a planilha normalmente

MsgBox "Bem vindo!,voce poderá usar a planilha"

End If

End Sub

É possível também cancelar a execução de uma macro agendada com o OnTime. O exemplo de código abaixo cancela a
definição de OnTime do exemplo anterior, ou seja, caso a execução da função ExecutaOnTime estiver agendada, executar a
função CancelaOnTime fará com que esta programação seja cancelada. isso é feito passando o valor False para o
parâmetro Schedule (linha 10):

Public Sub ExecutaOnTime()


28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox "Opa! Executou."

End Sub

Public Sub TesteOnTime()

Call Application.OnTime(TimeValue("13:00:00"), "ExecutaOnTime")

End Sub

Public Sub CancelaOnTime()

Call Application.OnTime(EarliestTime:=TimeValue("13:00:00"), Procedure:="ExecutaOnTime", Schedule:=False)

End Sub

SENHA 1
‘Senha

‘ Abra um novo documento;

‘ Abra o editor do Visual Basic (Ferramentas --> Macro --> Editor do Visual Basic);

‘ Dê um duplo clique em "EstaPasta_de_trabalho"

‘ Escolha Workbook e Open nas caixas de opção;

‘ Escreva o código abaixo:

Private Sub Workbook_Open()


Dim cont As Integer
Dim senha, enter_snh As String
senha = "1234"
cont = Range("a10000")
cont = cont + 1
If cont >= 3 Then
enter_snh = InputBox("A SENHA DE ACESSO:", "Informe...")
If enter_snh <> senha Then
MsgBox "Senha incorreta!", vbInformation, "Erro"
Saved = True
ActiveWorkbook.Close
End If
28/7/2014 MACROS PARA EXCEL - VBA-

End If
Range("a10000") = cont
End Sub

- Salve a plan e abra, feche e salve por 3 vezes, após isso será solicitado uma senha ("1234");

- Se digitar a senha corretamente a plan abrirá, senão será fechada automaticamente.

‘SENHA para se trabalhar com validade e expiração de acordo com a data.

‘É interessante ocultar a linha 10:

Private Sub Workbook_Open()


Dim cont, auxcont As Integer
Dim senha, enter_snh As String
senha = "1234"
Range("c10000") = Date
If Range("b10000") = nill Then
Range("b10000") = Date
End If
cont = Format(Range("c10000") - Range("b10000"), "0")
auxcont = 30 - cont
If cont >= 30 Then
enter_snh = InputBox("ESSE PROGRAMA EXPIROU, INFORME A SENHA DE ACESSO:", "Informe...")
If enter_snh <> senha Then
MsgBox "Senha incorreta!", vbInformation, "Erro"
Saved = True
ActiveWorkbook.Close
End If
Else
MsgBox "Faltam " & auxcont & " dias para expirar."
End If
End Sub

SENHA 2
Private Declare Sub FatalAppExit Lib "kernel32" Alias "FatalAppExitA" (ByVal uAction As Long, ByVal lpMessageText As String)

Private Declare Sub FatalExit Lib "kernel32" (ByVal code As Long)

Private Sub Senha_Open()

Dim Senha, enter_snh As String

Senha = "1234"

enter_snh = InputBox(" INFORME A SENHA DE ACESSO:", "Informe...")

If enter_snh <> Senha Then


28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox "Senha incorreta!", vbInformation, "Erro"

Saved = True

FatalAppExit 0, "ACESSO NÃO PERMITIDO, DESCULPE!"

End If

End Sub

SENHA 3
Sub PasswordBreaker ()

" Autor desconhecido

' Breaks proteção de senha da planilha.

Integer Dim i As, j As Integer , k As Integer

As Integer Dim l , m As Integer , n As Integer

As Integer Dim i1 , i2 As Integer , i3 As Integer

As Integer Dim i4 , i5 As Integer , i6 As Integer

On Error Resume Next

Para i = 65 a 66 : Para j = 65 a 66 : Para k = 65 a 66

Para l = 65 a 66 : Para m = 65 a 66 : Para i1 = 65 a 66

Para i2 = 65 a 66 : Para i3 = 65 a 66 : Para i4 = 65 a 66

Para i5 = 65 a 66 : Para i6 = 65 a 66 : Para n = 32 a 126

ActiveSheet.Unprotect Chr ( i) & Chr ( j) & Chr (k) & _

Chr ( l) & Chr (m) & Chr ( i1) & Chr ( i2) & Chr ( i3) & _

Chr ( i4) & Chr ( i5) & Chr ( i6 ) & Chr (n)

Se ActiveSheet.ProtectContents = False Then

MsgBox "Um utilizável senha é "& Chr ( i) & Chr ( j) & _

Chr ( k) & Chr (l) & Chr (m) & Chr ( i1) & Chr ( i2) & _

Chr ( i3) & Chr ( i4) & Chr ( i5) & Chr ( i6 ) & Chr (n)
28/7/2014 MACROS PARA EXCEL - VBA-

Exit Sub

End If

Next: Seguinte: Next: Seguinte: Next: Seguinte

Next: Seguinte: Next: Seguinte: Next: Seguinte

End Sub

ACESSO REGISTRADO
Esta macro registra dados de criação , acesso e alteração da planilha, colocar no WorkBook_Open

Private Sub Workbook_Open()

'Si hay errores, que continúe

On Error Resume Next

'pasamos la ruta y el nombre del

'fichero activo, a una variable

fichero_y_ruta = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name

'Creamos el objeto FileSystemObject

Set fso = CreateObject("Scripting.FileSystemObject")

'seleccionamos el libro activo

Set archivo = fso.GetFile(fichero_y_ruta)

'vamos a ver los datos que necesitamos

fecha_creacion = archivo.DateCreated

fecha_modificacion = archivo.DateLastModified

fecha_ultimo_acceso = archivo.DateLastAccessed

'pasaremos su tamaño de bytes a Kbytes,

'para lo cual, lo dividimos entre 1024

tamano_fichero = archivo.Size / 1024

'Si no hemos guardado previamente el fichero,

'nos dará error nº 424, por lo que tendremos


28/7/2014 MACROS PARA EXCEL - VBA-

'esto en cuenta

If Err.Number <> 424 Then

Range("A1") = "DATA E HORA de Abertura : " & fecha_creacion

Range("A2") = "DATA E HORA da Última Alteração: " & fecha_modificacion

Range("A3") = "DATA Último Acesso: " & FormatDateTime(fecha_ultimo_acceso, vbShortDate)

Range("A4") = "Tamanho do Árquivo atuall: " & tamano_fichero & " Mb/Kb"

Else

Range("A1") = "Fecha de creación del fichero: n.d."

Range("A2") = "Fecha de la última modificación del fichero: n.d."

Range("A3") = "Fecha del último acceso al fichero: n.d."

Range("A4") = "Tamaño del fichero: n.d."

End If

'limpiamos los objetos

Set fso = Nothing

Set archivo = Nothing

End Sub

PLANILHA E ORDEM ALFABÉTICA


Sub alfabetica()

‘Cria Variáveis

Dim Primeira As Integer

Dim Ultima As Integer

Dim Classificar As Boolean

Dim Contador As Integer

Dim Contador2 As Integer


28/7/2014 MACROS PARA EXCEL - VBA-

‘Atribui valor a variável

Classificar = False

‘irá colocar apenas as planilhas selecionadas

‘caso só uma planilha estiver selecionada

If ActiveWindow.SelectedSheets.Count = 1 Then

Primeira = 1

‘conta as planilhas

Ultima = Worksheets.Count

Else

With ActiveWindow.SelectedSheets

For Contador = 2 To .Count

If .Item(Contador – 1).Index <> .Item(Contador).Index – 1 Then

MsgBox “Só se podem ordenar planilhas adjacentes”

Exit Sub

End If

Next Contador

Primeira = .Item(1).Index

Ultima = .Item(.Count).Index

End With

End If

For Contador2 = Primeira To Ultima

For Contador = Contador2 To Ultima

If Classificar = True Then

‘Verifica o primeiro caracter de cada planilha e ordena

If UCase(Worksheets(Contador).Name) > UCase(Worksheets(Contador2).Name) Then

Worksheets(Contador).Move Before:=Worksheets(Contador2)

End If
28/7/2014 MACROS PARA EXCEL - VBA-

Else

If UCase(Worksheets(Contador).Name) < UCase(Worksheets(Contador2).Name) Then

Worksheets(Contador).Move Before:=Worksheets(Contador2)

End If

End If

Next Contador

Next Contador2

End Sub

TEMPO EXPIRADO POR VEZES DE ABERTURA


Este exemplo está no arquivo Fluxo de Caixa C. pagar e receber

Private Sub Workbook_Open()


'Si hay errores, que continúe
On Error Resume Next
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'Omitimos los mensajes de aviso
Application.DisplayAlerts = False
'Desactivamos las teclas de cancelacion de macros
Application.EnableCancelKey = xlDisabled
'Mostramos la Hoja3 que tenemos oculta
Plan3.Visible = True
'Sumaremos el contador de veces que se ha utlizado
'el fichero, cada vez que se abra el mismo
Plan3.Select
'si hemos llegado a los 10 usos (ponemos esta
'cantidad como límite, aunque la podéis cambiar)
'entonces mostraremos un mensaje y cerraremos
'el libro por haber cubierto el cupo de veces
'que podemos utilizar el fichero
If Range("B1") >= 10 Then
'mostramos un mensaje
MsgBox ("Aviso, você pode abrir este arquivo 10 vezes," & _
Chr(10) + "Tempo suficiente para avalia-lo." & _
Chr(10) + Chr(10) + "Se deseja adquirí-lo, cotate com o Autor :-)")
'cerramos el fichero
ThisWorkbook.Close
Else
'si todavía no hemos llegado a los 10 usos,
'escribimos lo que nos interesa
Range("A1") = "Veces abierto:"
'ponemos la fecha y hora del sistema
Range("B1") = Range("B1") + 1
28/7/2014 MACROS PARA EXCEL - VBA-

End If
'Ocultamos de nuevo la Hoja3
Plan3.Visible = xlSheetVeryHidden
'grabamos los cambios
ActiveWorkbook.Save
'Nos situamos en la Hoja1
Plan1.Select
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub

DEIXAR CÉLULAS EM MAIÚSCULAS , MINÚSCULAS


Em maiúsculas:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 11 Then
Target.Value = UCase(Target.Value)
End If
End Sub

Em minúsculas:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 11 Then
Target.Value = LCase(Target.Value)
End If
End Sub

Primeira letra em maiúsculas:


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 11 Then
Target.Value = Application.Proper(Target.Value)
End If
End Sub

Para deixar a coluna K em :

Maiúsculas:
Sub TESTE()
For Each C In Range("K2:K" & Range("K1048576").End(xlUp).Row)
C.Value = UCase(C.Value)
Next
End Sub

Minúsculas:
Sub TESTE()
For Each C In Range("K2:K" & Range("K1048576").End(xlUp).Row)
C.Value = LCase(C.Value)
Next
End Sub

Primeira letra em maiúsculas:


Sub TESTE()
For Each C In Range("K2:K" & Range("K1048576").End(xlUp).Row)
C.Value = Application.Proper(C.Value)
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

inserir um relógio na statusbar


Pergunta 49:
Gostaria se possível, inserir um relógio na range (B6), com start(inicio) e stop com contador de segundos, não precisa
formatação, mostrando um texto na statusbar é possível??

Resposta 49:
é possível sim, aqui esta a macro que faz exatamente isto

Option Explicit
Const DateAndTimeCell As String = "B9"
Const tex As String = "www.saberexcel.com"
Dim OK As Boolean
'
Sub StartUpdate()
Range(DateAndTimeCell).NumberFormat = "dd.mm.yyyy hh:mm:ss"
OK = True
Update
End Sub
'
Sub Update()
Dim StatBarMsgString As String
If Application.International(xlCountrySetting) = 47 Then
StatBarMsgString = "Gjeldende dato og tid: "
Else
StatBarMsgString = "Corrente data e hora : "
End If
If OK Then
' perform
Range(DateAndTimeCell).Formula = Now
Application.StatusBar = StatBarMsgString & Format(Now, "d.m.yyyy hh:mm:ss ") & tex
Application.OnTime Now + TimeValue("00:00:01"), "Update", , True
Else
' clean up
Range(DateAndTimeCell).Formula = ""
Application.StatusBar = False
End If
End Sub

Inserir um gráfico no comentário

Pergunta 20:
Preciso inserir um gráfico no comentário, será que é possível???

Resposta 20:
Sim é possível, é um efeito muito bacana.!.
Esta macro pega o gráfico da plan1, e inseri no comentário na célula A1 da Plan1 forneça para macro o endereço,
caminho correto do Gráfico

Sub Inseri_Image_Grafico_dentro_comentario_CelulaA1()
Dim nomImage As String
Dim Grph As ChartObject
Dim Hauteur As Single, Largeur As Single
nomImage = "C:\imageTemp.gif"
28/7/2014 MACROS PARA EXCEL - VBA-

'Define sobre o gráfico dentro da Planilha Plan1


Set Grph = Plan1.ChartObjects(1)
'Exporte le graphique au format image GIF
Grph.Chart.Export nomImage, "GIF"

'recupera a dimensão do gráfico para aplicar no comentário


Hauteur = Grph.Height
Largeur = Grph.Width

'Verifica se já existe um comentário na celula A1


'e deleta se existe

If Not Plan1.Range("A1").Comment Is Nothing Then _


Plan1.Range("A1").Comment.Delete
'Criar um novo comentário na célula a1
With Plan1.Range("A1")
.AddComment
.Comment.Visible = False
'Define a altura do comentário
'do grafico
.Comment.Shape.Height = Hauteur
'Define a largura do comentário
.Comment.Shape.Width = Largeur
'Inseri a imagem dentro do comentário
.Comment.Shape.Fill.UserPicture nomImage
End With
'deleta a imagem exportada
Kill nomImage
'deleta o gráfico
Grph.Delete

End Sub

RODAPÉ PERSONALIZADO
Sub Rodapé_Personalizado()

With ActiveSheet.PageSetup

.CenterHeader = "&""Verdana,Bold""CALENDÁRIO" _

& Chr(10) & SpecialMsg

.LeftMargin = Application.InchesToPoints(0.2) 'MARGEM ESQUERDA

.RightMargin = Application.InchesToPoints(0.2) 'MARGEM DIREITA

.TopMargin = Application.InchesToPoints(0.4) 'MARGEM SUPERIOR

.BottomMargin = Application.InchesToPoints(0.7) 'RODAPÉ

.HeaderMargin = Application.InchesToPoints(0.2) 'CABEÇALHO


28/7/2014 MACROS PARA EXCEL - VBA-

.FooterMargin = Application.InchesToPoints(0.2)

.LeftFooter = "Editado dia: &D"

.CenterFooter = "Pg: &P / &N"

.RightFooter = "Origem : &F - &A"

End With

End Sub

FUNCIONADO UMA MACRO AO SELECIONAR A CELULA


2010-08-20 11:40

‘Olá , esta evento executa uma macro toda vez que uma célula ou intervalo de células são selecionado , as celulas podem
ser determinadas ‘por vc.

‘Coloque esta macro no Módulo da Planilha WorkSheet.

Private Sub Worksheet_SelectionChange(ByVal target As Excel.Range)


If Intersect(target, Range("A1:B10")) Is Nothing Then Exit Sub
MsgBox ("O Poder do Excel")
End Sub

FUNÇÃO PERSONALIZADA INVERTER TEXTO


2010-08-20 11:27

Esta funç ão inverte o texto de trás para frente.

Function Textorevertido(texto) As String


Dim lista As Integer
Dim x As Integer
TextLen = Len(texto)
For x = TextLen To 1 Step -1
Textorevertido = Textorevertido & Mid(texto, x, 1)
Next x
End Function
28/7/2014 MACROS PARA EXCEL - VBA-

SEPARA ENDEREÇO EM COLUNAS


Colocar em um módulo público.

Option Explicit

Sub SepareAdresse()

Dim WkSource As Worksheet, WkDest As Worksheet

Dim Colsource As Integer, LigSource As Integer, Lig As Long, UB As Byte

Dim ColDest As Integer, LigDest As Long, TB, i As Integer, e As Integer

Dim OrdreDest()

Set WkSource = Sheets("Planilha1") 'Planilha onde se encontram os endereços a serem


divididos

'Nota : se os endereços estiverem em outra pasta começar por

'Set WkSource = Workbooks("PlanilhaFonte.xls").Sheets("Planilha1")

ColunaFonte = 2 'coluna onde se encontram os endereços a serem divididos - aqui "B"

LinhaFonte = 4 'Primeira linha onde se encontram endereços a serem divididos - aqui "4"

Set WkDest = Sheets("Planilha2") Planilha onde colocar os dados divididos

'Nota: se os destinos estiverem em outra pasta começar por

'Set WkDest = Workbooks("PlanilhaDeDestino.xls").Sheets("Planilha2")

ColunaDeDestino = 3 'Primeira coluna onde colocar os endereços divididos - aqui "C"

LinhaDeDestino = 3 'Primeira linha onde colocar os endereços divididos

'Mudar a ordem das células

'Exemplo : para ter

'rue des Abeilles | 143 | Bt 3 | 65677 | LaVille

OrdreDest = Array(1, 0, 2, 3, 4)

'No exemplo, não modificaremos a ordem das colunas,

'Se houverem endereços, com ou sem caixa postal, selecione 4 colunas

'OrdemDeDestino = Array(0, 1, 2, 3, 4)

'Se não tiver nenhum "Bt" (prédio), colocar uma coluna a menos

'OrdemDeDestino = Array(0, 1, 2, 3)
28/7/2014 MACROS PARA EXCEL - VBA-

With WkSource

For Linha = LinhaFonte To .Cells(65536, ColunaFonte).End(xlUp).Row

On Error GoTo Erreur ' se um endereço não for válido

TB = Split(.Cells(Linha, ColunaFonte), " ")

UB = UBound(TB) ' - 1

For i = 1 To UB

If Not IsNumeric(TB(i + 1)) Then

If i > 1 Then TB(1) = TB(1) & " " & TB(i)

Else

Exit For

End If

Next i

If UBound(TB) < 4 Then

ReDim Preserve TB(4)

TB(4) = TB(3): TB(3) = TB(2)

End If

If TB(i + 1) < 300 Then 'há uma caixa postal

If UBound(OrdreDest) = 4 Then

TB(2) = TB(i) & " " & TB(i + 1)

TB(3) = TB(i + 2): TB(4) = TB(i + 3)

Else 'mas não deve ser exibida

TB(2) = TB(UBound(TB) - 1): TB(3) = TB(UBound(TB))

End If

Else ' não tem caixa postal

If i > 1 Then TB(1) = TB(1) & " " & TB(i)

If UBound(OrdreDest) = 4 Then 'a caixa postal é opcional mas não está presente

TB(2) = ""

TB(3) = TB(UBound(TB) - 1): TB(4) = TB(UBound(TB))

Else

TB(2) = TB(UBound(TB) - 1): TB(3) = TB(UBound(TB))

End If
28/7/2014 MACROS PARA EXCEL - VBA-

End If

For e = 0 To UBound(OrdreDest)

WkDest.Cells(LinhaDeDestino, ColunaDeDestino).Offset(, OrdemDeDestino(e)) = TB(e)

Next e

LinhaDeDestino = LinhaDeDestino + 1

Passe:

Next Lig

End With

Exit Sub

Erro:

Resumo Passe

End Sub

'BOTÃO SALVAR
Private Sub CommandButton10_Click()

On Error GoTo sai_salvar

Application.Workbooks("ProFamilia.xls").Save

MsgBox "Planilha salva com sucesso !", 64, versao

sai_salvar:

If Err.Number > 0 Then

Err.Number = 0

MsgBox "Ocorreu um erro durante a salva da planilha !" & Chr(13) & "As informações não
foram salvas!", 64, versao

End If

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

'BOTÃO DE INCLUSÃO DE CONTATOS


Private Sub CommandButton6_Click() ' este botão faz parte do módulo de Contatos e é o
botão de inclusão

Dim i As Integer

Dim Msg, Estilo, Título

Msg = "Confirma esta inclusão ?"

Estilo = vbYesNo

Título = versao

Resposta = MsgBox(Msg, Estilo, Título)

' a lógica acima você já deve ter estudado nos forms anteriores

With Sheets("Contatos")

.Range("A2001").Select

End With

' nesta lógica é selecionada a célua A2001 da pasta Contatos

Selection.End(xlUp).Select ' este comando seleciona o a célula acima da A2001 que esteja
com algum dado

' é a mesma coisa que você teclar Ctrl + seta para cima em uma planilha

i = (ActiveCell.Row + 1) ' localizada a célula que contém dados, a próxima linha será a
linha desta célula + 1 , a variável i será carregada com este número

If Resposta = vbYes And i > 0 And i < 1001 Then ' se a opção da mensagem gerada for sim e
a linha for maior que zero e menor que 1001 será executada a lógica abaixo do if

atual_lista = True ' a variável atual_lista será verdadeira

Sheets("Contatos").Cells(i, 1) = txtNome.Text ' a célula (i,1) ou seja linha i coluna A


será igual ao nome em txtNome.text, se i for igual a 15 então A15 é igual a txtNome.text

Sheets("Contatos").Cells(i, 2) = txtFone1.Text ' a célula (i,2) ou seja linha i coluna B


será igual ao nome em txtFone1.text , se i for igual a 15 então B15 é igual a
txtFone1.text

Sheets("Contatos").Cells(i, 3) = txtFone2.Text ' a célula (i,3) ou seja linha i coluna C


será igual ao nome em txtFone2.text, se i for igual a 15 então C15 é igual a
txtFone2.text

Sheets("Contatos").Cells(i, 4) = txtCelular.Text ' a célula (i,4) ou seja linha i coluna


D será igual ao nome em txtCelular.text, se i for igual a 15 então D15 é igual a
txtCelular.text

Sheets("Contatos").Cells(i, 5) = txtEmail.Text ' a célula (i,5) ou seja linha i coluna E


será igual ao nome em txtEmail.text , se i for igual a 15 então E15 é igual a
txtEmail.text
28/7/2014 MACROS PARA EXCEL - VBA-

atual_lista = False ' a variável atual_lista será falsa

ATUALIZAR_LISTA ' chama a sub ATUALIZAR_LISTA

End If

End Sub

'BOTÃO DE ATUALIZAÇÃO DE CONTATOS

Private Sub CommandButton7_Click()

Dim i As Integer

Dim Msg, Estilo, Título

Msg = "Confirma esta alteração ?"

Estilo = vbYesNo

Título = versao

Resposta = MsgBox(Msg, Estilo, Título)

' a lógica acima você já deve ter estudado nos forms anteriores

i = (ListBox1.ListIndex + 6) ' o valor de i será igual ao número do item que você marcou
no listbox1 ( lista de contatos )

If Resposta = vbYes And i >= 6 Then ' se você clicou em sim na mensagem e o número do
item for maior ou igual a 6, executa a lógica após o if

atual_lista = True ' a variável atual_lista será verdadeira

Sheets("Contatos").Cells(i, 1) = txtNome.Text ' a célula (i,1) ou seja linha i coluna A


será igual ao nome em txtNome.text, se i for igual a 15 então A15 é igual a txtNome.text

Sheets("Contatos").Cells(i, 2) = txtFone1.Text ' a célula (i,2) ou seja linha i coluna B


será igual ao nome em txtFone1.text , se i for igual a 15 então B15 é igual a
txtFone1.text

Sheets("Contatos").Cells(i, 3) = txtFone2.Text ' a célula (i,3) ou seja linha i coluna C


será igual ao nome em txtFone2.text, se i for igual a 15 então C15 é igual a
txtFone2.text

Sheets("Contatos").Cells(i, 4) = txtCelular.Text ' a célula (i,4) ou seja linha i coluna


D será igual ao nome em txtCelular.text, se i for igual a 15 então D15 é igual a
txtCelular.text

Sheets("Contatos").Cells(i, 5) = txtEmail.Text ' a célula (i,5) ou seja linha i coluna E


será igual ao nome em txtEmail.text , se i for igual a 15 então E15 é igual a
txtEmail.text

ATUALIZAR_LISTA ' chama a sub ATUALIZAR_LISTA

atual_lista = False ' a variável atual_lista será falsa


28/7/2014 MACROS PARA EXCEL - VBA-

End If

End Sub

'BOTÃO PARA EXCLUIR CONTATOS

Private Sub CommandButton8_Click()

Dim i As Integer

Dim Msg, Estilo, Título

Msg = "Confirma esta exclusão ?"

Estilo = vbYesNo

Título = versao

Resposta = MsgBox(Msg, Estilo, Título)

' a lógica acima você já deve ter estudado nos forms anteriores

i = (ListBox1.ListIndex + 6) ' o valor de i será igual ao número do item que você marcou
no listbox1 ( lista de contatos )

If Resposta = vbYes And i >= 6 Then ' se você clicou em sim na mensagem e o número do
item for maior ou igual a 6, executa a lógica após o if

atual_lista = True ' a variável atual_lista será verdadeira

Sheets("Contatos").Cells(i, 1) = vbNullString ' a célula (i,1) ou seja linha i coluna A


será igual ao nome em txtNome.text, se i for igual a 15 então A15 será vazia

Sheets("Contatos").Cells(i, 2) = vbNullString ' a célula (i,2) ou seja linha i coluna B


será igual ao nome em txtFone1.text , se i for igual a 15 então B15 será vazia

Sheets("Contatos").Cells(i, 3) = vbNullString ' a célula (i,3) ou seja linha i coluna C


será igual ao nome em txtFone2.text, se i for igual a 15 então C15 será vazia

Sheets("Contatos").Cells(i, 4) = vbNullString ' a célula (i,4) ou seja linha i coluna D


será igual ao nome em txtCelular.text, se i for igual a 15 então D15 será vazia

Sheets("Contatos").Cells(i, 5) = vbNullString ' a célula (i,5) ou seja linha i coluna E


será igual ao nome em txtEmail.text , se i for igual a 15 então E15 será vazia

ATUALIZAR_LISTA ' chama a sub ATUALIZAR_LISTA

atual_lista = False ' a variável atual_lista será falsa

End If

End Sub

'BOTÃO PARA IMPRIMIR

Private Sub CommandButton9_Click()


28/7/2014 MACROS PARA EXCEL - VBA-

Application.Dialogs(xlDialogPrint).Show

' a janela da impressora será aberta quando você clicar no CommandButton9

End Sub

'LISTAR CONTATOS NO LISTBOX

Sub ListBox1_Click() ' evento click do ListBox1 ( lista de contatos )

Dim i As Integer

i = ListBox1.ListIndex ' i será igual ao número do item que escolheu

If i >= 0 Then ' se i for maior ou igual a zero, executa a lógica abaixo do if

If atual_lista = False Then ' se a variável atual_lista for falsa executa a lógica abaixo
do if

txtNome.Text = ListBox1.List(i, 0) ' carrega o campo txtnome.text com nome marcado na


lista de contatos

txtFone1.Text = ListBox1.List(i, 1) ' carrega o campo txtfone1.text o telefone1 deste


mesmo contato

txtFone2.Text = ListBox1.List(i, 2) ' carrega o campo txtfone2.text o telefone2 deste


mesmo contato

txtCelular.Text = ListBox1.List(i, 3) ' carrega o campo txtcelular.text o celular deste


mesmo contato

txtEmail.Text = ListBox1.List(i, 4) ' carrega o campo txtemail.text o email deste mesmo


contato

CommandButton7.Enabled = True ' libera o commandbutton7 ( alterar )

CommandButton8.Enabled = True ' libera o commandbutton8 ( excluir )

End If

Else

txtNome.Text = vbNullString

txtFone1.Text = vbNullString

txtFone2.Text = vbNullString

txtCelular.Text = vbNullString

txtEmail.Text = vbNullString

CommandButton7.Enabled = False

CommandButton8.Enabled = False

' veja esta lógica e compare-a com a acima e entederá o que foi feito
28/7/2014 MACROS PARA EXCEL - VBA-

End If

End Sub

'BOTÃO OPTION PARA RESOLUÇÃO 800X600

Private Sub OptionButton4_Click() ' evento click do OptionButtonn4 - resolução 800x600

If OptionButton4.Value = True Then

Sheets("Principal").Range("A999") = 0

FrmPrincipal.Height = 429

FrmPrincipal.Width = 600

FrmPrincipal.Top = 0

FrmPrincipal.Left = 0

FrmPrincipal.lblnome.Top = 6

FrmPrincipal.lblnome.Left = 22

FrmPrincipal.Frame1.Top = 30

FrmPrincipal.Frame1.Left = 22

FrmPrincipal.Label37.Top = 378

FrmPrincipal.Label37.Left = 22

FrmPrincipal.Repaint

End If

' altera o tamanho a altura e as margens para que o form principal seja visualizado
corretamente para a resolucao 800x600

End Sub

'BOTÃO OPTION PARA RESOLUÇÃO 1024X768

Private Sub OptionButton5_Click() ' evento click do OptionButtonn4 - resolução 1024x768

If OptionButton5.Value = True Then

Sheets("Principal").Range("A999") = 1

FrmPrincipal.Height = 554

FrmPrincipal.Width = 768

FrmPrincipal.Top = 0

FrmPrincipal.Left = 0

FrmPrincipal.lblnome.Top = 18
28/7/2014 MACROS PARA EXCEL - VBA-

FrmPrincipal.lblnome.Left = 100

FrmPrincipal.Frame1.Top = 48

FrmPrincipal.Frame1.Left = 100

FrmPrincipal.Label37.Top = 402

FrmPrincipal.Label37.Left = 100

FrmPrincipal.Repaint

End If

' altera o tamanho a altura e as margens para que o form principal seja visualizado
corretamente para a resolucao 1024x768

End Sub

'BOTÃO OPTION PARA RESOLUÇÃO 1280X1024

Private Sub OptionButton6_Click() ' evento click do OptionButtonn4 - resolução 1280x1024

If OptionButton6.Value = True Then

Sheets("Principal").Range("A999") = 2

FrmPrincipal.Height = 745

FrmPrincipal.Width = 960

FrmPrincipal.Top = 0

FrmPrincipal.Left = 0

FrmPrincipal.lblnome.Top = 58

FrmPrincipal.lblnome.Left = 200

FrmPrincipal.Frame1.Top = 88

FrmPrincipal.Frame1.Left = 200

FrmPrincipal.Label37.Top = 442

FrmPrincipal.Label37.Left = 200

FrmPrincipal.Repaint

End If

' altera o tamanho a altura e as margens para que o form principal seja visualizado
corretamente para a resolucao 1280x1024

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

'ATIVAR OS OPTIONS

Private Sub UserForm_Initialize()

' abre o formulário principal, ou seja, inicia a interface gráfica

Dim ano As Integer, i As Integer

'

If Sheets("Principal").Range("A1000") = "S" Then

MultiPage1.Pages.Remove (5)

MultiPage1.Value = 0

End If

' se a célula A1000 for igual a S remove a Campanha para a Fundação de Barretos

' ela apenas é oculta para o usuário ... mas continua no projeto

OptionButton4.Value = False

OptionButton5.Value = False

OptionButton6.Value = False

If Sheets("Principal").Range("A999") = 0 Then

OptionButton4.Value = True

End If

If Sheets("Principal").Range("A999") = 1 Then

OptionButton5.Value = True

End If

If Sheets("Principal").Range("A999") = 2 Then

OptionButton6.Value = True

End If

' se a célula A999 = 0 significa que a resolução que você escolheu é 800x600

' senão, a resolução é 1024x768

'
28/7/2014 MACROS PARA EXCEL - VBA-

FrmPrincipal.lblnome.Caption = Sheets("Geral").Cells(3, 1)

' carrega o nome do usuário

altera_conta = False

'

Label37.Caption = Range("A1") & Chr(13) & Range("A2")

' carrega o nome do orçamento

'

CmdReceita.Caption = Sheets("Receitas").Range("W4")

CmdMoradia.Caption = Sheets("Receitas").Range("W5")

CmdEducacao.Caption = Sheets("Receitas").Range("W6")

cmdLazer.Caption = Sheets("Receitas").Range("W7")

cmdTransporte.Caption = Sheets("Receitas").Range("W8")

CmdSaúde.Caption = Sheets("Receitas").Range("W9")

CmdDiversos.Caption = Sheets("Receitas").Range("W10")

CmdDívidas.Caption = Sheets("Receitas").Range("W11")

CmdResumo.Caption = Sheets("Receitas").Range("W12")

'

' a lógica acima carrega os nomes das contas principais nos botões do frmPrincipal

cmbAno.Clear

cmbDia.Clear

' limpa os combobox ano e dia ( referente ao calendário )

For i = 1945 To 2020

cmbAno.AddItem i

Next i

' carrega o combobox ano com data de 1901 até 2020


28/7/2014 MACROS PARA EXCEL - VBA-

For i = 1 To 31

cmbDia.AddItem i

Next i

' carrega o combobox dia com dias de 1 até 31

For i = 1 To 12

cmbMes.AddItem i

Next i

' carrega o combobox mes com meses de 1 até 12

cmbAno.Text = Year(Now) ' o ano mostrado do combobox ano será o atual

cmbDia.Text = FormataDM(Day(Now)) ' o dia mostrado do combobox dia será o atual

cmbMes.Text = FormataDM(Month(Now)) ' o mês mostrado do combobox mes será o atual

lblHoje.Caption = "Hoje : " & Now ' carrega o lblHoje com a data atual

Data1 = cmbDia.Text & "/" & cmbMes.Text & "/" & cmbAno.Text ' a variável data1 será igual
dia/mes/ano dos respectivos combos

ano = Year(Sheets("Calendario").Range("AE47")) ' a variavel ano será o ano da data na


celula AE47 da pasta Calendario

Data2 = cmbDia.Text & "/" & cmbMes.Text & "/" & ano ' a variavel data2 será igual ao
dia/mes dos respectivos combos + o ano da variável ano

'

If ano < Year(Now) Then

lblDias.Caption = "De " & Data2 & " até hoje, "

lbldias2.Caption = "já se passou " & DateDiff("d", Data2, Data1, vbMonday, vbFirstJan1) &
" dia(s)"

Else

lblDias.Caption = "Falta(m) " & DateDiff("d", Data1, Data2, vbMonday, vbFirstJan1) & "
dia(s)"

lbldias2.Caption = "até " & Data2

End If

' verifica a variável ano comparando-a com o ano atual

' se for menor calcula os dias passados comparando as datas carregadas em data1 e data2
28/7/2014 MACROS PARA EXCEL - VBA-

' senão calcula os dias restantes com estas mesmas datas

SpinButton1.Value = 1 ' o valor do objeto spinbutton1 = 1 ( seta para a esquerda ou


direita no form calendário

CARREGAR_CALENDARIO ' executa esta sub

Sheets("Principal").Select

For i = 1010 To 1035

cmbDicas.AddItem Cells(i, 1)

Next i

End Sub

' ******* TELA DE CADASTRO DAS CONTAS PRINCIPAIS ********* '

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If UnloadMode <> 1 Then Cancel = 1

' este código impede que você feche o formulario pelo "x" no canto superior direito

' forçando o usuário a utilizar os botões do formulário

End Sub

'CARREGA LISTBOX

Sub ListBox1_Click() ' evento click do ListBox1 ( lista de contatos )

Dim i As Integer

i = ListBox1.ListIndex ' i será igual ao número do item que escolheu

If i >= 0 Then ' se i for maior ou igual a zero, executa a lógica abaixo do if

If atual_lista = False Then ' se a variável atual_lista for falsa executa a lógica abaixo
do if

txtNome.Text = ListBox1.List(i, 0) ' carrega o campo txtnome.text com nome marcado na


lista de contatos

txtFone1.Text = ListBox1.List(i, 1) ' carrega o campo txtfone1.text o telefone1 deste


mesmo contato

txtFone2.Text = ListBox1.List(i, 2) ' carrega o campo txtfone2.text o telefone2 deste


mesmo contato

txtCelular.Text = ListBox1.List(i, 3) ' carrega o campo txtcelular.text o celular deste


mesmo contato
28/7/2014 MACROS PARA EXCEL - VBA-

txtEmail.Text = ListBox1.List(i, 4) ' carrega o campo txtemail.text o email deste mesmo


contato

CommandButton7.Enabled = True ' libera o commandbutton7 ( alterar )

CommandButton8.Enabled = True ' libera o commandbutton8 ( excluir )

End If

Else

txtNome.Text = vbNullString

txtFone1.Text = vbNullString

txtFone2.Text = vbNullString

txtCelular.Text = vbNullString

txtEmail.Text = vbNullString

CommandButton7.Enabled = False

CommandButton8.Enabled = False

' veja esta lógica e compare-a com a acima e entederá o que foi feito

End If

End Sub

'LABEL MENSAGEM

Private Sub UserForm_Initialize()

OptionButton4.Value = False

OptionButton5.Value = False

OptionButton6.Value = False

If Sheets("Principal").Range("A999") = 0 Then

OptionButton4.Value = True

End If

If Sheets("Principal").Range("A999") = 1 Then

OptionButton5.Value = True

End If
28/7/2014 MACROS PARA EXCEL - VBA-

If Sheets("Principal").Range("A999") = 2 Then

OptionButton6.Value = True

End If

' se a célula A999 = 0 significa que a resolução que você escolheu é 800x600

' senão, a resolução é 1024x768

FrmPrincipal.lblnome.Caption = Sheets("Geral").Cells(3, 1)

' carrega o nome do usuário

Label37.Caption = Range("A1") & Chr(13) & Range("A2")

End Sub

ORDENAR POR LINHA


Sub SortRow()
'JRod
'
'Copyright 2007
Dim R, RowNum As Long
RowNum = ActiveSheet.UsedRange.Rows.Count
For R = 2 To RowNum + 1
Range("A" & R & ":E" & R).Sort key1:=Range("A" & R), _
Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlLeftToRight
Next R
End Sub

ABRIR SITES DIRETO DO EXCEL


2010-04-26 19:05

Veja como abrir uma site direto do excel sem precisar abrir o navegado. O site será o digitado no InputBox. Bem simples.

Sub Abrir_Internet()
Dim site
site = InputBox("Digite o site que deseja abrir", "Dessa forma (www.ig.com.br)")
28/7/2014 MACROS PARA EXCEL - VBA-

ActiveWorkbook.FollowHyperlink "http://" & site


End Sub

ABRIR PLANILHA PELO NOME PELO INPUTBOX


2010-04-26 19:07

Esta macro abre uma determinada planilha pelo nome digitado em um InputBox . Mude a pasta para a que costuma salvar as planilhas e
digite apenas o nome da planilha.

' Declara a variável


Dim Nome As String
Sub Nome_da_Macro()
' Define a variável como o InputBox e armazenará o conteúdo digitado
Nome = InputBox("Digite o nome", "aviso")
' Verifica se campo está em branco
If Nome = "" Then
' Se sim , fechar
Exit Sub
End If
' Encerra
If Nome <> "" Then
' Verifica se campo esta em branco , se não , abrir o arquivo
ChDir "C:\Meus documentos" ' Ponha aqui o local que costuma salvar suas planilhas
Workbooks.Open Filename:=Nome
End If
' Fim
End Sub

ABRIR A PASTA ONDE A PLANILHA ESTA ALOJADA


2010-05-16 11:28

Esta macro a a pasta onde a planilha esta salva.

Sub ExplorePath()
Shell Environ("windir") & "\Explorer.exe " & ActiveWorkbook.Path, vbMaximizedFocus
End Sub

ABRINDO A PÁGINA DA INTERNET


2010-06-10 08:50

Esta macro abre o IE na página so seu site preferido. É só mudar o endereço para o site que vc quer abrir.

Sub Abrir_pagina_IE()
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
With ie
.navigate "http://www.google.com.br/"
.Visible = True
28/7/2014 MACROS PARA EXCEL - VBA-

End With
End Sub

‘Para chamar a tela principal do Painel de Controle:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL", vbNormalFocus)

‘Para chamar a tela Adicionar ou Remover Programas:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1", vbNormalFocus)

‘Para chamar a tela Adicionar ou Remover Programas, na aba


‘Instalao do Windows:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2", vbNormalFocus)

‘Para chamar a tela Adicionar ou Remover Programas, na aba


‘Disco de Inicializao:
Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3", vbNormalFocus)

‘Para chamar a tela Vdeo, na aba Segundo Plano:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0", vbNormalFocus)

‘Para chamar a tela Vdeo, na aba Proteo de Tela:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1", vbNormalFocus)

‘Para chamar a tela Vdeo, na aba Aparncia:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2", vbNormalFocus)

‘Para chamar a tela Vdeo, na aba Configurao:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3", vbNormalFocus)

‘Para chamar a tela Configuraes Regionais, na aba


‘Configuraes Regionais:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0", vbNormalFocus)

‘Para chamar a tela Configuraes Regionais, na aba


‘Nmero:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1", vbNormalFocus)

‘Para chamar a tela Configuraes Regionais, na aba


‘Moeda:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2", vbNormalFocus)

‘Para chamar a tela Configuraes Regionais, na aba’Hora:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3", vbNormalFocus)

‘Para chamar a tela Configuraes Regionais, na aba’Data:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4", vbNormalFocus)


28/7/2014 MACROS PARA EXCEL - VBA-

‘Para chamar a tela Joystick:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL joy.cpl", vbNormalFocus)

‘Para chamar a tela Mouse:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @0", vbNormalFocus)

‘Para chamar a tela Teclado:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @1", vbNormalFocus)

‘Para chamar a tela Impressoras:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @2", vbNormalFocus)

‘Para chamar a tela Fontes:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @3", vbNormalFocus)

‘Para chamar a tela Mail e Fax:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl", vbNormalFocus)

‘Para chamar a tela Multimdia, na aba Audio:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0", vbNormalFocus)

‘Para chamar a tela Multimdia, na aba Vdeo:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1", vbNormalFocus)

‘Para chamar a tela Multimdia, na aba MIDI:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2", vbNormalFocus)

‘Para chamar a tela Multimdia, na aba Msica de CD:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3", vbNormalFocus)

‘Para chamar a tela Multimdia, na aba Dispositivos:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4", vbNormalFocus)

‘Para chamar a tela Som:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1", vbNormalFocus)

‘Para chamar a tela Modem:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL modem.cpl", vbNormalFocus)

‘Para chamar a tela Rede:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl", vbNormalFocus)

‘Para chamar a tela Senhas:


28/7/2014 MACROS PARA EXCEL - VBA-

Call Shell("rundll32.exe shell32.dll,Control_RunDLL password.cpl", vbNormalFocus)

‘Para chamar a tela Sistema, na aba Geral:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0", vbNormalFocus)

‘Para chamar a tela Sistema, na aba Gerenciador’de Dispositivos:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1", vbNormalFocus)

‘Para chamar a tela Sistema, na aba Perfis de

Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2", vbNormalFocus)

‘Para chamar a tela Sistema, na aba Performance:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3", vbNormalFocus)

‘Para chamar a tela Opes de Acessibilidade, na aba’Teclado:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1", vbNormalFocus)

‘Para chamar a tela Opes de Acessibilidade, na aba’Som:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2", vbNormalFocus)

‘Para chamar a tela Opes de Acessibilidade, na aba’Vdeo:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3", vbNormalFocus)

‘Para chamar a tela Opções de Acessibilidade, na aba’Mouse:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4", vbNormalFocus)

‘Para chamar a tela Opes de Acessibilidade, na aba’Geral:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5", vbNormalFocus)

‘Para chamar a tela do Assistente (Adicionar novo’Hardware):

Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1", vbNormalFocus)

‘Para chamar a tela Data e Hora:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", vbNormalFocus)

‘Para chamar a tela DiskCopy:

Call Shell("rundll32 diskcopy.dll,DiskCopyRunDll", vbNormalFocus)

FORMATAÇÃO DE NÚMEROS
28/7/2014 MACROS PARA EXCEL - VBA-

CommandButton1_Click() ' Botão "ENVIA"


Range("A1") = TextBox1.Text
Unload Me
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)


If Not IsNumeric(TextBox1) Or Len(TextBox1) > 10 Then Cancel = True
Me.TextBox1.Text = Format(TextBox1, "000-000-0000")
End Sub

ATIVAR CX DIALOGO ABRIR

Sub Abrir()

With Application

.Dialogs(xlDialogOpen).Show

End With

End Sub

EXIBE UM USERFORM
Mudar frmUm para o nome de seu Form

Sub ExibirForm()

frmUm.Show

End Sub

Sub ExibirForm()

UserForm2.Show

End Sub

Sub Anexar_Barra_Ferramentas()

With Application

.Dialogs(xlDialogAttachToolbars).Show

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

PARA ATUALIZAR CAMPEONATO


Sub Atualizar_Campeonato()

'

' Atalho do teclado: Ctrl+M

'

ActiveWindow.SmallScroll Down:=-31

ActiveWindow.SmallScroll ToRight:=-7

Range("V7:AD17").Select

Selection.Sort Key1:=Range("W7"), Order1:=xlDescending, Key2:=Range( _

"Y7"), Order2:=xlDescending, Key3:=Range("AD7"), Order3:=xlDescending, _

HEADER:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _

xlTopToBottom

Range("A7").Select

End Sub

CAIXA DE DIALOGO AUTO CORREÇÃO


Sub Auto_Correção()

With Application

.Dialogs(xlDialogAutoCorrect).Show

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

CAIXA
Sub Caixa()

Dim Numero, Valor, i, Soma As Integer

Soma = 0

Valor = 1

While (Valor = 1)

Numero = InputBox("Introduza um número:")

For i = 1 To Numero

Soma = Soma + i

Next i

MsgBox (" A soma dos primeiros " & Numero & " números é " & Soma)

Resposta = MsgBox("Deseja continuar?", vbYesNo + vbQuestion)

If Resposta = vbYes Then

Valor = 1

Else

Valor = 0

End If

Wend

End Sub

ATIVA CALCULADORA
Sub ShowCalc()

Shell "Calc.Exe", vbNormalFocus

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

CHAMA USERFORM COM DUPLO CLIC

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

UserForm1.Show

Cancel = True

End Sub

DELETAR LINHA ESPECIFICADA


Sub Deletar()

‘Para que esta macro funcione corretamente os códigos deverão conter Nº e letras

Dim cod As Variant

cod = InputBox("insira o código", "para Deletar a linha")

For i = 1 To 65536 Step 1

If Sheets("Plan2").Cells(i, "A") = cod Then

For j = 1 To 25 Step 1 ‘Alterar colunas To ?

Sheets("Plan2").Cells(i, j) = ""

Next j

End If

Next i

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

DADOS DUPLICADOS
Option Explicit

'Objetivo : Verificar valores duplicados

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim nLinComp, nLinFim As Integer ' Declara nLinha com Inteiro

If ActiveCell.Column = 1 Then ' só funciona na coluna 1

nLinFim = 1 ' Define qual é linha onde inicia-se os dados para achar i final da lista

Do While Not IsEmpty(Cells(nLinFim, 1)) ' Faça enquanto não for vazia as células de valores informado

nLinFim = nLinFim + 1 ' Incrementa uma linha para baixo

Loop ' Faz o Loop

nLinComp = 1 'Define qual é linha que inicia-se os dados para comparação

Do While nLinComp <= nLinFim - 2 ' Faça enquanto conter valores informado

If Cells(nLinFim - 1, 1).Value = Cells(nLinComp, 1).Value Then ' Caso o último valores informado for igual ao valores em comparação
então...

MsgBox "valores duplicado", vbCritical, "Cadastro valores !" 'Exibe uma mensagem

Cells(nLinFim - 1, 1).Activate 'Ativa o valores em duplicidade

Cells(nLinFim - 1, 1).Interior.ColorIndex = 4 ' Formata o interior da célula em verde

Exit Sub ' Finaliza Código

Else ' Senão

nLinComp = nLinComp + 1 ' Vai para o próximo valores da lista

End If ' Finaliza IF

Loop ' Faz o Ciclo

Cells(nLinComp + 1, 1).Activate ' Não achando duplicidade, ativa a próxima célula

If nLinFim > 1 Then Cells(nLinFim - 1, 1).Interior.ColorIndex = xlNone ' Retira o formato do interior da célula em verde, caso conter

If nLinFim > 1 Then Cells(nLinFim, 1).Interior.ColorIndex = xlNone ' Retira o formato do interior da célula em verde, caso conter

End If

End Sub ' Encerra o código


28/7/2014 MACROS PARA EXCEL - VBA-

CX DIALOGO PROTEGER
Sub Proteger_Planilha()

With Application

.Dialogs(xlDialogProtectDocument).Show

End With

End Sub

CX DIALOGO DESPROTEGER PLANILHA


Sub Desproteger_Planilha()

ActiveSheet.Unprotect 'desprotege a planilha

End Sub

CX DIALOGO BORDAS
Sub CxDialogo_Bordas()

With Application

.Dialogs(xlDialogBorder).Show

End With

End Sub

SUB COPIAR_FIGURA()
28/7/2014 MACROS PARA EXCEL - VBA-

With Application

.Dialogs(xlDialogCopyPicture).Show

End With

End Sub

Sub ConverterMaiuscula()

Dim n As Range

For Each n In Selection

n.Value = UCase(n.Value)

Next

End Sub

SUB CONVERTERMINUSCULA()
Dim n As Range

For Each n In Selection

n.Value = LCase(n.Value)

Next

End Sub

SUB CONVERTER PRI MAIUSCULA()


Dim n As Range

For Each n In Selection

n.Value = StrConv(n.Value, vbProperCase)

Next

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

CONVERTER EM DOLAR

Sub Converter_R_US()

Dim Linha As Long

Dim Coluna As String

Dim Valor As Double

Dim Cotacao As Double

Coluna = "h"

Linha = 7

Valor = Cells(Linha, Coluna)

Cotacao = InputBox("Digite a cotação do Dólar, 1US$ = R$: ", "Cotação")

While Cells(Linha, Coluna) <> ""

Valor = Cells(Linha, Coluna)

Cells(Linha, Coluna) = Valor * Cotacao

Linha = Linha + 1

Wend

End Sub

FUNÇÃO NOME CONTRÁRIO


Public Function Contrario(Campo As String)
28/7/2014 MACROS PARA EXCEL - VBA-

Dim contador As Integer

For contador = 1 To Len(Campo)

Contrario = Contrario & Mid(Right(Campo, contador), 1, 1)

Next contador

End Function

CX DIALOGO CONF PG
Sub Configurar_Página()

With Application

.Dialogs(xlDialogPageSetup).Show

End With

End Sub

Sub ExecutarDiálogo()

DialogSheets("Caixa de diálogo1").Show

End Sub

Option Explicit

Sub ExibirForm()

UserForm1.Show

End Sub

DESPROTEGER PLANILHA
28/7/2014 MACROS PARA EXCEL - VBA-

Option Explicit

Sub DesprotegerPlanilhaAtiva()

Dim i, i1, i2, i3, i4, i5, i6 As Integer, j As Integer, k As Integer, _

l As Integer, m As Integer, n As Integer

On Error Resume Next

For i = 65 To 66

For j = 65 To 66

For k = 65 To 66

For l = 65 To 66

For m = 65 To 66

For i1 = 65 To 66

For i2 = 65 To 66

For i3 = 65 To 66

For i4 = 65 To 66

For i5 = 65 To 66

For i6 = 65 To 66

For n = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) _

& Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

If ActiveSheet.ProtectContents = False Then

MsgBox "Planilha desprotegida com sucesso!!!"

Exit Sub

End If

Next

Next

Next

Next

Next

Next

Next

Next
28/7/2014 MACROS PARA EXCEL - VBA-

Next

Next

Next

Next

End Sub

SUB FECHAR()
Application.Quit

End Sub

SUB FORMULÁRIO()
'

' Formulário Macro

' Macro gravada em 08/07/2005 por Nilson

ActiveSheet.ShowDataForm

End Sub

EXTENSO
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

'" FUNÇÃO: fExtenso (Spell number in Portuguese)

'"

'"
28/7/2014 MACROS PARA EXCEL - VBA-

'" DESCRIÇÃO: Escreve por extenso em português qualquer número cardinal com

'" ou sem fração com ou sem unidade masculina ou feminina. A par-

'" te fracionária, se houver, pode ser descrita de três maneiras.

'"

'" ARGUMENTOS: Num - O número cardinal com ou sem fração a descrever;

'" Maior número permitido: 1 trilhão menos 0.01 (999.999.999.999,99);

'" Menor fração sensível: 1 trilionésimo (0,000.000.000.001).

'" FraçTipo - 1, 2 ou 3 para as maneiras de ler(descrever) a fração:

'" 1 - Lê a fração em centavos. Ideal para Moeda;

'" 2 - Lê a vírgula decimal, cada zero e o número restante como

'" inteiro. Ideal para percentual;

'" 3 - Lê a fração em décimos até bilionésimos. Ideal para número

'" puro. (Opcional - 3 padrão ou 1 se houver UndNomeSing)

'" UndNomeSing - Nome da unidade no singular (Opcional - A ausência

'" indica número puro);

'" UndNomePlur - Nome da unidade no plural (Opcional - Na ausência a

'" pluralização será feita automaticamente a partir de UndNomeSing);

'" UndMasc - Indica o gênero da unidade: Verdadeiro (masculino) ou Falso

'" (feminino) (Opcional - Padrão Verdadeiro (masculino));

'" UmMil - Escreve 1.000 completo sem omitir 'um': Verdadeiro (Sim, 'um mil')

'" ou Falso (Não, 'mil') (Opcional - Padrão Verdadeiro (Completo));

'" VirgEntrMilh - Indica intercalação de vírgula entre milhares: Verdadeiro (Sim)

'" ou Falso (Não) (Opcional - Padrão Falso (Não intercala));

Option Explicit

Function fExtenso(Num As Double, Optional FraçTipo As Integer, Optional UndNomeSing As String, Optional UndNomePlur As
String, Optional UndMasc As Boolean = True, Optional UmMil As Boolean = True, Optional VirgEntrMilh As Boolean = False) As
String

Dim ExtensInt As String

Dim ExtensFrac As String

Dim UndNome As String

Dim FracNome As String


28/7/2014 MACROS PARA EXCEL - VBA-

Dim Signif As String

Dim NumText As String

If Num > 999999999999.99 Or Num < 0 Then

fExtenso = "Erro! (Valores válidos: >=0 e < 1 trilhão)"

Exit Function

End If

'Preparando nome da unidade, singular e plural

If Not Mid(UndNomeSing, 2, 1) = UCase(Mid(UndNomeSing, 2, 1)) Then UndNomeSing = LCase(UndNomeSing)

If UndNomePlur <> "" Then

If Not Mid(UndNomePlur, 2, 1) = UCase(Mid(UndNomePlur, 2, 1)) Then UndNomePlur = LCase(UndNomePlur)

Else

UndNomePlur = IIf(UndNomeSing = "", "", Pluralizar(UndNomeSing))

'Se a função Pluralizar falhar palavras estrangeiras ou em exceções

'portuguesas, deve ser usado o argumento UndNomePlur.

End If

'Extenso parte inteira

ExtensInt = fExtensoInt(Int(CDec(Num)), UndMasc, UmMil, VirgEntrMilh)

'Extenso parte fracionária

If FraçTipo = 0 And UndNomeSing = "" Then FraçTipo = 3

If FraçTipo = 0 And UndNomeSing <> "" Then FraçTipo = 1

Select Case FraçTipo

Case 1 'Lê fração em centavo. Ideal para Moeda

Num = Format(Num, "0.00") * 1 'Round(Num,2)

ExtensFrac = fExtensoInt((Num - Int(CDec(Num))) * 100, True, UmMil, VirgEntrMilh)

If ExtensInt = "" And ExtensFrac = "" Then ExtensInt = "zero"


28/7/2014 MACROS PARA EXCEL - VBA-

'Nome da unidade no singular ou plural

UndNome = IIf(Num < 1, IIf(Num = 0, " " & UndNomePlur, ""), IIf(UndNomeSing = "" Or Right(ExtensInt, 1) = " ", "", " ") &
IIf(Int(CDec(Num)) = 1, UndNomeSing, UndNomePlur) & IIf(Num = Int(CDec(Num)), "", " e "))

'Nome da fração no singular ou plural

FracNome = IIf(Num = Int(CDec(Num)), "", IIf(Int(CDec(Num * 100)) - Int(CDec(Num)) * 100 = 1, " centavo", " centavos"))

fExtenso = ExtensInt & UndNome & ExtensFrac & FracNome

Case 2 'Lê a vírgula decimal, cada zero e o número restante como inteiro. Ideal para percentual.

ExtensFrac = Num - Int(CDec(Num))

If ExtensFrac = 0 Then

fExtenso = ExtensInt

Else

ExtensFrac = Format(ExtensFrac, "0.############")

ExtensFrac = Mid(ExtensFrac, 3, 15)

fExtenso = IIf(ExtensInt = "", "zero", ExtensInt) & " vírgula"

Do While Left(ExtensFrac, 1) = "0"

fExtenso = fExtenso & " zero"

ExtensFrac = Mid(ExtensFrac, 2, 15)

Loop

fExtenso = fExtenso & " " & fExtensoInt(ExtensFrac * 1, UndMasc, UmMil, VirgEntrMilh)

End If

If fExtenso = "" Then fExtenso = "zero"

fExtenso = fExtenso & IIf(UndNomeSing <> "", " ", "") & IIf(Num = 1, UndNomeSing, UndNomePlur)

Case 3 'Lê a fração de décimo a bilionésimo. Ideal para número puro.

ExtensFrac = Num - Int(CDec(Num))

If ExtensFrac = 0 Then

ExtensFrac = ""
28/7/2014 MACROS PARA EXCEL - VBA-

Else

ExtensFrac = Format(ExtensFrac, "0.############")

Signif = Len(ExtensFrac) - 2

If Signif > 3 And Signif <> 6 And Signif <> 9 And Signif <> 12 Then Signif = Int(CDec(Signif / 3)) * 3 + 3

If Signif > 0 Then

ExtensFrac = Format(ExtensFrac, "0.000000000000")

ExtensFrac = fExtensoInt(Mid(ExtensFrac, 3, Signif) * 1, True, UmMil, VirgEntrMilh)

FracNome = Choose(Signif, "décimo", "centésimo", "milésimo", , , "milionésimo", , , "bilionésimo", , , "trilionésimo")

FracNome = " " & FracNome & IIf(ExtensFrac = "um", "", "s")

Else

ExtensFrac = ""

End If

End If

If ExtensInt = "" And ExtensFrac = "" Then ExtensInt = "zero"

If UndNomeSing = "" Then

fExtenso = ExtensInt & IIf(ExtensInt <> "" And ExtensFrac <> "", ", e ", "") & ExtensFrac & FracNome

Else

'Nome da unidade no singular ou plural

UndNome = IIf(Num < 1, IIf(Num = 0, " " & UndNomePlur, ""), IIf(UndNomeSing = "" Or Right(ExtensInt, 1) = " ", "", " ") &
IIf(Int(CDec(Num)) = 1, UndNomeSing, UndNomePlur) & IIf(Num = Int(CDec(Num)), "", " e "))

'Nome da fração no singular ou plural

FracNome = IIf(Num = Int(CDec(Num)), "", FracNome & " de " & UndNomeSing)

fExtenso = ExtensInt & UndNome & ExtensFrac & FracNome

End If

End Select

End Function

Private Function fExtensoInt(Num As Double, UndMasc As Boolean, UmMil As Boolean, VirgEntrMilh As Boolean) As String

'Gramática portuguesa:
28/7/2014 MACROS PARA EXCEL - VBA-

'Regra Geral: Não se intercala a conjunção 'e' e nem vírgula entre posições de milhar.

'Exceção: Se a milhar posterior for menor que 100 ou for centena inteira (100,200,300...)

'Alguns gramáticos não aceitam essa exceção e outros já aceitam a vírgula.

'A variável ConjExc ativa/desativa a exceção

'A variável VirgEntrMilh usa vírgula entre milhares

Dim NumText As String

Dim Ce As String

Dim Ma As String

Dim Mõ As String

Dim Bi As String

Dim f As String

Dim ConjExc As Boolean

ConjExc = True

If VirgEntrMilh Then ConjExc = False

If Num = 0 Then

fExtensoInt = ""

Exit Function

End If

NumText = Format(Num, "000,000,000,000")

'1º Posição de milhar, Centenas

Ce = Mid(NumText, 13, 3)

'2º Posição de milhar, Milhares

Ma = Mid(NumText, 9, 3)

'3º Posição de milhar, Milhões

Mõ = Mid(NumText, 5, 3)

'4º Posição de milhar, Bilhões


28/7/2014 MACROS PARA EXCEL - VBA-

Bi = Mid(NumText, 1, 3)

f = fMilharText(Bi, UndMasc) & IIf(Bi > 0, IIf(Bi > 1, " bilhões", " bilhão"), "")

f = f & IIf(VirgEntrMilh And Bi > 0 And Mõ > 0, ", ", IIf(Bi > 0 And Mõ > 0, " ", ""))

f = f & IIf(ConjExc And Bi > 0 And Mõ > 0 And (Mõ < 100 Or Right(Mõ, 2) = "00"), "e ", "")

f = f & fMilharText(Mõ, UndMasc) & IIf(Mõ > 0, IIf(Mõ > 1, " milhões", " milhão"), "")

f = f & IIf(VirgEntrMilh And Bi + Mõ > 0 And Ma > 0, ", ", IIf(Bi + Mõ > 0 And Ma > 0, " ", ""))

f = f & IIf(ConjExc And Bi + Mõ > 0 And Ma > 0 And (Ma < 100 Or Right(Ma, 2) = "00"), "e ", "")

f = f & fMilharText(Ma, UndMasc) & IIf(Ma > 0, IIf(Ma > 1, " mil", " mil"), "")

If Not UmMil Then If f = "um mil" Then f = "mil" 'Omitir 'um' em 'um mil'

f = f & IIf(VirgEntrMilh And Bi + Mõ + Ma > 0 And Ce > 0, ", ", IIf(Bi + Mõ + Ma > 0 And Ce > 0, " ", ""))

f = f & IIf(ConjExc And Bi + Mõ + Ma > 0 And Ce > 0 And (Ce < 100 Or Right(Ce, 2) = "00"), "e ", "")

f = f & fMilharText(Ce, UndMasc) & IIf(Ce > 0, ",", "")

f = IIf(Right(f, 1) = ",", Mid(f, 1, Len(f) - 1), f)

f = IIf(Right(f, 2) = "ão", f & " de", f)

f = IIf(Right(f, 3) = "ões", f & " de", f)

fExtensoInt = f

End Function

Private Function fMilharText(NumText As String, UndMasc As Boolean)

'Gramática portuguesa:

'Regra Geral: Intercala-se a conjunção 'e' entre centenas, dezenas e unidades


28/7/2014 MACROS PARA EXCEL - VBA-

Dim UndText As String

Dim DezenaText As String

Dim CentenaText As String

Const ConjDez_Un = " e " 'Conjunção entre Dezena e Unidade

Const ConjCen_Dez = " e " 'Conjunção entre Centena e Unidade

' Unidade texto

If Mid(NumText, 2, 1) <> "1" Then

UndText = Choose(Mid(NumText, 3, 1) + 1, "", IIf(UndMasc, "um", "uma"), _

IIf(UndMasc, "dois", "duas"), "três", "quatro", "cinco", "seis", _

"sete", "oito", "nove")

Else

UndText = ""

End If

'Dezena texto

If Mid(NumText, 2, 1) <> "1" Then

DezenaText = Choose(Mid(NumText, 2, 1) + 1, "", "dez", "vinte", _

"trinta", "quarenta", "cinqüenta", "sessenta", "setenta", _

"oitenta", "noventa")

Else

DezenaText = Choose(Mid(NumText, 3, 1) + 1, "dez", "onze", _

"doze", "treze", "quatorze", "quinze", "dezesseis", _

"dezessete", "dezoito", "dezenove")

End If

'Centena texto

If UndMasc Then

CentenaText = Choose(Mid(NumText, 1, 1) + 1, "", "cento", "duzentos", _

"trezentos", "quatrocentos", "quinhentos", "seiscentos", _


28/7/2014 MACROS PARA EXCEL - VBA-

"setecentos", "oitocentos", "novecentos")

Else

CentenaText = Choose(Mid(NumText, 1, 1) + 1, "", "cento", "duzentas", _

"trezentas", "quatrocentas", "quinhentas", "seiscentas", _

"setecentas", "oitocentas", "novecentas")

End If

If Mid(NumText, 1, 1) = "1" And Mid(NumText, 2, 2) = "00" Then CentenaText = "cem"

'Milhar texto

fMilharText = CentenaText & IIf(Mid(NumText, 2, 2) * 1 > 0 And CentenaText <> "", ConjCen_Dez, "") _

& DezenaText & IIf(Mid(NumText, 2, 2) * 1 <= 19 Or Right(NumText, 1) = "0", "", ConjDez_Un) _

& UndText

End Function

Function Pluralizar(Sing As String) As String

Dim e As String

'Regra geral:

Pluralizar = IIf(Sing = "", "", Sing & "s")

'Exceções: (Quase todas)

' Nomes terminados em al, el, ol, ul, il

e = LCase(Right(Sing, 2))

If e = "al" Or e = "el" Or e = "ol" Or e = "ul" Or e = "il" Then Pluralizar = Left(Sing, Len(Sing) - 1) & "is"

'Nomes terminados em il

If e = "il" Then Pluralizar = Left(Sing, Len(Sing) - 2) & "is"

' Nomes terminados em r, s, z

e = LCase(Right(Sing, 1))

If e = "r" Or e = "s" Or e = "z" Then Pluralizar = Sing & "es"

' Nomes terminados em m

If e = "m" Then Pluralizar = Left(Sing, Len(Sing) - 1) & "ns"


28/7/2014 MACROS PARA EXCEL - VBA-

' Nomes terminados em m

If e = "x" Then Pluralizar = Sing

End Function

INSERIR

Sub Insere()

Dim Salario, Gestão, Gerais As Currency

Salario = InputBox(" Salário:")

Gestao = InputBox(" Gestão:")

Gerais = InputBox(" Gerais:")

Cells(4, 2) = Salario

Cells(5, 2) = Gestao

Cells(6, 2) = Gerais

End Sub

ABRE CX DIALOGO INSERIR FIGURA


Sub Inserir_Figura()

With Application

.Dialogs(xlDialogInsertPicture).Show

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SUB INSERIR_OBJETO()
With Application

.Dialogs(xlDialogInsertObject).Show

End With

End Sub

SUB LIMPA()
Range("B4:b6").ClearContents

End Sub

SUB NOMES_BARRAS()
Linha = 1

For Each BarraExcel In Application.CommandBars

With Worksheets(3)

.Cells(Linha, 1).Value = BarraExcel.NameLocal

.Cells(Linha, 2).Value = BarraExcel.Name

End With

Linha = Linha + 1

Next BarraExcel

End Sub

SUB OLA()
Dim Nome As String

Nome = InputBox("Introduza o seu nome: ")


28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox ("Olá " & Nome)

End Sub

‘EXIBE CX DIALOGO OPÇÕES DE CÁLCULO


Sub Opção_de_Cálculo()

With Application

.Dialogs(xlDialogCalculation).Show

End With

End Sub

FUNCTION RAIZ()
Dim iNum As Integer

iNum = Sqr(25)

'Depois desta operação, iNum conterá o número 5. 8^)

By Tamanhoni - ValewZAÇO!!! 8^)))

End Function

SUB TERMINA()
Application.Quit

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SUB SAIR()
Close system

ActiveWorkbook.Close

End Sub

SUB SALVAR()
'

' Salvar Macro

' Macro gravada em 05/07/2005 por Nilson

'

ActiveWorkbook.Save

End Sub

SUB SALVAR_COMO()
With Application

.Dialogs(xlDialogSaveAs).Show

End With

End Sub

FUNCTION SAUDAÇÃO()

If Time$ > "19:00:00" Then

MsgBox "Boa noite e seja bem vindo!!!", _

vbInformation
28/7/2014 MACROS PARA EXCEL - VBA-

ElseIf Time$ > "12:00:00" Then

MsgBox "Boa tarde e seja bem vindo!!!", _

vbInformation

ElseIf Time$ > "00:00:00" Then

MsgBox "Bom dia e seja bem vindo!!!", _

vbInformation

End If

End Function

SUB SAUDAÇÃO()
If Time$ > "19:00:00" Then

MsgBox "Boa noite bom descanso!!!", _

vbInformation

ElseIf Time$ > "12:00:00" Then

MsgBox "Boa tarde !!!", _

vbInformation

ElseIf Time$ > "00:00:00" Then

MsgBox "Bom dia !!!", _

vbInformation

End If

End Sub

SUB SEPARATEXTO()
Range("A1:A10").Select

Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _

:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _


28/7/2014 MACROS PARA EXCEL - VBA-

True

End Sub

SUB SEQUENCIA_NUMERICA()
Range("f1").Select

Range("f1") = Range("f1") + 1

End Sub

SUB SOMA()
Dim Numero, Soma As Integer

Soma = 0

Numero = val(InputBox("Número =? "))

While (Numero > 0)

Soma = Soma + Numero

Numero = Numero - 1

Wend

MsgBox ("O valor da soma é: " & Soma)

End Sub

SUB TRAVAR_CEL()
With Application

.Dialogs(xlDialogCellProtection).Show

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SUB TROCO()
Dim Ítem1, Ítem2, Ítem3, Ítem4, Ítem5, Ítem6, Ítem7, Ítem8, Ítem9, Ítem10 As Currency

Item1 = InputBox("Ítem1 :")

Item2 = InputBox("Ítem2 :")

Item3 = InputBox("Ítem3 :")

Item4 = InputBox("Ítem4 :")

Item5 = InputBox("Ítem5 :")

Item6 = InputBox("Ítem6 :")

Item7 = InputBox("Ítem7 :")

Item8 = InputBox("Ítem8 :")

Item9 = InputBox("Ítem9 :")

Item10 = InputBox("Ítem10 :")

Cells(2, 8) = Item1

Cells(3, 8) = Item2

Cells(4, 8) = Item3

Cells(5, 8) = Item4

Cells(6, 8) = Item5

Cells(7, 8) = Item6

Cells(8, 8) = Item7

Cells(9, 8) = Item8

Cells(10, 8) = Item9

Cells(11, 8) = Item10

End Sub

SUB VOLTAR()
'

' Voltar Macro


28/7/2014 MACROS PARA EXCEL - VBA-

' Macro gravada em 28/06/2005 porgvygvytfc66f Nilson

Sheets("Menu").Select

ActiveCell.Range("A1").Select

End Sub

SUB ZERAR_DADOS()
If MsgBox("Quer mesmo deletar esses dados?", vbYesNoCancel, "Deletando") = vbYes Then

Cancel = True

Range("B4:B54").Select

Selection.ClearContents

Range("D7:D12").Select

Selection.ClearContents

Range("B4").Select

End If

End Sub

SUB ZOON()
With Application

.Dialogs(xlDialogZoom).Show

End With

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

COLOCAR ESSAS MACROS DIRETAMENTE NO CÓDIGO DA PLANILHA

COR NA LINHA

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cells.Interior.ColorIndex = xlNone

Range(Target.Row & ":" & Target.Row).EntireRow.Interior.ColorIndex = 6

End Sub

‘ESTA PASTA DE TRABALHO EVENTO OPEN

Private Sub Workbook_Open()

'Ativa a planilha 1 - CAPA

Plan1.Activate

'Tira a barra com os nomes das planilhas...

ActiveWindow.DisplayWorkbookTabs = False

Application.StatusBar = "Programa elaborado por Nilson Santos"

If Time$ > "19:00:00" Then

MsgBox "Boa noite !!!", _

vbInformation

ElseIf Time$ > "12:00:00" Then

MsgBox "Boa tarde !!!", _

vbInformation

ElseIf Time$ > "00:00:00" Then

MsgBox "Bom dia !!!", _

vbInformation

End If
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

CÓDIGOS
Public Function CalculaData(ByVal datDataInicial As Date, ByVal intAnos As _

Integer, ByVal intMeses As Integer, ByVal intDias As Integer) As Date

' Utilização da Função de VBA DateAdd()

' Soma Anos, Meses e Dias a uma determinada Data

' Exemplo da Função numa célula: Em A1: = =CalculaData("1-1-2006";0;5;11)

' Ou seja, soma 0 anos, 5 meses e 11 dias à data 1/1/2006 - Resultado: 12/06/2006

' Atenção: é preciso formatar a célula como Data!

Dim datResult As Date

datResult = DateAdd("yyyy", intAnos, datDataInicial)

datResult = DateAdd("m", intMeses, datResult)

datResult = DateAdd("d", intDias, datResult)

CalculaData = datResult

End Function

SUB EXIBIRFORM()
UserForm2.Show

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SUB ABRIR_PLAN()
Dim Num As Integer

Num = ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(Num).Activate

End Sub

FUNCTION APELIDO(TOT)
For i = 0 To Len(tot) - 1

Var = Var & Mid(tot, Len(tot) - i, 1)

Next i

Apelido = Right(tot, InStr(Var, " "))

End Function

COPIAR PARA LINHA

Sub ColToRow()

Sheets("Dias").Select

Range("A2:A14").Select
28/7/2014 MACROS PARA EXCEL - VBA-

Selection.Copy

Sheets("Piscar").Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=True

End Sub

SUB CONVERTERMAIUSCULA()
Dim n As Range

For Each n In Selection

n.Value = UCase(n.Value)

Next

End Sub

SUB CONVERTERMINUSCULA()
Dim n As Range

For Each n In Selection

n.Value = LCase(n.Value)

Next

End Sub

SUB CONVERTERPRIMAIUSCULA()
28/7/2014 MACROS PARA EXCEL - VBA-

Dim n As Range

For Each n In Selection

n.Value = StrConv(n.Value, vbProperCase)

Next

End Sub

SUB ENTRADA_ESTOQUE()
Dim Ops(1 To 5) As String

Dim msg As String

Ops(1) = Day(Date)

Ops(2) = Month(Date)

Ops(3) = Year(Date)

Ops(4) = Hour(Time)

Ops(5) = Minute(Time)

msg = Ops(3) & "-" & Ops(2) & "-" & Ops(1) & " " & Ops(4) & ":" & Ops(5)

Sheets("Entrada").Select

Range("A65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal
28/7/2014 MACROS PARA EXCEL - VBA-

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite CÓDIGO:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("b65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite DESCRIÇÃO:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("C65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite ENTRADAS:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)
28/7/2014 MACROS PARA EXCEL - VBA-

Loop

Range("d65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite VALOR UNITÁRIO:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("f65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaR1C1 = msg

End

End Sub

SUB FILTRA_CLIENTE_CLICK()
Dim myCliente
28/7/2014 MACROS PARA EXCEL - VBA-

myCliente = ActiveCell.Value

Range("a1:a700").Select

If myCliente = "" Then

Selection.AutoFilter

Range("A1").Select

Else

Selection.AutoFilter Field:=1, Criteria1:="=" & myCliente, Operator:=xlAnd

ActiveSheet.PageSetup.PrintArea = ActiveCell.CurrentRegion.Address

Range("A1").Select

End If

End Sub

SUB LANÇAMENTO_CAIXA()
Dim Ops(1 To 5) As String

Dim msg As String

Ops(1) = Day(Date)

Ops(2) = Month(Date)

Ops(3) = Year(Date)

Ops(4) = Hour(Time)

Ops(5) = Minute(Time)
28/7/2014 MACROS PARA EXCEL - VBA-

msg = Ops(3) & "-" & Ops(2) & "-" & Ops(1) & " " & Ops(4) & ":" & Ops(5)

Sheets("FluxoCaixa").Select

Range("b65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite CÓDIGO:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("c65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite DESCRIÇÃO:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop
28/7/2014 MACROS PARA EXCEL - VBA-

Range("d65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite ENTRADAS:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("e65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite SAÍDA:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("f65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select
28/7/2014 MACROS PARA EXCEL - VBA-

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite CARTÃO:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("G65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

Application.Cursor = xlNormal

Do While IsEmpty(ActiveCell)

ActiveCell.FormulaR1C1 = InputBox(Prompt:="Digite CHEQUE:", _

Title:="Nome do Utilizador")

ActiveCell.FormulaR1C1 = UCase(ActiveCell)

Loop

Range("I65536").Select

Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select

ActiveCell.FormulaR1C1 = msg

End
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

‘VALOR ZERO EM CÉLULA


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If IsEmpty(Range("F4")) Then

Exit Sub

End If

If Range("F4") <> 0 Then

ElseIf Range("F4") = 0 Then

MsgBox "A célula tem um valor 0 (zero)!"

Else

Exit Sub

End If

Range("F4").ClearContents

End Sub

SUB MACRO1()
Range("A1") = "Você entrou no mês de Janeiro"

End Sub

FUNÇÕES FERIADOS E DIAS ÚTEIS


28/7/2014 MACROS PARA EXCEL - VBA-

Function ÉFeriado(sbsDia) As Boolean

Dim kcont As Integer, stFer(9) As String

stFer(1) = "1/1"

stFer(2) = "21/4"

stFer(3) = "1/5"

stFer(4) = "7/9"

stFer(5) = "8/9"

stFer(5) = "12/10"

stFer(6) = "2/11"

stFer(7) = "15/11"

stFer(8) = "25/12"

For kcont = 1 To 9

If Day(sbsDia) & "/" & Month(sbsDia) = stFer(kcont) Then

ÉFeriado = True

Exit Function

End If

Next kcont

End Function

'Obs: criei os feriados federais. Cada municipio tem seu feriado particular, cabe a cada usuário acrescentar na função. Basta
aumentar o String strFer(n)

'<b>Agora vamos criar uma função para os fins de semana:</b>

Function ÉFimSemana(Data As Date) As Boolean

If Weekday(Data, vbMonday) < 6 Then


28/7/2014 MACROS PARA EXCEL - VBA-

ÉFimSemana = False

Else

ÉFimSemana = True

End If

End Function

'Obs.: Aqui no caso estou considerando o sábado como fim de semana.

'<b>Agora a função mais dificil ! <img src=icon_smile_angry.gif border=0 align=middle></b>

'<b>A função para calcular a páscoa, carnaval e CorpusChrist</b>

Function ÉPascoa(sbsPascoa As Single) As Boolean

Dim sn As Integer, sa As Single, sb As Single, sc As Single, sd As Single, se As Single

Dim sf As Single, sg As Single, sh As Single, si As Single, sk As Single, sl As Single

Dim sm As Single, sp As Single, sq As Single

Dim sDia As Single, sMes As Single, sDiaCarnaval, sDiaCarn As Single, sMesCarnaval As Single

Dim stDiadePascoa As String, sDiadePascoa As Single, sDiaCorpChr As Single

sn = Year(sbsPascoa)

sa = sn - Int(sn / 19) * 19

sb = Int(sn / 100)

sc = sn - sb * 100

sd = Int(sb / 4)

se = sb - sd * 4

sf = Int((sb + 8) / 25)

sg = Int((sb - sf + 1) / 3)

sh = (19 * sa + sb - sd - sg + 15) - Int((19 * sa + sb - sd - sg + 15) / 30) * 30

si = Int(sc / 4)
28/7/2014 MACROS PARA EXCEL - VBA-

sk = sc - si * 4

sl = (32 + 2 * se + 2 * si - sh - sk) - Int((32 + 2 * se + 2 * si - sh - sk) / 7) * 7

sm = Int((sa + 11 * sh + 22 * sl) / 451)

sp = Int((sh + sl - 7 * sm + 114) / 31)

sq = sh + sl - 7 * sm + 114 - sp * 31

sDia = sq + 1 'Domingo de Páscoa

sMes = sp 'Mês da Páscoa

stDiadePascoa = sDia & "/" & sMes & "/" & sn

sDiadePascoa = Int(CDate(stDiadePascoa))

sDiaCarnaval = sDiadePascoa - 47

sDiaCarn = sDiadePascoa - 48

sDiaCorpChr = sDiadePascoa + 60

If Day(sbsPascoa) = sDia And Month(sbsPascoa) = sp Then

ÉPascoa = True

End If

If Day(sbsPascoa) = sDia - 2 And Month(sbsPascoa) = sp Then

ÉPascoa = True

'Paixão de Cristo

End If

If Day(sbsPascoa) = Day(sDiaCarnaval) And Month(sbsPascoa) = Month(sDiaCarnaval) Then

ÉPascoa = True

'Terça Feira de Carnaval

End If

If Day(sbsPascoa) = Day(sDiaCorpChr) And Month(sbsPascoa) = Month(sDiaCorpChr) Then

ÉPascoa = True

'Corpus Christi

End If
28/7/2014 MACROS PARA EXCEL - VBA-

If Day(sbsPascoa) = Day(sDiaCarn) And Month(sbsPascoa) = Month(sDiaCarn) Then

ÉPascoa = True

'Segunda feira de Carnaval

End If

End Function

'<b>Vamos agora consolidar as funções e criar uma nova função chamada Édiaùtil</b>

Function ÉDiaUtil(Data As Date) As Boolean

If Not ÉFeriado(Data) And Not ÉFimSemana(Data) And Not ÉPascoa(CDate(Data)) Then

ÉDiaUtil = True

Else

ÉDiaUtil = False

End If

End Function

'<b> Agora vamos criar uma função para contar quantos dias úteis existe entre duas datas</b>

Function DiasUteisEntreDatas(DataInicial As Date, DataFinal As Date) As Double

Dim Idatas As Date

Dim i As Double

i=0

For Idatas = DataInicial To DataFinal

If ÉDiaUtil(Idatas) Then i = i + 1

Next

DiasUteisEntreDatas = i

End Function
28/7/2014 MACROS PARA EXCEL - VBA-

COMENTÁRIOS
Function GetComment(FCell As Range) As Variant

Application.Volatile

Set FCell = FCell(1)

If FCell.Comment Is Nothing Then

GetComment = ""

Else

GetComment = FCell.Comment.Text

End If

End Function

FUNCTION MSG(PARAMARRAY PARM())


For a = LBound(parm) To UBound(parm)

If Len(parm(a)) > max_len Then

max_len = Len(parm(a))

End If

Next a

For a = LBound(parm) To UBound(parm)

If Len(parm(a)) < max_len Then

spaces = (((max_len - Len(parm(a))) / 1.6))

For b = 1 To spaces

parm(a) = " " & parm(a) & " "

Next b

End If

msgstring = msgstring & parm(a) & Chr(10)


28/7/2014 MACROS PARA EXCEL - VBA-

Next a

MsgBox msgstring

End Function

SUB TESTAR_MSG()
a = Msg("Esta é uma frase que está na 1ª linha;", "Esta está na segunda;", _

"Esta encontra-se na terceira linha", _

"e esta na 4ª, mas a mensagem está toda centrada!")

End Sub

SUB LIMPAR()
If MsgBox("Quer mesmo deletar esses dados?", vbYesNoCancel, "Deletando") = vbYes Then

Cancel = True

Range("A2:A65536").Select

Selection.ClearContents

Range("A1").Select

End If

End Sub

SUB PROCURA()

Dim strProc As String

strProc = InputBox("Digite a(s) letra(s) pretendidas e asterisco [ex. Jo*]ou asterisco para todos")
28/7/2014 MACROS PARA EXCEL - VBA-

Range("A5:A15").Select

Selection.AutoFilter

Selection.AutoFilter Field:=1, Criteria1:=strProc, Operator:=xlAnd

Range("A5").Select

End Sub

SUB TRANSFER()
Sheets("Plan6").Cells(1, 1) = Sheets("Plan5").Cells(1, 1)

Sheets("Plan5").Cells(1, 1) = ""

End Sub

'neste exemplo eu copio a Célula A1 de Plan1 em A1 de Plan2 e Apago em seguida a célula A1 de Plan1

'Sheets("Plan2").Cells(Linha, Coluna) = Sheets("Plan1").Cells(Linha, Coluna)

‘EXTENSO PARA EURO

'*******************************************************'

''

'Rotinas que processam um numero até 999.999.999,99 '

'e retorna-o em extenso '

'Adaptado para Euros e centavos '

''

''

'*******************************************************'

Dim um_a_19
28/7/2014 MACROS PARA EXCEL - VBA-

Dim dezenas

Dim centenas

Sub carregaVars()

um_a_19 = Array("", "um", "dois", "três", "quatro", "cinco", _

"seis", "sete", "oito", "nove", "dez", _

"onze", "doze", "treze", "quatorze", _

"quinze", "dezasseis", "dezassete", _

"dezoito", "dezenove")

dezenas = Array("", "dez", _

"vinte", "trinta", "quarenta", "cinquenta", _

"sessenta", "setenta", "oitenta", "noventa")

centenas = Array("cem", "cento", "duzentos", "trezentos", "quatrocentos", _

"quinhentos", "seiscentos", "setecentos", _

"oitocentos", "novecentos")

End Sub

IMAGEM
a) No intervalo A1:A5 criei números (1 a 5)

b) No intervalo B1:B5 coloquei caminhos de imagens (c:\PastaTal\ArquivoTal.jpg)

c) Coloquei um SpinButton

d) Coloquei um Image control

O seguinte código carrega as imagens

Private Sub SpinButton1_Change()

Dim strImagem As String


28/7/2014 MACROS PARA EXCEL - VBA-

On Error Resume Next

strImagem = Application.VLookup(Me.SpinButton1.Value, _

Worksheets(1).Range("A2:B100"), 2, False)

If Err = 0 Then

If Len(Dir(strImagem, vbArchive)) > 0 Then

Me.Image1.Picture = LoadPicture(strImagem)

Else

Me.Image1.Picture = LoadPicture("")

End If

Else

Me.Image1.Picture = LoadPicture("")

End If

End Sub

MÓDULOS

FUNCTION PROCESSAPARCELA(NUM) AS STRING


'Rotina utilizada para processar

'parcelas de um numero

'dividido em três posições

Dim n
28/7/2014 MACROS PARA EXCEL - VBA-

n = Format(num, "000")

a1 = Val(Mid(n, 1, 1))

a2 = Val(Mid(n, 2, 1))

a3 = Val(Mid(n, 3, 1))

If a1 <> 0 And a2 & a3 = "00" Then

If Val(a1 & a2 & a3) > 100 Then

Processa = centenas(a1)

Else

Processa = centenas(a1 - 1)

End If

ElseIf a1 > 0 And a2 >= 0 Then

Select Case a3

Case Is > 0

If Val(a2 & a3) > 19 Then

Processa = centenas(a1) & " e " & _

dezenas(a2) & " e " & _

um_a_19(a3)

Else

Processa = centenas(a1) & " e " & _

um_a_19(Val(a2 & a3))

End If

Case Is = 0

Processa = centenas(a1) & " e " & dezenas(a2)

End Select

ElseIf a1 = 0 Then

Select Case Val(a2 & a3)


28/7/2014 MACROS PARA EXCEL - VBA-

Case Is < 20

Processa = um_a_19(Val(a2 & a3))

Case Else

If um_a_19(a3) = "" Then

Processa = dezenas(a2)

Else

Processa = dezenas(a2) & " e " & _

um_a_19(a3)

End If

End Select

Else

Processa = ""

End If

End Function

'

‘Se pretendermos apagar linhas inteiras a partir de células vazias num determinado range, incluindo uma mensagem de alerta se,
nesse range, não houver nenhuma célula vazia, podemos utilizar o seguinte código:

Sub FindAndDelete()

Dim myRange As Range

On Error Resume Next

Set myRange = Range("A1:A100")

If Application.CountA(myRange) = 100 Then

MsgBox "Não existem células vazias no Range!"

Else

myRange.SpecialCells(xlBlanks).EntireRow.Delete

End If

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

CONVERTER A INFORMAÇÃO A MINÚSCULA OU MAIÚSCULA

Private Sub CommandButton2_Click()

Range("A10").Select

Do While ActiveCell <> Empty

ActiveCell.FormulaR1C1 = LCase(ActiveCell)

ActiveCell.Offset(1, 0).Select

Loop

End Sub

‘DEIXAER LETRAS MAIÚSCULAS EM CÉLULAS

Public Sub Worksheet_Change(ByVal Target As Range)

'Função para entrar converter letras minusculas em maiusculas

Dim MaiscStr As String, C1, C2

Select Case Target.Cells.Count

Case Is > 1

For Each C1 In Range(Target.Address)

For Each C2 In Range("A1:A10") 'Intervalo pode ser alterado

If C1.Address = C2.Address Then

If FLAG Then

MsgBox FLAG

Selection.Delete
28/7/2014 MACROS PARA EXCEL - VBA-

FLAG = Not FLAG

Exit Sub

End If

MsgBox "Não é permitido arrastar e/ou " & _

"selecionar" & vbCr & "várias células " & _

"Neste intervalo.", vbInformation, "Aviso"

Desfaz

Exit Sub

End If

Next C2

Next C1

Exit Sub

Case Else

If Application.Intersect(Range(Target.Address), _

Range("A1:A10")) Is Nothing Or _

Target.Value = "" Then Exit Sub ' o intervalo pode ser alterado

End Select

With Target

If .HasFormula = False Then

MaiscStr = UCase(.Value)

Application.EnableEvents = False

.Value = (MaiscStr)

End If

End With

Application.EnableEvents = True

End Sub

‘Solução: Macro que altera o texto selecionado para maiúsculas, minúsculas ou a 1ª letra de cada palavra em ‘maiúsculas alternado
entre estes formatos. Para a execução da macro pode ser criado uma tecla de atalho ou ligá-‘la a um botão de uma das barras de
28/7/2014 MACROS PARA EXCEL - VBA-

ferramentas.

Sub Alternar_Maiusc_Minusc_1Maiusc()

Dim celula As Range

'em todas as celulas dentro da selecção

For Each celula In Selection

'variavel a comparar

Select Case celula

'comparando se está com letra minuscula

Case LCase(celula)

'converte para maiusculas

celula = UCase(celula)

'comparando se está com letra maiuscula

Case UCase(celula)

'converte para a 1º letra de cada palavra em maiuscula

celula = Application.WorksheetFunction.Proper(celula.Text)

'outro caso que não se incluia nos dois primeiro

Case Else

'converte para minusculas

celula = LCase(celula.Text)

End Select

Next

End Sub

‘CÓDIGO PARA FORMATAR TXT BOX MAIÚSCULO


‘Code Block

Private Sub CommandButton1_Click()


ThisWorkbook.Worksheets(1).Range("B12").Value = UCase(Me.TextBox1.Text)
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

Talvez você prefira que a caixa de texto no UserForm já receba o texto em letras maiúsculas. Neste caso, use o evento
KeyPress da caixa de texto assim:

*Code Block

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)


KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

SOMA VALORES DE UMA COLUNA


Private Sub Cmd_AtualizarEntrada_Click()

Dim myRange As Range

Dim Var1 As Long

Dim Var2 As Long

Set myRange = Worksheets("Plan1").Range("D2:D65000")

Var1 = Application.WorksheetFunction.Sum(myRange)

Range("Q2") = Var1

Set myRange = Worksheets("Plan1").Range("F2:F65000")

Var2 = Application.WorksheetFunction.Sum(myRange)

Range("R2") = Var2

red = Int(Rnd * 255)

green = Int(Rnd * 255)

blue = Int(Rnd * 255)

Cmd_AtualizarEntrada.BackColor = RGB(red, green, blue)

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

‘FORMATO MOEDA DE UM TEXTBOX

Txt_entrada = Format(CCur(Txt_entrada), "###,###,##0.00")

‘BOTÕES DE PRÓXIMO ANTERIOR E ALTERAR

Public nRow As Long 'Declara a Variável como Pública,no início do Módulo

Private Sub CommandButton1_Click()

If nRow < 2 Then

nRow = 1

End If

If nRow = 2 Then ' se a linha for a 2 (1ª linha de dados)BOTÃO ANTERIOR

Exit Sub 'já não decrementa

Else

nRow = nRow - 1 'Decrementa 1 linha

End If

'mostra os dados

TextBox2.Text = Cells(nRow, "C")

TextBox3.Text = Cells(nRow, "D")

TextBox4.Text = Cells(nRow, "F")

TextBox5.Text = Cells(nRow, "E")

TextBox6.Text = Cells(nRow, "J")

TextBox7.Text = Cells(nRow, "G")

TextBox8.Text = Cells(nRow, "I")


28/7/2014 MACROS PARA EXCEL - VBA-

TextBox9.Text = Cells(nRow, "H")

End Sub

Private Sub CommandButton2_Click()

nRow = nRow + 1 'Incrementa 1 linha BOTÃO PRÓXIMO

'mostra os dados

TextBox2.Text = Cells(nRow, "C")

TextBox3.Text = Cells(nRow, "D")

TextBox4.Text = Cells(nRow, "F")

TextBox5.Text = Cells(nRow, "E")

TextBox6.Text = Cells(nRow, "J")

TextBox7.Text = Cells(nRow, "G")

TextBox8.Text = Cells(nRow, "I")

TextBox9.Text = Cells(nRow, "H")

End Sub

Private Sub CommandButton3_Click()

' As células tomam os novos dados BOTÃO ALTERA

Cells(nRow, "C") = TextBox2.Text

Cells(nRow, "D") = TextBox3.Text

Cells(nRow, "F") = TextBox4.Text

Cells(nRow, "E") = TextBox5.Text

Cells(nRow, "J") = TextBox6.Text

Cells(nRow, "G") = TextBox7.Text

Cells(nRow, "I") = TextBox8.Text

Cells(nRow, "H") = TextBox9.Text


28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

Private Sub CommandButton4_Click()

Unload Me

End Sub

SUB ORDENARPLANILHAS()
Dim t As Integer, i As Integer, c As Integer

Application.ScreenUpdating = False

t = Sheets.Count

If t = 1 Then Exit Sub

For i = 1 To t - 1

For c = i + 1 To t

If Sheets(c).Name < Sheets(i).Name Then _

Sheets(c).Move Before:=Sheets(i)

Next c

Next i

Application.ScreenUpdating = True

End Sub

A seguinte macro de exemplo compara uma lista (mestra) com a outra lista e exclui itens duplicados na
segunda lista e que também estejam na lista mestra. A primeira lista está na Planilha1 no intervalo A1:A10.
A segunda lista está na Planilha2 no intervalo A1:A100. Para usar a macro, selecione a planilha e, em
seguida, execute a macro.

Sub DelDups_TwoLists()

Dim iListCount As Integer Dim iCtr As Integer ' Turn off screen updating to speed up
macro. Application.ScreenUpdating = False ' Get count of records to search through (list
that will be deleted). iListCount = Sheets("Plan2").Range("A1:A100").Rows.Count ' Loop
through the "master" list. For Each x In Sheets("Plan1").Range("A1:A10") ' Loop through
all records in the second list. For iCtr = 1 To iListCount ' Do comparison of next
record. ' To specify a different column, change 1 to the column number. If x.Value =
Sheets("Plan2").Cells(iCtr, 1).Value Then ' If match is true then delete row.
Sheets("Plan2").Cells(iCtr, 1).Delete xlShiftUp ' Increment counter to account for
28/7/2014 MACROS PARA EXCEL - VBA-

deleted row. iCtr = iCtr + 1 End If Next iCtr Next Application.ScreenUpdating = True
MsgBox "Excluído!"

End Sub

‘ESTA MACRO SOMA AUTOMATICAMENTE UMA COLUNA


APRESENTADA
Sub Atualiza_Saldo()

Dim myRange As Range

Dim Var1 As Long

Dim Var2 As Long

Set myRange = Worksheets("Estoque").Range("J2:J1000")

Var1 = Application.WorksheetFunction.Sum(myRange)

Range("J1") = Var1

Set myRange = Worksheets("Estoque").Range("D2:D1000")

Var2 = Application.WorksheetFunction.Sum(myRange)

Range("K1") = Var2

End Sub

MACRO PARA PUXAR MENSAGEM DE CÉLULA EM LABEL

Private Sub UserForm_Initialize()

Dim strTotal As Double


28/7/2014 MACROS PARA EXCEL - VBA-

strMensagem = Worksheets("Atualizar").Range("j2").Value

Me.Label3.Caption = strMensagem

strMensagem = Worksheets("Atualizar").Range("j3").Value

Me.Label4.Caption = strMensagem

strMensagem = Worksheets("Atualizar").Range("j4").Value

Me.Label5.Caption = strMensagem

strMensagem = Worksheets("Atualizar").Range("c3").Value

Me.Label8.Caption = strMensagem

strMensagem = Worksheets("Dez").Range("r6").Value

Me.Label11.Caption = strMensagem

Me.Label6.Caption = Time

Me.Label7.Caption = Date

End Sub

MACRO PARA INSERIR LINHAS


Sub Insert_Rows_Loop()

Dim CurrentSheet As Object

' Loop through all selected sheets.


28/7/2014 MACROS PARA EXCEL - VBA-

For Each CurrentSheet In ActiveWindow.SelectedSheets

' Insert 5 rows at top of each sheet.

CurrentSheet.Range("a1:a5").EntireRow.Insert

Next CurrentSheet

End Sub

MACRO PARA INSERIR COLUNAS


Sub Select_Insert_Column()

Dim MyRange as Object

' Store the selected range in a variable.

Set MyRange = Selection

' Select the entire column.

Selection.EntireColumn.Select

' Insert Columns in all selected sheets.

Selection.Insert

' Reselect the previously selected cells.

MyRange.Select

End Sub

INSERE UM "OK" NAS CELULAS "B2:B10" COM UM DUPLO CLICK

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect([B2:B10], Target) Is Nothing Then Target.Value = IIf(Target.Value = "", "ok", "")

Cancel = True
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

Celula A1 se for digita um número maior ou igual a zero, o interior da celula será colorido de Verde Claro

Celula A2 se for digita um número Menor ou igual a zero, o interior da celula será colorido de Laranja Claro

Private Sub Worksheet_Change(ByVal Target As Range)

'verifica se é número ou string

If IsNumeric(Range("A1").Value) = False Then

MsgBox ("Valor digitado nao númerico"), vbInformation, "Saberexcel.com"

' Range("A2").Interior.ColorIndex = xlNone

Exit Sub

End If

'verifica se é número ou string

If IsNumeric(Range("A2").Value) = False Then

MsgBox ("Valor digitado nao númerico"), vbInformation, "Saberexcel.com"

Range("A2").Interior.ColorIndex = xlNone

Exit Sub

End If

'verifica se maior ou igual a zero

If Range("A1").Value >= 0 Then

Range("A1").Interior.ColorIndex = 35

Else

Range("A1").Interior.ColorIndex = xlNone

End If

'verifica se menor ou igual a zero

If Range("A2").Value <= 0 Then

Range("A2").Interior.ColorIndex = 45

Else

Range("A2").Interior.ColorIndex = xlNone

End If

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

VBA EXCEL - INSERI UMA MARCA D’AGUA


‘Esta macro inseri uma marca d´agua na planilha de determinado tamanho
Sub Marca_Dagua()

ActiveSheet.Shapes.AddTextEffect _

(msoTextEffect1, “C O N F I D E N C I A L”, _

“Algerian”, 36#, msoFalse, _

msoFalse, 40, 300).Select

Selection.ShapeRange.Fill.Visible = msoTrue

Selection.ShapeRange.Fill.Solid

Selection.ShapeRange.Fill.ForeColor.SchemeColor = 22

Selection.ShapeRange.Fill.Transparency = 0.5

Selection.ShapeRange.Line.Weight = 0.75

Selection.ShapeRange.Line.DashStyle = msoLineSolid

Selection.ShapeRange.Line.Style = msoLineSingle

Selection.ShapeRange.Line.Transparency = 0#

Selection.ShapeRange.Line.Visible = msoFalse

Selection.ShapeRange.IncrementRotation -26.69

‘ Application.CommandBars(”WordArt”).Visible = False

Range(”A1″).Select

End Sub

INSERE MARCA DÀGUA

Sub Marca_Dagua()
28/7/2014 MACROS PARA EXCEL - VBA-

ActiveSheet.Shapes.AddTextEffect _

(msoTextEffect1, "J A N E I R O", _

"Algerian", 36#, msoFalse, _

msoFalse, 40, 300).Select

Selection.ShapeRange.Fill.Visible = msoTrue

Selection.ShapeRange.Fill.Solid

Selection.ShapeRange.Fill.ForeColor.SchemeColor = 22

Selection.ShapeRange.Fill.Transparency = 0.5

Selection.ShapeRange.Line.Weight = 0.75

Selection.ShapeRange.Line.DashStyle = msoLineSolid

Selection.ShapeRange.Line.Style = msoLineSingle

Selection.ShapeRange.Line.Transparency = 0#

Selection.ShapeRange.Line.Visible = msoFalse

Selection.ShapeRange.IncrementRotation -16.69

' Application.CommandBars("WordArt").Visible = False

Range("A1").Select

End Sub

*VBA EXCEL - INSERI FORMATAÇÃO EM CELULAS COM ZERO - EX: (


0 ) - ( 0,00 )
Option Explicit
‘Excel VBA - inseri formatação na célula onde há zero, ‘por exemplo: celula B5 = 0, acionar a macro: B5 = 0,00 ‘primeiramente cor azul,
posteriormente cor amarela.
Sub Inseri_formatacao_no_zero()
Dim Cel As Range, texto As Variant
For Each Cel In Selection
If Left(Cel.NumberFormat, 2) <> “;;” Then
Cel.NumberFormat = “;;” & “”"” & Cel & “”"”
Cel.Value = 0
‘Indica “Especial” celulas com determinado formato
Cel.Interior.ColorIndex = 34
Else
28/7/2014 MACROS PARA EXCEL - VBA-

texto = Split(Cel.NumberFormat, “;”)


Cel.NumberFormat = “#,##0.00″
Cel.Value = Mid(texto(2), 2, Len(texto(2)) - 2)
‘muda a cor da formatação
Cel.Interior.ColorIndex = 6
End If
Next
End Sub

FÓRMULAS EXCEL - FÓRMULA INSERI UMA FORMATAÇÃO


CONDICIONAL QUADRICULADA
Fórmulas Excel - Esta fórmula inseri uma formatação condicional quadriculada

Sselecionar a área e inserir a fórmula

=MOD(LIN();3)=MOD(COL();3)

INSERI LINHAS NO NOTEPAD (BLOCO DE NOTAS)


‘Esta macro inseri linhas no Notepad como teste.

Option Explicit

Sub Inseri_Texto_Teste_Notepad()

Dim Fso As Object, Dat As Object, i As Long

Set Fso = CreateObject(”Scripting.FileSystemObject”)

Set Dat = Fso.CreateTextFile(”c:\teste.txt”, True)

Dat.WriteLine (”Linha ” & 1 & “;Teste;” & 1 & “;E_Marcondes;Excel VBA®;http://excelvbaestudos.com.br”)

For i = 2 To 131

Dat.WriteLine (”Linha ” & i & “;Teste;” & i)

Next i

Dat.Close

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

INSERI UM AUTOFILTRO NA COLUNA A


‘Esta macro inseri um filtro na coluna A

Sub Inseri_Filtro_ColA()

Columns(”A:A”).Select

Selection.AutoFilter

Selection.AutoFilter Field:=1, Criteria1:=Valeur

End Sub

Sub filtre1(Valeur As String)

Columns(”A:A”).Select

Selection.AutoFilter

Selection.AutoFilter Field:=1, Criteria1:=Valeur

End Sub

=filtre1(”MaValeur”)

FÓRMULA INSERI UMA AUTONUMERAÇÃO


Esta fórmula inseri uma autonumeração

=SE(B1<>”";CONT.VALORES($B$1:B1)&”.”;”")

ou

=SE(B7<>”";CONT.VALORES($B$1:B7)&”º.”;”")

Inseri uma Autonumeração na célula “B1″

‘Ésta macro inseri uma autonumeração em B1‘a medida em que vai executando a macro vai

‘Incrementando um número em B2

Sub Autonumeracao_incrementa()

Dim ObjCell As Range

For Each ObjCell In Range(”B2″).Cells


28/7/2014 MACROS PARA EXCEL - VBA-

ObjCell.Value = ObjCell.Value + 1

Next

End Sub

INSERI UMA BARRA DE PROGRESSAO


‘Esta macro inseri uma barra de progressão com o percentual na Statusbar

Sub Minha_Barra_Progressao()

ActiveSheet.Shapes.AddShape(msoShapeRectangle, 120#, 102#, 300, 10).Select

Selection.Name = “fond”

With Selection.ShapeRange.Fill

.ForeColor.SchemeColor = 10

.Visible = msoTrue

.Solid

End With

ActiveSheet.Shapes.AddShape(msoShapeRectangle, 120, 102#, 6#, 10#).Select

Selection.Name = “prog”

With Selection.ShapeRange.Fill

.ForeColor.SchemeColor = 11

.Visible = msoTrue

.Solid

End With

Tot = 100

For i = 1 To Tot

For ii = 1 To 100

Range(”A1″).Select

Next ii
28/7/2014 MACROS PARA EXCEL - VBA-

ActiveCell = i

Application.StatusBar = “Trabalho em progressão! : ” & i / Tot & “/1 Efetuados”

ActiveSheet.Shapes(”prog”).Select

Selection.ShapeRange.IncrementLeft 300 / Tot

DoEvents

Next i

MsgBox “Terminou !”, 64, ” © Saberexcel.com”

Application.StatusBar = “”

Selection.Delete

Range(”A1″).Clear

ActiveSheet.Shapes(”fond”).Select

Selection.Delete

End Sub

INSERI UMA BARRA DE PROGRESSÃO


‘Esta macro inseri uma barra de progressão

Option Explicit

Sub BarraDeProgreso()

Dim R As Integer

Dim MT As Double

For R = 1 To 180

MT = Timer

Do

Loop While Timer - MT < 0.05

Application.StatusBar = “Progress: ” & R & ” de 180: ” & _

Format(R / 180, “Percent”) & ” — ” & “realizados”

DoEvents
28/7/2014 MACROS PARA EXCEL - VBA-

Next R

Application.StatusBar = False

End Sub

Esta macro inseri bordas em determinadas células contíguas

Sub borda_inseri()

With Range(”A6:E7,A8:E9,A10:E11,A12:E13,A14:E15,A16:E17,A18:E19,A20:E21,A22:E23,A24:E25,A26:E26″)

For x = 7 To 11

.Borders(x).LineStyle = xlContinuous

Next

End With

End Sub

INSERE NA COLUNA A1,B1,C1 (CABEÇALHO)


‘Esta macro insere na coluna A1,B1,C1 os dizeres abaixo - fazendo um cabeçalho

Sub Entre_Com_Dados()

Dim escreva_linha As Long

escreva_linha = ActiveSheet.Range(”A:A”).Find(”").Row

Cells(escreva_linha, 1).Value = “A_entre Aqui”

Cells(escreva_linha, 2).Value = “B_entre Aqui”

Cells(escreva_linha, 3).Value = “C_entre Aqui”

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

INSERI SHAPES CÉLULA ARREDONDANDO OS CANTOS


‘ Ésta macro arredonda o formato da célula, muda o formato quadrado para Redondo

‘Na verdade inseri uma autoforma (um shapes) e arredondando os cantos da célula.

Sub Celula_Arredonda()

Set depart = ActiveCell

r1 = depart.Height

r2 = depart.Width

r3 = depart.Top

r4 = depart.Left

ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, _

r4, r3, r2, r1).Select

Selection.ShapeRange.Line.ForeColor.SchemeColor = 12

Selection.ShapeRange.Fill.Visible = msoFalse

depart.Select

End Sub

VBA EXCEL - INSERI COLUNAS A PARTIR DE UM INPUTBOX


VBA Excel - esta macro inseri colunas a partir de um inputbox

Sub Inseri_colulnas()

‘© 2007 - XL-Eves®

Dim sTitel As String, sMedd As String

Dim iAntalRader As Integer

sTitel = “Inserir colunas”


28/7/2014 MACROS PARA EXCEL - VBA-

sMedd = “Digite o número de colunas que deseja inserir:”

ActiveSheet.Unprotect

iAntalRader = Application.InputBox(prompt:=sMedd, Title:=sTitel, Default:=”", Type:=1)

If iAntalRader < 1 Then Exit Sub

Selection.Resize(rowsize:=2).Columns(2).EntireColumn. _

Resize(columnsize:=iAntalRader).Insert

With ActiveSheet

.UsedRange

.Protect

End With

End Sub

INSERI COMENTÁRIO E AUTOR (PREDETERMINADO) E UMA FRASE


Esta macro inseri um comentário e adiciona o autor pré-determinado e frase

Sub Adicionar_comentario()

Selection.Font.ColorIndex = 3

Selection.Font.Bold = True

Selection.ClearComments ’seleciona e deleta o comentário para evitar um possível : erreur

ActiveCell.AddComment

ActiveCell.Comment.Text Text:=”XL-Eves®:” & Chr(10) & “Verificar o pagamento!”


End Sub

INSERI AS DOZE PLANILHAS DOS MESES


28/7/2014 MACROS PARA EXCEL - VBA-

‘Esta macro inseri 12 planilha referente aos meses do ano

Sub Inserir_planilha_meses()

Dim J As Integer

Dim K As Integer

Dim sMo(12) As String

sMo(1) = “Jan”

sMo(2) = “Fev”

sMo(3) = “Mar”

sMo(4) = “Abr”

sMo(5) = “Mai”

sMo(6) = “Jun”

sMo(7) = “Jul”

sMo(8) = “Ago”

sMo(9) = “Set”

sMo(10) = “Out”

sMo(11) = “Nov”

sMo(12) = “Dez”

For J = 1 To 12

If J <= Sheets.Count Then

If Left(Sheets(J).Name, 5) = “Sheet” Then

Sheets(J).Name = sMo(J)

Else

Sheets.Add.Move after:=Sheets(Sheets.Count)

ActiveSheet.Name = sMo(J)

End If

Else

Sheets.Add.Move after:=Sheets(Sheets.Count)

ActiveSheet.Name = sMo(J)
28/7/2014 MACROS PARA EXCEL - VBA-

End If

Next J

For J = 1 To 12

If Sheets(J).Name <> sMo(J) Then

For K = J + 1 To Sheets.Count

If Sheets(K).Name = sMo(J) Then

Sheets(K).Move Before:=Sheets(J)

End If

Next K

End If

Next J

End Sub

INSERI UMA PLANILHA POR SEMANA ATÉ O FIM DO ANO

‘Esta macro inseri uma planilha por semana até o fim do ano

Sub Ano_Workbook()

Dim iWeek As Integer

Dim sht As Variant

Dim sTemp As String

Dim dSDate As Date

sTemp = InputBox(”Insira a data para a primeira planilha:”, “Inicio de semana?”)

dSDate = CDate(sTemp)

Application.ScreenUpdating = False

Work sheets.Add After:=Work sheets(Work sheets.Count), _

Count:=(52 - Work sheets.Count)


28/7/2014 MACROS PARA EXCEL - VBA-

For Each sht In Work sheets

sht.Name = Format(dSDate, “dd-mmm-yyyy”)

dSDate = dSDate + 7

Next sht

Application.ScreenUpdating = True

End Sub

VBA EXCEL - INSERI FORMATAÇÃO EM CELULAS COM ZERO - EX: ( 0 ) -


( 0,00 )
Option Explicit
‘Excel VBA - inseri formatação na célula onde há zero,
‘por exemplo: celula B5 = 0, acionar a macro: B5 = 0,00
‘primeiramente cor azul, posteriormente cor amarela.
Sub Inseri_formatacao_no_zero()
Dim Cel As Range, texto As Variant
For Each Cel In Selection
If Left(Cel.NumberFormat, 2) <> “;;” Then
Cel.NumberFormat = “;;” & “”"” & Cel & “”"”
Cel.Value = 0
‘Indica “Especial” celulas com determinado formato
Cel.Interior.ColorIndex = 34
Else
texto = Split(Cel.NumberFormat, “;”)
Cel.NumberFormat = “#,##0.00″
Cel.Value = Mid(texto(2), 2, Len(texto(2)) - 2)
‘muda a cor da formatação
Cel.Interior.ColorIndex = 6
End If
Next
End Sub

VBA EXCEL - INSERI UM ÍCONE DO NOTEPAD NO EXCEL


VBA Excel

‘inseri o ícone do NotePad no Excel ícone, muda ícone Word, NotePad..

‘Isto é, muda o ícone do Excel, para qualquer que desejar

Declare Function GetActiveWindow32 Lib “USER32″ Alias _

“GetActiveWindow” () As Integer
28/7/2014 MACROS PARA EXCEL - VBA-

Declare Function SendMessage32 Lib “USER32″ Alias _

“Se0ndMessageA” (ByVal hWnd As Long, ByVal wMsg As Long, _

ByVal wParam As Long, ByVal lParam As Long) As Long

Declare Function ExtractIcon32 Lib “SHELL32.DLL” Alias _

“ExtractIconA” (ByVal hInst As Long, _

ByVal lpszExeFileName As String, _

ByVal nIconIndex As Long) As Long

Sub ChangeXLIcon()

Dim h32NewIcon As Long

Dim h32WndXLMAIN As Long

h32NewIcon = ExtractIcon32(0, “Notepad.exe”, 0)

h32WndXLMAIN = GetActiveWindow32()

SendMessage32 h32WndXLMAIN, &H80, 1, h32NewIcon ‘Icon big

SendMessage32 h32WndXLMAIN, &H80, 0, h32NewIcon ‘Icon small

End Sub

VBA EXCEL - INSERI UM RODAPÉ PERSONALIZADO


VBA Excel - Inseri rodapé, inseri nº pg. Números de pagina no rodapé da impressão
Sub Rodapé_Personalizado()

With ActiveSheet.PageSetup

.LeftHeader = “”

.CenterHeader = “”

.RightHeader = “”

.LeftFooter = “Editado dia: &D”

.CenterFooter = “Pg: &P / &N”

.RightFooter = “Origem : &F - &A”

End With
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

INSERIR UM GRÁFICO NO COMENTÁRIO, SERÁ QUE É POSSÍVEL???


‘Sim é possível, é um efeito muito bacana.!. ‘Esta macro pega o gráfico da plan1, e inseri no comentário na célula A1 da Plan1 forneça
para macro o ‘endereço, caminho correto do Gráfico

Sub Inseri_Image_Grafico_dentro_comentario_CelulaA1()

Dim nomImage As String

Dim Grph As ChartObject

Dim Hauteur As Single, Largeur As Single

nomImage = "C:\imageTemp.gif"

‘Mudar para a plan que está o gráfico

Set Grph = Plan1.ChartObjects(1)

'Exporte le graphique au format image GIF

Grph.Chart.Export nomImage, "GIF"

'recupera a dimensão do gráfico para aplicar no comentário

Hauteur = Grph.Height

Largeur = Grph.Width

'Verifica se já existe um comentário na celula A1

'e deleta se existe

If Not Plan1.Range("A1").Comment Is Nothing Then _

Plan1.Range("A1").Comment.Delete

'Criar um novo comentário na célula a1


28/7/2014 MACROS PARA EXCEL - VBA-

With Plan1.Range("A1")

.AddComment

.Comment.Visible = False

'Define a altura do comentário

'do grafico

.Comment.Shape.Height = Hauteur

'Define a largura do comentário

.Comment.Shape.Width = Largeur

'Inseri a imagem dentro do comentário

.Comment.Shape.Fill.UserPicture nomImage

End With

'deleta a imagem exportada

Kill nomImage

'deleta o gráfico

Grph.Delete

End Sub

INSERIR ESTES CÓDIGOS NO MÓDULO DA PLANILHA


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If IsEmpty(Range("A1")) Then ‘Não pode conter valor negativo em célula módulo da planilha

Exit Sub

End If

If Range("A1") < 0 Then

MsgBox "O valor não pode ser negativo! Tente outra vez!!!"

Range("A1").ClearContents

ElseIf Range("A1") <= 5 Then


28/7/2014 MACROS PARA EXCEL - VBA-

MsgBox "O valor não pode ser menor que 5 ! Tente outra vez!!!"

Range("A1").ClearContents

Else

Exit Sub

End If

End Sub

ORDENAR CRESCENTE
Sub Ordenar_Crescente()

Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False,


Orientation:=xlTopToBottom

End Sub

ORDENAR PLANILHAS
Sub ClassificarPlanilhas()

' Rotina para classificar planilhas em ordem crescente

Dim SheetNames() As String

Dim i As Integer

Dim SheetCount As Integer

Dim VisibleWins As Integer

Dim Item As Object

Dim OldActive As Object ' Checa se as estruturas das planilhas estão protegidas

If ActiveWorkbook.ProtectStructure Then

MsgBox ActiveWorkbook.Name & " is protected.", vbCritical, "Cannot Sort Sheets"

Exit Sub
28/7/2014 MACROS PARA EXCEL - VBA-

End If

' Disativa Ctrl+Break

Application.EnableCancelKey = xlDisabled

' Sai se a janela não estiver visivel

VisibleWins = 0

For Each Item In Windows

If Item.Visible Then VisibleWins = VisibleWins + 1

Next Item

If VisibleWins = 0 Then Exit Sub ' conta nº de planilhas

SheetCount = ActiveWorkbook.Sheets.Count

' Redimensiona o array

ReDim SheetNames(1 To SheetCount)

' grava o nome da planilha ativa

Set OldActive = ActiveSheet

' prepara um array com os nomes das planilhas

For i = 1 To SheetCount

SheetNames(i) = ActiveWorkbook.Sheets(i).Name

Next i

' calssifica este array

Call Classificar(SheetNames)

' desativa atualização de tela

Application.ScreenUpdating = False

' move as planilhas

For i = 1 To SheetCount

ActiveWorkbook.Sheets(SheetNames(i)).Move ActiveWorkbook.Sheets(i)

Next i

' seleciona a planilha que havia gravado

OldActive.Activate

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SUB CLASSIFICAR(LIST() AS STRING) 'CLASSIFICA AS PLANILHAS EM


ORDEM CRESCENTE
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer

Dim Temp

First = LBound(List)

Last = UBound(List)

For i = First To Last - 1

For j = i + 1 To Last

If UCase(List(i)) > UCase(List(j)) Then

Temp = List(j)

List(j) = List(i)

List(i) = Temp

End If

Next j

Next i

Plan1.Activate

End Sub

MACRO PARA INSERIR DADOS


Private Sub Cmd_Inserir_Click()

Selection.EntireRow.Insert

TextBox1 = Empty

TextBox2 = Empty

TextBox3 = Empty
28/7/2014 MACROS PARA EXCEL - VBA-

TextBox1.SetFocus

Ordenar

End Sub

‘DESPROTEGER PLAN

Sub desproteger()
'O que
você quer, aqui você pode

'Modulo para desproteger suas planilhas de excel.


Dim i As Integer, j As Integer, k As
Integer
Dim l As
Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer

Dim i4 As Integer, i5 As
Integer, i6 As Integer

On Error Resume Next


For
i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For
i1 = 65 To 66
For i2 =
65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For
n = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _

Chr(l) &
Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) &
Chr(i6) & Chr(n)
If
ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " &
Chr(i) & Chr(j) & _

Chr(k) & Chr(l) & Chr(m) &


Chr(i1) & Chr(i2) & _

Chr(i3) & Chr(i4) & Chr(i5) &


Chr(i6) & Chr(n)
28/7/2014 MACROS PARA EXCEL - VBA-

Exit Sub

End If
Next:
Next: Next: Next: Next: Next

Next: Next: Next: Next: Next: Next


End Sub

DESPROTEGER VÁRIAS PLANILHAS


Sub desproteger_todas_planilhas()

Dim i As Integer

' faz um loop nas planilhas padrão do excel


' caso haja mais do que 03 planilhas a serem desprotegidas altere o numero 3 pra a quantidade desejada

For i = 1 To 3
Sheets(i).Unprotect Password:="164713" ' onde 123 é a senha informada
Next i
MsgBox "Planilhas desprotegidas com sucesso!!!" ' mensagem opcional
End Sub

PROTEGER VÁRIAS PLANILHAS


Sub proteger_todas_planilhas()

Dim i As Integer

' faz um loop nas planilhas padrão do excel


' caso haja mais do que 03 planilhas a serem protegidas altere o numero 3 para a quantidade desejada

For i = 1 To 3
Sheets(i).Protect Password:="164713" ' onde 123 é a senha informada
28/7/2014 MACROS PARA EXCEL - VBA-

Next i
MsgBox "Planilhas protegidas com sucesso!!!" ' mensagem opcional
End Sub

‘REEXIBINDO VÁRIAS PLANILHAS


Sub reexibindo_planilhas()

Dim i As Integer

'O codigo abaixo fará um loop em todas as planilhas que você deseja reexibir
'Obs: temos sempre que deixar no minimo 01 planilha ativa

For i = 1 To 2 ' numero de planilhas a serem reexibidas


Sheets(i).Visible = -1
Next i
MsgBox "Planilhas Exibidas com sucesso" 'mensagem opcional
End Sub

Existem planilhas pesadas que sobrecarregam nossas máquinas e deixam nosso ambiente de trabalho lento. Para que isso
não ocorra com o Excel aí vai uma super dica: quando abrirmos uma nova planilha o Excel fecha e salva o arquivo
anterior, não permitindo que o sistema fique sobrecarregado.

Em EstaPasta_de_Trabalho insira o código abaixo.

Private Sub Workbook_Open()

Em EstaPasta_de_Trabalho insira o código abaixo.

Private Sub Workbook_Open()

outrasjanelas

End Sub

Simples não? Mas para que nosso código funcione, insira um módulo e copie o seguinte código:

Sub outrasjanelas()

Application.EnableCancelKey = xlDisabled

On Error Resume Next

n = Application.Windows.Count

If (n > 1) Then
28/7/2014 MACROS PARA EXCEL - VBA-

resp = MsgBox("É preciso fechar os outros arquivos de Excel para abrir este." & Chr(13) & "Deseja fechar os outros
arquivos agora ?", vbYesNo + vbExclamation, "Fechar arquivos")

If (resp = vbYes) Then

For i = 1 To n

If (Application.Windows(i).Caption <> ThisWorkbook.Name) Then

Application.Windows(i).Close SaveChanges:=True

End If

Next i

For i = 1 To n

If (Application.Windows(i).Caption <> ThisWorkbook.Name) Then

Application.Windows(i).Close SaveChanges = True

End If

Next i

Else

MsgBox "Esta tabela será fechada." & Chr(13) & "Feche os outros arquivos e abra a tabela novamente.", vbOKOnly +
vbExclamation, "Fechando tabela"

ThisWorkbook.Close

End If

End If

End Sub

SUB INSERIRPLANILHACOMNOME()
Dim nome
Sheets.Add ' inseri uma nova planilha
nome = InputBox("Informar nome da nova planilha") 'solicita o nome da nova planilha
ActiveSheet.Name = nome ' renomeia a planilha
End Sub

Sub Ocultando_coluna()

' Macro gravada por Dicas de Excel


28/7/2014 MACROS PARA EXCEL - VBA-

Columns("B:B").Select

Selection.EntireColumn.Hidden = True

End Sub

SUB OCULTAR_COLUNA()

' Forma abreviada

' Macro gravada por Dicas de Excel

Columns("C:C").EntireColumn.Hidden = True ' para reexibir altere true por false

End Sub

Sub Exibindo_coluna()

' Macro gravada por Dicas de Excel

Columns("B:B").Select

Selection.EntireColumn.Hidden = False

End Sub

SUB EXIBINDO_COLUNA2()
' Forma abreviada

' Macro gravada por Dicas de Excel

Columns("C:C").EntireColumn.Hidden = False

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

SUB SELECIONANDO_PLANILHA()
' Macro gravada por Dicas de Excel

Sheets("Plan2").Select

End Sub

SUB SELECINAR_CÉLULA()
' Macro gravada por Dicas de Excel

Range("B10").Select

End Sub

SUB PREENCHER_CÉLULA()
' Macro gravada por Dicas de Excel

Range("B8").Select

ActiveCell.FormulaR1C1 = 10 ' vale lembrar que quando for referenciar números não é necessário o uso das aspas

End Sub

SUB OCULTAR_LINHA()
' Macro gravada por Dicas de Excel

Rows("8:8").EntireRow.Hidden = True ' para reexibir altere true por false


28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

SUB RENOMEAR PLANILHA()


' Macro gravada por Dicas de Excel

Sheets("Plan1").Name = "Teste"

End Sub

SUB COPIAR_E_COLAR()
Range("B5").Select

Selection.Copy

Range("B7").Select

ActiveSheet.Paste

End Sub

SUB MAXIMIZAR TELA()


' Macro gravada por Dicas de Excel

ActiveWindow.WindowState = xlMaximized 'para minimizar altere para xlMinimized

End Sub

SUB CALCULA2()
If TextBox_Quantidade.Value > "" And TextBox_Com.Value > "" Then

TextBox_Total.Value = TextBox_Quantidade.Value * TextBox_Com.Value

TextBox_Total.Value = FormatCurrency(TextBox_Total.Value)

End If
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

Private Sub TextBox_Quantidade_Change()

If TextBox_Quantidade.Value = "" Then

TextBox_Total.Value = ""

Exit Sub

End If

If IsNumeric(TextBox_Quantidade.Value) Then

Calcula

Else

MsgBox "Digite o Valor:" & TextBox_Quantidade.Value

TextBox_Quantidade.Value = ""

TextBox_VUnitário.SetFocus

End If

End Sub

SUB MACRO_OTIMIZADA()
' Nesta macro iremos criar um novo documento, inserir dados em células, renomear planilhas e criar uma formula simples.

‘Se houver alguma duvida sobre a macro criada refaça passo a passo até o total entendimento.

Workbooks.Add

ActiveWorkbook.SaveAs "C:\Meus documentos\Dados.xls"

ActiveWorkbook.Worksheets.Add

ActiveSheet.Name = "Dados"

Workbooks.Add

ActiveWorkbook.SaveAs "C:\Meus documentos\Resultados.xls"

ActiveWorkbook.Worksheets.Add

ActiveSheet.Name = "Resultados"

Workbooks("Dados.xls").Sheets("Dados").Range("A1").Value = 10

Workbooks("Dados.xls").Sheets("Dados").Range("A2").Value = 20
28/7/2014 MACROS PARA EXCEL - VBA-

Workbooks("Dados.xls").Sheets("Dados").Range("A3").Value = 30

Workbooks("Dados.xls").Sheets("Dados").Range("B1").Value = 100

Workbooks("Dados.xls").Sheets("Dados").Range("B2").Value = 200

Workbooks("Dados.xls").Sheets("Dados").Range("B3").Value = 300

Workbooks("Dados.xls").Sheets("Dados").Range("C1").Value = 1000

Workbooks("Dados.xls").Sheets("Dados").Range("C2").Value = 2000

Workbooks("Dados.xls").Sheets("Dados").Range("C3").Value = 3000

Workbooks("Resultados.xls").Sheets("Resultados").Range("A1").Value = "Total da Coluna A"

Workbooks("Resultados.xls").Sheets("Resultados").Range("B1").Value = "Total da Coluna B"

Workbooks("Resultados.xls").Sheets("Resultados").Range("C1").Value = "Total da Coluna C"

Workbooks("Resultados.xls").Sheets("Resultados").Range("A2").Value = "=SUM([Dados.xls]Dados!$A$1:$A$3)"

Workbooks("Resultados.xls").Sheets("Resultados").Range("B2").Value = "=SUM([Dados.xls]Dados!$B$1:$B$3)"

Workbooks("Resultados.xls").Sheets("Resultados").Range("C2").Value = "=SUM([Dados.xls]Dados!$C$1:$C$3)"

End Sub

‘SELECIONANDO PLANILHAS COM VALORES DETERMINADOS


’Vamos supor que você queira selecionar planilhas na qual suas respectivas células "A1" tenham ‘valor igual a 50.

Sub selecionarplanval()
dim procv() as variant
nbplan=0
for i=0 to sheets.count-1
if sheets (i+1).range("a1").value=50 then
redim preserve procv(nbplan)
procv(nbplan)=sheets(i+1).name
nbplan=nbplan+1
end if
next
sheets(procv).select
end sub
28/7/2014 MACROS PARA EXCEL - VBA-

CRIANDO UMA PLANILHA


sheets.add

Criando uma planilha com nome

sheets.add.name="Teste"

EXCLUINDO PLANILHA
Sub ExcluirPlan()
sheets("plan1").delete ou activesheet.delete ou sheets (1).delete
End Sub

’Dentro do editor de VBA (alt + F11) existe uma propriedade que no meu ponto de vista é de ‘essencial
conhecimento, a propriedade ScrollArea, nela podemos determinar quais células ‘deixaremos visível ou não em uma
determinada planilha.

Exemplo
Sub Congelar_Painel ()
Worksheets(1).scrollarea="a1:f100"
End Sub
’ou preencher na própria propriedade
$a$1:$f$100

Sub ocultando_planilhas()

Dim i As Integer

'O codigo abaixo fará um loop em todas as planilhas que você deseja ocultar
'Obs: temos sempre que deixar no minimo 01 planilha ativa

For i = 1 To 2 'numero de planilhas a serem ocultadas


Sheets(i).Visible = 2
Next i
MsgBox "Planilhas ocultadas com sucesso!!!" 'mensagem opcional
End Sub

‘MACRO PARA FAZER ALTERAÇÃO 1 LISTBOX -1 FORM COM


TEXTBOX- 1 COMMANDBUTTOM
28/7/2014 MACROS PARA EXCEL - VBA-

Private Sub Cmd_AlterarProdutos_Click()

Application.ScreenUpdating = False

Application.EnableCancelKey = xlDisabled

If Me.ListBox_Alterar.ListIndex = -1 Then

MsgBox "Selecione uma identificação.", , "Aviso"

Exit Sub

End If

Sheets("Inicial").Select

Range("b2").Select

Dim linha

Dim nvCódigo

Dim nvCategoria

Dim nvDescrição

Dim nvMarca

Dim nvQuantidade

Dim nvEspécie

Dim nvCom

Dim nvTotal

Dim nvVUnitário

Dim nvTReal

Dim nvVVenda

Dim nvNF

linha = ListBox_Alterar.ListIndex

nvCódigo = TxtCódigo

nvCategoria = TxtCategoria

nvDescrição = TxtDescrição

nvMarca = TxtMarca

nvQuantidade = TxtQuantidade

nvEspécie = TxtEspécie

nvCom = TxtCom

nvTotal = TxtTotal
28/7/2014 MACROS PARA EXCEL - VBA-

nvVUnitário = TxtVUnitário

nvTReal = TxtTReal

nvVVenda = TxtVVenda

nvNF = TxtNF

ActiveCell.Offset(linha, 0) = nvCódigo

ActiveCell.Offset(linha, 1) = nvCategoria

ActiveCell.Offset(linha, 2) = nvDescrição

ActiveCell.Offset(linha, 3) = nvMarca

ActiveCell.Offset(linha, 4) = nvQuantidade

ActiveCell.Offset(linha, 5) = nvEspécie

ActiveCell.Offset(linha, 6) = nvCom

ActiveCell.Offset(linha, 7) = nvTotal

ActiveCell.Offset(linha, 8) = nvVUnitário

ActiveCell.Offset(linha, 9) = nvTReal

ActiveCell.Offset(linha, 10) = nvVVenda

ActiveCell.Offset(linha, 12) = nvNF

MsgBox "Dados atualizados com sucesso.", , "Confirmação"

ActiveWorkbook.Save

End Sub

Private Sub ListBox_Alterar_Click()

TxtCódigo = ListBox_Alterar.Value

TxtCategoria = ListBox_Alterar.Column(1)

TxtDescrição = ListBox_Alterar.Column(2)

TxtMarca = ListBox_Alterar.Column(3)

TxtQuantidade = ListBox_Alterar.Column(4)

TxtEspécie = ListBox_Alterar.Column(5)

TxtCom = ListBox_Alterar.Column(6)

TxtTotal = ListBox_Alterar.Column(7)

TxtVUnitário = ListBox_Alterar.Column(8)

TxtTReal = ListBox_Alterar.Column(9)
28/7/2014 MACROS PARA EXCEL - VBA-

TxtVVenda = ListBox_Alterar.Column(10)

TxtNF = ListBox_Alterar.Column(12)

*VBA - FORMATAÇÕES E MACROS PARA TEXTBOX'S


Formatação de datas numa TextBox simples. Ao digitar uma data num TextBox esta macro insere automaticamente os separadores, a
unica regra é inserir o dia e o mês com 2 dígitos e o ano com 2 ou 4 dígitos. Ao digitar o 2º digito do dia ou do mês a barra é adicionada
automaticamente. Sem validação de digitação. Esta é mais completa, além de inserir os já referidos separadores, permite apagar sem que
seja preenchido automaticamente as '/' e faz também uma verificação dos caracteres permitidos numa data

Private Sub txtData_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Select Case KeyAscii

Case 8, 48 To 57 ' BackSpace e numericos

If Len(txtData) = 2 Or Len(txtData) = 5 Then

txtData.Text = txtData.Text & "/"

SendKeys "{End}", False

End If

Case Else ' o resto é travado

KeyAscii = 0

End Select

End Sub

‘TEXBOX SÓ PARA NUMERICOS


Permite separar os decimais através de uma virgula, não deixando uma segunda digitação deste caracter

Private Sub txtNumericos_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Select Case KeyAscii

' BackSpace e numericos


28/7/2014 MACROS PARA EXCEL - VBA-

Case 8, 48 To 57

' Virgula, só permite uma, para separador de decimais

Case 44

If InStr(1, txtnumericos.Text, Chr(44), vbTextCompare) > 1 Then _

KeyAscii = 0

Case Else ' o resto é travado

KeyAscii = 0

End Select

End Sub

‘SELECIONAR O CONTEÚDO DE UMA TEXTBOX

Private Sub TesteSeleccionarTexto_de_Textbox()

With TextBox

.SetFocus

.SelStart = 0

.SelLength = Len(.Text)

End With

End Sub

GRÁFICO
Sub Visualiza_Gráfico()

Dim oChart As Object

For Each oChart In ActiveSheet.ChartObjects

oChart.Activate

ActiveChart.PrintPreview

Next

End Sub
28/7/2014 MACROS PARA EXCEL - VBA-

‘INSERIR GRÁFICO EM FORM


Segue uma solução adaptada deum exemplo do livro Poer Programming with VBA

1. Crie o gráfico que deseja inserir

2. Crie o userform e adicione um controle Image.

3. Crie um código VBA para salvar o gráfico como um arquivo GIF e estabeleça a propriedade Picture do
controle Image para o arquivo GIF, usando a função LoadPicture

4. Com base na sua necessidade estabeleça a forma de atualização das informações do gráfico no
Userform.

Exemplo de código com comentários

EM UM BOTÃO

Code Snippet

Sub InserirGráficoemUserform()

'Transfere para a variável Gráfico o 1º gráfico da planilha 'Exemplo"

Set Gráfico = Sheets("Exemplo").ChartObjects(1).Chart

'Cria o caminho e nome para salvamento do arquivo GIF

ArquivoGIF = ThisWorkbook.Path & "\temp.gif"

'Salva o gráfico como arquivo GIF

Gráfico.Export FileName:=ArquivoGIF, FilterName:="GIF"

'Carrega o gráfico salvo para o Controle Image1 do Userform

Image1.Picture = LoadPicture(ArquivoGIF)

End Sub

‘MACRO P/ PESQUISA 1 USERFORM 1 TEXTBOX 1 BOTÃO COMANDO


Private Sub CommandButton1_Click()
Dim Planilha
Dim firstAddress
Dim Address
Dim Pesquisa
Dim Texto
Dim k
28/7/2014 MACROS PARA EXCEL - VBA-

Dim ValorPesquisado
Dim ValorColB, ValorColC, ValorColD

Unload Me
ValorPesquisado = TextBox1.Value
If ValorPesquisado = "" Then Exit Sub
For Each Planilha In ThisWorkbook.Sheets
With Planilha.Cells
Set Pesquisa = .Find(ValorPesquisado, LookIn:=xlValues)
If Not Pesquisa Is Nothing Then
firstAddress = Pesquisa.Address
k=0
Do While firstAddress <> Address
Address = Pesquisa.Address
ValorColB = Planilha.Range(Address).Offset(rowOffset:=0, columnOffset:=1)
ValorColC = Planilha.Range(Address).Offset(rowOffset:=0, columnOffset:=2)
ValorColD = Planilha.Range(Address).Offset(rowOffset:=0, columnOffset:=3)

Texto = Texto & "Na planilha " & Planilha.Name & " na célula " & "!" & Address & vbCr

'Somente o conteúdo das células igual a planilha

Texto = Texto & ValorColB & vbTab & ValorColC & vbTab & ValorColD

' Texto = Texto & vbLf & vbLf & " CAMPO1: " & ValorColB
' Texto = Texto & vbLf & vbLf & " CAMPO2: " & ValorColC
' Texto = Texto & vbLf & vbLf & " CAMPO3: " & ValorColD
Exit For
'Set c = .FindNext(c)
Loop
End If
End With
Next Planilha
If IsEmpty(Texto) Then
MsgBox "Não foi possível localizar a matrícula." & vbLf & "Verifique o valor digitado e refaça a sua busca."
Else
MsgBox "O item solicitado foi localizado na: " & Texto
End If
End Sub

SUB CALCULA2()
If TextBox_Quantidade.Value > "" And TextBox_Com.Value > "" Then

TextBox_Total.Value = TextBox_Quantidade.Value * TextBox_Com.Value

TextBox_Total.Value = FormatCurrency(TextBox_Total.Value)
28/7/2014 MACROS PARA EXCEL - VBA-

End If

End Sub

Private Sub TextBox_Quantidade_Change()

If TextBox_Quantidade.Value = "" Then

TextBox_Total.Value = ""

Exit Sub

End If

If IsNumeric(TextBox_Quantidade.Value) Then

Calcula

Else

MsgBox "Digite o Valor:" & TextBox_Quantidade.Value

TextBox_Quantidade.Value = ""

TextBox_VUnitário.SetFocus

End If

End Sub

Private Sub TextBox_Com_Change()

If TextBox_Com.Value = "" Then

TextBox_Com.Value = ""

Exit Sub

End If

If IsNumeric(TextBox_Com.Value) Then

Calcula

Else

MsgBox "Digite o Valor:" & TextBox_Com.Value

TextBox_Com.Value = ""

TextBox_VUnitário.SetFocus

End If
28/7/2014 MACROS PARA EXCEL - VBA-

End Sub

Вам также может понравиться