Академический Документы
Профессиональный Документы
Культура Документы
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
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-
Decompõe uma frase de uma célula, cada palavra célula diferente ............................................................65
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
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
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-
A macro abaixo lista os nomes das planilhas existente no seu projeto .....................................................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
Backup ........................................................................................................................................................135
Listar LISTVIEW Esta acro lista dados de uma plan p/ListView ...........................................................143
Função para calcular a direfença entre uma data qualque e hoje ................................................................158
Função REPT ..............................................................................................................................................158
Função "CARACT" ....................................................................................................................................158
'Esta função captura todo o conteúdo de sua tela atual e coloca em PictureBox .........................................160
Senha 2 .......................................................................................................................................................163
Senha 3 ........................................................................................................................................................163
Caixa ..............................................................................................................................................................182
Extenso ..........................................................................................................................................................186
Inserir .............................................................................................................................................................190
CÓDIGOS
Sub ExibirForm() ...........................................................................................................................................195
Comentários ...................................................................................................................................................202
Imagem ..........................................................................................................................................................204
MÓDULOS
Function ProcessaParcela(num) As String ....................................................................................................205
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
Gráfico .........................................................................................................................................................230
End Function
função área
If IsMissing(Width) Then
Else
End If
End Function
=Area(B1;B1)
End Function
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
‘[>=200000000](##\ #) ##\ ##\ ##\ ##;[>=100000000](##) ##\ ##\ ##\ ##:00\ 00\ 00\ 00 este da um erro >> substitui pela formatação
abaixo
KILOFRANCS (KF):
1.250.000,00 F .250 KF
Sub Verificar_Formato()
Range(”A1″).Select
Frt = Selection.NumberFormat
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
Sub Formatação_perssonalizada()
ActiveCell.Select
Selection.Style = “Currency”
Else
End If
End Sub
If HasCondFormat(ActiveCell) Then
End If
End Sub
=AleatórioLoto(1;49;6)
Dim i As Integer
Application.Volatile
For i = 1 To Amount
Loop
Next i
AleatorioLoto = strNum
End Function
Sub Loto()
For i = 1 To 60
28/7/2014 MACROS PARA EXCEL - VBA-
balls(i) = i
Next
Randomize Timer
For i = 1 To 6
balls(choice) = balls(60 - i)
Next
End Sub
tem que copiar todo código para lixeira - somente copiar e colar no módulo normal
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()
End Sub
With FileOperation
.wFunc = FO_DELETE
.pFrom = sFile
.fFlags = FOF_ALLOWUNDO
End With
lReturn = SHFileOperation(FileOperation)
End Sub
Sub Copia_linha_ate_a_ultima()
Dim i As Integer
ligne1:
ActiveCell.Offset(1, 0).Select
GoTo ligne1:
ligne99:
28/7/2014 MACROS PARA EXCEL - VBA-
Range(”A1″).Select
End Sub
Sub conta_linhas()
minha_linha = Selection.Rows.Count
MsgBox minha_linha
End Sub
Sub Deleta_Linhas_Branco()
Sheets(”SuaPlanilha”).Select
Dim r, c, x As Integer
For r = 1 To 150
For c = 1 To 184
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
‘find out what the column before the next non-blank cell is
28/7/2014 MACROS PARA EXCEL - VBA-
Y=x-1
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
Case 0
Case Else
Exit Sub
End Select
End If
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
Sub Atribui_altura_linhas()
AHauteur = Application.InputBox _
ASelectionner.RowHeight = AHauteur
End Sub
Sub Example_Show_Help()
IDNum = 5199659
End If
If Val(Application.Version) = 12 Then
End If
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub PCInformation()
Dim msg
End Sub
Sub Retorna_Logon_Nome()
MsgBox LogonName
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Option Explicit
Alias “GetComputerNameA” _
BuffLen = 256
End Function
BuffLen = 255
End Function
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Teste_Usuário_host()
End Sub
Dim j As Long
Dim i As Long
Call GetVolumeInformation _
GetSerialNumber = ser
End Function
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Teste_Numero_HD()
End Sub
Function DriveSerialNumber(Lecteur)
Dim sab, d
Set d = sab.GetDrive(sab.GetDriveName _
DriveSerialNumber = d.SerialNumber
End Function
‘conforme abaixo
Sub Teste_Nivel_Segurança()
MsgBox Nivel_Seguranca
End Sub
Function Nivel_Seguranca()
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”
Case 9
Nivel_Seguranca = WSH.RegRead(Cle2000)
Case 10
Nivel_Seguranca = WSH.RegRead(Cle2002)
Case 11
Nivel_Seguranca = WSH.RegRead(Cle2003)
Case Else
End Select
End Function
‘na memória RAM do seu computador, cria uma planilha com a relação
Private Declare Function GetParent Lib “user32″ (ByVal hwnd As Long) As Long
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2
Sub Load_Lista_Memória()
i=1
Length = GetWindowTextLength(CurrWnd)
TaskName = Space$(Length + 1)
i=i+1
End If
DoEvents
Wend
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
Sub TestCommand()
MsgBox VBACommand
MsgBox VBACommand2
End Sub
Dim i As Long
Addr = GetCommandLine()
i = InStr(sTemp, Chr$(0))
If i > 0 Then
VBACommand = Left$(sTemp, i - 1)
Else
End If
End Function
Buffer = String$(BufferLen, 0)
Addr = GetCommandLine()
End Function
Sub NoAlerts()
Application.DisplayAlerts=False
Application.DisplayAlerts=True
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Encerrar()
ActiveWorkbook.Save
Application.Quit
End Sub
dctDict As Scripting.Dictionary, _
‘http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office09072000.asp
‘ Get folder.
‘ Incorrect path.
GetFiles = False
28/7/2014 MACROS PARA EXCEL - VBA-
GoTo GetFiles_End
End If
On Error GoTo 0
Next filFile
If blnRecursive Then
Next fdrSubFolder
End If
GetFiles = True
GetFiles_End:
Exit Function
End Function
Sub TestGetFiles()
strDirPath = “D:\06OfficeVBA\04Modules\”
Sheets.Add
Application.Transpose(dctDict.Items)
End If
End Sub
Sub Lista_todos_arquivos_C()
Lister 1, “c:\”
End Sub
Cells(nRow, 1) = FolderName
nRow = nRow + 1
28/7/2014 MACROS PARA EXCEL - VBA-
Loop
End If
Folder = Dir
Loop
End If
nbFolders(i) = Dir
Loop
For i = 1 To UBound(nbFolders()) - 1
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Idx = Idx + 1
Next
Next sousRep
End Sub
Sub Mostra_todos_Arquivos_de_programas()
End Sub
Sub Testar_Lista_Arquivos_InFolder()
28/7/2014 MACROS PARA EXCEL - VBA-
Dim RootFolder$
‘ Diretório à scanear
RootFolder = ChoisirDossier
Workbooks.Add
‘ add headers
With Range(”A1″)
.Font.Bold = True
.Font.Size = 12
End With
Range(”A3″).Formula = “Caminho: “
Range(”B3″).Formula = “Nome : “
With Range(”A3:E3″)
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Columns(”A:H”).AutoFit
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Dim r As Long
r = Range(”A65536″).End(xlUp).Row + 1
r=r+1
Next FileItem
If IncludeSubfolders Then
Next SubFolder
End If
ActiveWorkbook.Saved = True
End Sub
Set objFolder = _
chemin = “C:\Windows\Bureau”
End If
If objFolder.Title = “” Then
chemin = “”
End If
End If
28/7/2014 MACROS PARA EXCEL - VBA-
ChoisirDossier = chemin
End Function
Sub Teste()
Dim Fich$
Fich = Application.GetOpenFilename
End Sub
‘Utilisation:
Fic = s
Do
End Function
Function SplitInfo(NomFich$)
End Function
Function FSOInfo(NomFich$)
Chemin = Fich.ParentFolder
NomBase = fso.GetBaseName(NomFich)
Ext = fso.GetExtensionName(NomFich)
End Function
Sub Criar_Escrever_ArquivoAscii()
Dim f As Integer
strNombreArchivo = “MeuArquivoAscii.txt”
strRuta = “C:\”
f = FreeFile
‘escrevermos no arquivo
Close f
End Sub
Sub Ler_Arquivo()
Dim f, i As Integer
strNombreArchivo = “MeuArquivoAscii.txt”
28/7/2014 MACROS PARA EXCEL - VBA-
strRuta = “C:\”
f = FreeFile
i=1
Cells(i, 1) = strTexto
i=i+1
Wend
Close f
End Sub
‘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()
abrir_arquivo_txt_96_1
Else
28/7/2014 MACROS PARA EXCEL - VBA-
End If
End Sub
Sub abrir_arquivo_txt_96_1()
Dim f As String
End Sub
‘–’
Sub Imprime_logTxt_ColA_Plan2()
For i = 1 To Range(”Plan2!A65000″).End(xlUp).Row
Next i
Close #1
End Sub
par exemple :
Open ThisWorkbook.Path & “\lolo-” & format(now,”yyyy-mm-dd”) & “.TXT” For Output As #1
Sub Abrir_NotePad()
Shell “C:\WINDOWS\NOTEPAD.EXE”, 4
End Sub
Sub Abrir_Arquivo_TXT()
Origin:=xlWindows, StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, _
End Sub
Celula = Now()
Close #1
End Sub
Celula = Now()
Close #1
End Sub
Sub Abre_arquivo_txt_no_excel()
Semicolon:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
TrailingMinusNumbers:=True
End Sub
Sub Read_text_File()
Loop
Close #1
End Sub
‘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.
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 que você deseja fazer?” para Ajuda ‘on-line padrão do Office.
Sub Assistente_Office()
Set b = Assistant.NewBalloon
With b
.CheckBoxes(1).Text = “Beginner.”
.CheckBoxes(2).Text = “Advanced.”
.Show
End With
28/7/2014 MACROS PARA EXCEL - VBA-
Assistant.Help
End If
End Sub
Sub Assistente_usar_animacao()
Application.Assistant.Visible = True
With ball
.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-
End Sub
Sub Assistente()
‘e-mail: excelvbaestudos@hotmail.com
With Assistant.NewBalloon
.Animation = msoAnimationBeginSpeaking
.Icon = msoIconAlertInfo
“© E_Marcondes”
.BalloonType = msoBalloonTypeButtons
.Show
End With
End Sub
Sub CriarAtalho()
Livro = ActiveWorkbook.FullName
Close #1
MsgBox “Foi criado o atalho em ” & Atalho & ” de ” & Livro, vbInformation, “Atalhos”
Exit Sub
Erro:
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Function Ambiente_de_Trabalho()
Ambiente_de_Trabalho = WshShell.SpecialFolders("Desktop")
End Function
Sub CriarAtalho()
Livro = ActiveWorkbook.FullName
Print #1, "[InternetShortcut]" & vbCrLf & "URL = " & Livro
Close #1
Atalho & _
Livro, _
vbInformation, "Atalhos"
Exit Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Erro:
End Sub
Sub Celula_Visivel_Filtro_modo()
With Plan1
bHidden = .Range(”A5″).EntireRow.Hidden
“isto é,conteudo de A5 não foi selecionado para filtrar ” & vbCrLf & bHidden
End If
End With
End Sub
Option Explicit
Sub Delete_with_Autofilter()
With Application
calcmode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
DeleteValue = “ron”
With ActiveSheet
.AutoFilterMode = False
With .AutoFilter.Range
.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
28/7/2014 MACROS PARA EXCEL - VBA-
.AutoFilterMode = False
End With
With Application
.ScreenUpdating = True
.Calculation = calcmode
End With
End Sub
Sub AutoFiltro_Retorna_Endereco_Aplicado()
With ActiveSheet
MsgBox .AutoFilter.Range.Address
Else
End If
End With
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Auto_Open()
Application.ScreenUpdating = False
‘Desprotege a planilha
‘Permite o AutoFiltro
ActiveSheet.EnableAutoFilter = True
Application.ScreenUpdating = True
End Sub
iNbLigne = iNbLigne + 1
Next
MsgBox “Filtrado < ” & iNbLigne - 1 & ” > Linhas”, vbInformation, “XL-Eves®”
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Option Explicit
Sub Transfere_Transforma_Dados()
With wbBook
End With
With wsData
End With
With wsTransposed
End With
Application.ScreenUpdating = False
rnFilter.Sort Key1:=Range(”C2″), _
Order1:=xlAscending, _
28/7/2014 MACROS PARA EXCEL - VBA-
Header:=xlGuess, _
Ordercustom:=1, _
MatchCase:=True, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
rnUnique.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=rnUnique, _
CopyToRange:=Range(”J1″), _
Unique:=True
With wsData
End With
With rnStart
.Value = “Request_ID”
End With
For i = 1 To UBound(vaField)
j = rnFind.Rows.Count
Next i
28/7/2014 MACROS PARA EXCEL - VBA-
wsData.AutoFilterMode = False
Application.ScreenUpdating = False
MsgBox “Concluido”
End Sub
Option Explicit
Sub Deleta_Determinado_Codigo()
Application.ScreenUpdating = False
With ActiveSheet
.UsedRange
lnSistaRaden = .Cells.SpecialCells(xlCellTypeLastCell).Row
rnData.SpecialCells(xlCellTypeVisible).EntireRow.Delete
.Rows(”1:1″).Insert Shift:=xlDown
28/7/2014 MACROS PARA EXCEL - VBA-
.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
Plan1 para as duas macros (uma é para copiar para seu teste.)
Na Plan1 copiar estes dados embaixo para serem filtrados pela macro
A1 B1 C1
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
Sub Checkar_se_Autofiltro_Inserido()
e-mail: vba@saberexcel.com
Else
End If
End Sub
Sub AutoFiltroMode()
If Worksheets(”Plan1″).AutoFilterMode Then
isOn = “Aberto “
Else
isOn = “Fechado”
End If
End sub
‘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
xShet.Columns(”A”).Cells.HorizontalAlignment = xlHAlignRight
28/7/2014 MACROS PARA EXCEL - VBA-
Sub ajusta_coluna()
Selection.Columns.AutoFit
End Sub
Option Explicit
Unload Me
End Sub
rgNr.Value = rgNr + 1
Label_OrdemNr.Caption = CStr(rgNr.Value)
End Sub
‘Label_OrdemNr. é um Label
Sub Backup_Planilhas_determinadas()
Sheets(Array(”Pagamento”, “Combustível”)).Copy
End Sub
Faz um back up com senha do arquivo aberto salva com nome segundo
Sub Backup()
Range(”I5″).Select
End Sub
Sub backupBYDATE()
ActiveWork book .SaveCopyAs dname & “\BK_” & ActiveWork book .Name
End Sub
Sub Congela_Controles()
Application.OnDoubleClick = “chama_macro”
Controls(”controle…”).Enabled = False
Controls(”controle…”).Enabled = False
End Sub
Sub chama_macro()
‘Insira o código
End Sub
Sub Congela_Controles_II()
Application.OnDoubleClick = “chama_macro”
Controls(”controle…”).Enabled = True
Controls(”controle…”).Enabled = True
RestoreDoubleKlick
End Sub
Sub RestoreDuploClick()
Application.OnDoubleClick = “”
End Sub
Option Explicit
Sub Procura_palavra_todas_planilhas()
xcelula_string = Application.InputBox( _
Prompt:=stPrompt, _
Title:=xTitulo, _
Type:=2)
If xcelula_string = “” Then
End
End If
With wsPlan.UsedRange
rnFAdress = rngAtiva.Address
wsPlan.Activate
Do
End If
End With
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
‘
Sub Busca_elimina__palavra_toto()
r = ligne.Row
Cells(r, 3).EntireRow.Hidden = True ‘ oculta as linhas (Hidden), mas no caso de deletar (Delete)
Next
End Sub
Sub Elimina_Palavras_Mal_Maldoso()
r = ligne.Row
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub buca_localiza_iguais()
Dim x As Range
Set x = Cells(1, 2)
Columns(”A:A”).Select
Selection.Interior.ColorIndex = xlNone
False).Activate
ActiveCell.Select
With Selection.Interior
.ColorIndex = 35
End With
End Sub
Sub Cabeçalho()
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
Sub Alinhamento()
Application.Dialogs(xlDialogAlignment).Show
End Sub
Sub AddinMananger()
Application.Dialogs(xlDialogAddinManager).Show
End Sub
Sub CellFont()
Application.Dialogs(xlDialogActiveCellFont).Show
End Sub
Sub Salvar_como()
Application.SendKeys “%l{LEFT}saberexcel.com”
planilha = Application.GetOpenFilename
End Sub
Sub Calculadora()
‘e-mail: excelvbaestudos@hotmail.com
Application.ActivateMicrosoftApp xlMicrosoftCalc
End Sub
Sub Calculadora()
‘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-
SearchOrder:=xlByRows, MatchCase:=False
SearchOrder:=xlByRows, MatchCase:=False
End Sub
Sub Prefixo_Le_Caracter()
End If
Next
End Sub
Sub ShowCharMap()
‘ vCharMap = Shell(”C:\Windows\CharMap.exe”, 1)
‘ vCharMap = Shell(”C:\winnt\system32\CharMap.exe”, 1)
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
‘Este exemplo usa a função Chr para retornar o caractere associado ao código de
‘caracter especificado.
Dim MyChar
Sub Flash()
With ActiveWorkbook.Styles(”Normal”).Font
End With
End Sub
Sub Parar()
28/7/2014 MACROS PARA EXCEL - VBA-
ActiveWorkbook.Styles(”Normal”).Font.ColorIndex = xlAutomatic
End Sub
Sub Ativa_Proxima_celula_branco_Direita()
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, 1).Select
Loop
End Sub
Sub Conta_Celulas_Usadas_Det_range()
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Testar_Celula()
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
seleções vba1
Selection.End(xlDown).Select - abaixo
Selection.End(xlUp).Select - acima
ActiveCell.Offset(1, 0).Range(”A1″).Select
ActiveCell.Offset(-3, -2).Range(”A1:C4″).Select
seleciona a2:e5
Selecione A2:E5.
ActiveCell(2).Resize(4, 5).Select
Sub_Limpar_Conteúdo()
Range(”a1:f30″).Select
Selection.ClearContents
Range(”h1″).Select
End Sub
Sub Suprime_Planilhas_verifica_A1_()
Application.ScreenUpdating = False
Sht.Activate
ActiveSheet.UsedRange
Selection.SpecialCells(xlLastCell).Select
Application.DisplayAlerts = False
Sht.Delete
Else
ActiveCell.Offset(1, 1).Select
End If
Next Sht
End Sub
• 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
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
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-
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()
‘If there are no blanks or there are too many areas you see a MsgBox
With Columns(”A”) ‘ You can also use a range lik e this Range(”A1:A8000″)
If CCount = 0 Then
Else
.SpecialCells(xlCellTypeBlank s).EntireRow.Delete
End If
End With
On Error GoTo 0
End Sub
Range(”A1″).Select
CurrentRegion.Select
Selection.Copy
’selecionar a planilha1
Sheets(”Plan1″).Select
‘Selecionar a range B1
Range(”B1″).Select
Range(”C3″).Select
Selection.End(xlDown).Select
‘Selecionar
ActiveCell.Offset(1, 0).Select
Selection.Paste
‘congelar tela
Application.ScreenUpdating = False
‘Descongelar a tela
Application.ScreenUpdating = True
Sub Pula_Celula_e_Seleciona_Abaixo()
Linha_Var = 1
Coluna_Var = 2
Selection.Offset(Linha_Var, Coluna_Var).Select
End Sub
Sub Ativa_Proxima_celula_branco_Direita()
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, 1).Select
Loop
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Conta_Celulas_Usadas_Det_range()
End Sub
Sub Testar_Celula()
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-
seleções vba1
Selection.End(xlDown).Select - abaixo
Selection.End(xlUp).Select - acima
ActiveCell.Offset(1, 0).Range(”A1″).Select
ActiveCell.Offset(-3, -2).Range(”A1:C4″).Select
seleciona a2:e5
Selecione A2:E5.
ActiveCell(2).Resize(4, 5).Select
Sub_Limpar_Conteúdo()
Range(”a1:f30″).Select
Selection.ClearContents
Range(”h1″).Select
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
‘baixo e para o lado será ocultado planilha vazia (oculta/deleta)‘oculta colunas e linhas até onde esta digitado
Sub Suprime_Planilhas_verifica_A1_()
Application.ScreenUpdating = False
Sht.Activate
ActiveSheet.UsedRange
Selection.SpecialCells(xlLastCell).Select
Application.DisplayAlerts = False
Sht.Delete
Else
ActiveCell.Offset(1, 1).Select
End If
Next Sht
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
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”)
Texte = UCase$(Texte)
L = Len(Texte)
For I = 1 To L
C = Mid$(Texte, I, 1)
M = Application.Match(C, CNorm) - 1
Next I
End Function
28/7/2014 MACROS PARA EXCEL - VBA-
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″)
L = Len(Texte)
I=1
Do
Do
J = InStr(I, Texte, ” “)
I=I+1
Loop
C = Mid$(Texte, I, IIf(J, J, L + 1) - I)
M = Application.Match(C, CMorse) - 1
I=J+1
Loop While J
28/7/2014 MACROS PARA EXCEL - VBA-
End Function
Sub Numerar_Colunas_Alternadas()
‘2 3 4 5
MonContenu = 2
MaCellule.Value = MonContenu
MonContenu = MonContenu + 1
Wend
End Sub
Sub Inseri_Conteúdo_A1_ColB_e_ColE()
End Sub
‘variavel
Sub Variavel_substituir()
locStrChk = “Hoje”
If Target.Column = 1 Then
Range([A1], [A250].End(xlUp)).SpecialCells(xlCellTypeBlanks).Delete
End If
End Sub
Sub Seleciona_Sete_Coluna_7_Linhas()
Selection.Resize(7, 7).Select
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
Sub Apaga_na_colA_qt_colB()
iLastRow = Cells.SpecialCells(xlLastCell).Row
If rCell.MergeCells Then
sContent = rCell
rCell.UnMerge
Else
rCell = sContent
End If
End If
Next rCell
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Seleciona_Coluna_Ativa()
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
Sub Tornar_Visivel_Todos_Comentarios()
Next MyCmt
Next wks
End Sub
Sub Apenas_Indicador()
28/7/2014 MACROS PARA EXCEL - VBA-
Application.DisplayCommentIndicator = xlCommentIndicatorOnly
End Sub
Sub Comentario_e_Indicador()
Application.DisplayCommentIndicator = xlCommentAndIndicator
End Sub
Sub Mostra_Comentarios()
Application.ScreenUpdating = False
Dim i As Long
On Error GoTo 0
Exit Sub
End If
i=1
With newwks
i=i+1
End With
Next mycell
Application.ScreenUpdating = True
End Sub
Sub CommentRemoveUserName()
LUSR = Len(USR)
End If
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Option Explicit
Sub Comentario_Deleta_ou_Muda_Conteudo()
stNamn = Application.UserName
With rnCell
vaKommentar = Application.InputBox _
With .Comment.Shape.TextFrame
With .Characters.Font
.Size = 11
.ColorIndex = 3
.Name = “Arial”
End With
.AutoSize = True
End With
Else
Case vbYes
.Comment.Delete
Exit Sub
Case vbCancel
Exit Sub
Case vbNo
vaKommentar = Application.InputBox _
.Comment.Delete
End Select
End If
End With
28/7/2014 MACROS PARA EXCEL - VBA-
Application.DisplayCommentIndicator = xlCommentIndicatorOnly
End Sub
Sub FormatarComentario()
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 >>”
.Size = 10
.ColorIndex = 12
.Bold = True
End With
MyCmt.Shape.OLEFormat.Object.ShapeRange.Fill.ForeColor.SchemeColor = 27
Next MyCmt
Next wk s
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Msg_Autor_Comentario()
Dim c As Comment
c.Visible = True
c.Parent.Select
MsgBox “Autor do comentário” & vbCrLf & c.Author, vbInformation, “Excel VBA Estudos®”
c.Visible = False
End If
Next
End Sub
Sub comentario_4_primeira_letra_Negrito()
ActiveCell.AddComment
End If
ActiveCell.Comment.Visible = True
ActiveCell.Comment.Shape.Select
28/7/2014 MACROS PARA EXCEL - VBA-
ActiveCell.Comment.Visible = False
End Sub
Sub Ajusta_tamanho_todos_comentarios()
Dim C As Comment
facteur = ActiveWindow.Zoom
C.Visible = True
C.Shape.Select
With Selection
.Font.Size = 8
.Height = 30
.Width = 90
Else
End If
End With
28/7/2014 MACROS PARA EXCEL - VBA-
Next
ActiveCell.Select
End Sub
Sub concatenar_valores()
v = “( Aprender “
b = ” Vba “
a = ” é Bom!! )”
End Sub
Option Explicit
Option Base 1
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Concatenar_Dados()
‘© XL-Eves®
vba@saberexcel.com
vaColun1 = rnColun1.Value
vaColun2 = rnColun2.Value
Next iAntal
rnData.Value = Application.Transpose(vaData)
End Sub
Ex: (Facilitação)
28/7/2014 MACROS PARA EXCEL - VBA-
Antonio X Antonio X
Sub concatenar_celulas()
Dim t As String
Range(”A1″).Select
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
Sub teste_Constante()
Cells(1, 1) = inputval
Sheets(2).Cells(1, 2) = inputval
MsgBox vbex
End Sub
Sub Indices_Variacao()
valoratual = 66
carro(1) = 50
carro(2) = 62
carro(3) = 74
For i = 1 To 3 - 1
For j = 1 To 3 - 1
28/7/2014 MACROS PARA EXCEL - VBA-
temp = variacao(j)
variacao(j) = variacao(j + 1)
variacao(j + 1) = temp
End If
Next
Next
For indice = 1 To 3
End If
Next
End Sub
Insira em a1
Sub Apurar_Receita_Bruta()
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
Range(”C1″).Select
ActiveCell = ValBrut
End Sub
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-
Next j
Next i
End Sub
Sub copia_determinadas_Linhas_cola()
For i = 0 To 20
Next i
End Sub
Sub Copia_ColA_Inseri_ColB()
Columns(”A”).Insert
End Sub
ActiveCell.Resize(2, 1).EntireRow.Copy
28/7/2014 MACROS PARA EXCEL - VBA-
ActiveCell.Insert xlDown
Application.CutCopyMode = False
End Sub
‘–’
Sub CopyEndorsement()
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
Sub Caixa_Dialogo_ColaEspecial()
Range(”a1″).Select
Selection.Copy
Range(”a2″).Select
Application.Dialogs(xlDialogPasteSpecial).Show
End Sub
Sub copia_cola_varias_vezes()
Selection.CurrentRegion.Select
Selection.Copy
Sheets(”Plan1″).Select
Range(”A2″).Select
False, Transpose:=False
Rows(”2:2″).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range(”M2″).Select
Range(”M2:Z2″).Select
Selection.AutoFill Destination:=Range(”M2:Z81″)
Range(”M2:Z81″).Select
End Sub
Sub Copia_formato_celula()
Range(”A1″).Select
Selection.Copy
Sheets(”Plan2″).Select
Range(”A1″).Select
, Transpose:=False
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
Sub Copia_Coluna_A_Inserindo()
.Insert
‘.Delete
End With
End Sub
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
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
Sub Direita()
Application.MoveAfterReturnDirection = xlToRight
End Sub
Sub Abaixo()
28/7/2014 MACROS PARA EXCEL - VBA-
Application.MoveAfterReturnDirection = xlDown
End Sub
Sub Esquerda()
Application.MoveAfterReturnDirection = xlToLeft
End Sub
Sub Acima()
Application.MoveAfterReturnDirection = xlUp
End Sub
modifica = False
End Sub
End If
End Sub
modifica = True
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Indice_Lista_Liga()
Liste1 = Array(90, 110, 125, 140, 160, 180, 200, 225, 250)
Liste2 = Array(140, 170, 170, 182, 195, 205, 210, 170, 224)
With Application
End With
MsgBox “Elemento ligado à “ & MaVar1 & ” dentro da Lista 2 : ” & MaVar2
End Sub
‘exemplo de utilização :
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
Sub separa_palavras_separadas_por_ifem()
For i = 1 To DerniereLigne
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
Sub Decompõe_Frase_Cada_Palavra_Cel_Dif()
Next
End Sub
‘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
Columns(”A:C”).autofit
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
‘Nome_Range!$B$5;Nome_Range!$B$13:$B$14;Nome_Range!$B$21:$D$23;Nome_’Range!$’’B$30:$D$30
Sub SkipCell()
r = ActiveCell.Row
c = ActiveCell.Column
Cells(r + 1, c).Activate
End If
errhand:
End Sub
End Sub
End Sub
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
End If
Next Cell
End Sub
DIGITAÇÃO
‘Se a coluna for maior que 8 apaga o que foi inserido deleta clear coluna
Application.EnableEvents = False
Target.Formula = UCase(Target.Formula)
ErrHandler:
Application.EnableEvents = True
End Sub
‘ Drive Types
‘ 0 = Drive Unknown
‘ 1 = No Root Directory
‘ 2 = Removable
‘ 3 = Hard disk
‘ 5 = CD ROM
‘ 6 = RAM Disk
Sub Lista_Todos_Drives()
Sheets(1).Range(”A1:B26″).ClearContents
ListCtr = ListCtr + 1
With Sheets(1)
.Cells(ListCtr, 1) = Chr(DrvCtr)
.Cells(ListCtr, 2) = Success
End With
End If
Next
Else
Success = GetDriveType(DrvCtr)
If Success Then
ListCtr = ListCtr + 1
With Sheets(1)
.Cells(ListCtr, 2) = Success
End With
End If
Next
End If
End Sub
‘SubDiretórios
Sub Procura_Relaciona_Todos_Arquivos()
With Application.FileSearch
.NewSearch
.SearchSubFolders = True
.Execute
With .FoundFiles
28/7/2014 MACROS PARA EXCEL - VBA-
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
Sub ArquivosEXEativos_no_momento()
Dim oproc
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
End Function
Sub Verifica_Diretorio()
Else
End If
End Sub//
ChDrive “C”
If diretorio = “” Then
Mk Dir “C:\teste”
End If
ChDir “C:\teste”
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub caminho_e_nome_Plan()
Nomeplanilha = .Name
MsgBox Nomeplanilha
End With
MsgBox caminho
End Sub
Function ChargerFichiers()
Application.ScreenUpdating = False
UserForm1.ComboBox1.AddItem DirVar
DirVar = Dir()
Loop
UserForm1.Show
End Function
28/7/2014 MACROS PARA EXCEL - VBA-
Dim st As String
Dim i As Integer
While st <> “”
‘ PAUL-DURANT-291007.xls
Debug.Print st;
bDejaVu = False
For i = 0 To cbx_ChoixClient.ListCount - 1
If cbx_ChoixClient.List(i) = st Then
bDejaVu = True
Exit For
End If
Next
End If
DoEvents ‘
st = Dir
Wend
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
’seleção de um cliente
cbx_ChxDate.Clear
While st <> “”
Debug.Print st;
cbx_ChxDate.AddItem (st)
End If
st = Dir
Wend
End Sub
stFichier = ThisWork book .Path & “\vba\” & cbx_ChoixClient.List(cbx_ChoixClient.ListIndex) & “-” & _
stFichier
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Esta macro abre um diretório predeterminado e salva um arquivo com nome também
Sub Abre_Diretorio_Inseri_Nome_Salvar()
End Sub
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-
With objOlAppMsg
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”)
End If
‘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
Sub Send_Msg()
‘e-mail: vba@saberexcel.com
With objMail
“O s: ” & _
.Display
End With
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
‘–definir as células
Temp = Range(”A1″)
i = InStrRev(Temp, “\”)
‘–Composição da menssagem
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub ENVIAR()
End Sub
Option Explicit
Sub Envia_planilha_copia_outlook()
Application.ScreenUpdating = False
ActiveSheet.Copy
With olNewMail
With .Recipients.Add(”excelvbaestudos@hotmail.com”)
28/7/2014 MACROS PARA EXCEL - VBA-
.Type = olTo
Exit Sub
End If
End With
1, “Programadores“
.Save
End With
Application.ScreenUpdating = False
End Sub
ThisWorkbook.FollowHyperlink _
“mailto:vba@saberexcel.com?subject=” & _
28/7/2014 MACROS PARA EXCEL - VBA-
“&body=É um Teste.”
End Sub
‘Esta macro Excel vba envia um documento via e-mail, tendo como endereços e assunto determinadas
‘Acessar a referencia do Editor de VBA e assinalar: Menu / Ferramentas / Referencias / Marque “Microsoft Outlook
Library”
With olmail
.To = range(”a3″).value
.Subject = Range(”a1″).Value
.Display ‘.Send
‘On peut switcher entre .send et .display selon que l’on veut envoyer le mail (send) ou
End With
End Sub
Sub Quit_Outlook()
myOlApp.Quit
End Sub
‘na hora de colar os códigos ( o endereço da url e do e-mail tem que estar entre aspas “
Link = mailto:excelvbaestudos@hotmail.com
Unload Me
Exit Sub
NoCanDo:
End Sub
Link = http://www.saberexcel.com/
Unload Me
Exit Sub
NoCanDo:
MsgBox “Há um problema com a internet - ver se esta desligado” & Link
End Sub
Sub Envia_Planilha()
Recipients:=”excelvbaestudos@hotmail.com”, _
End Sub
‘Encripta e Desencripta
Sub Botão1_Clique()
End Sub
Sub Botão2_Clique()
End Sub
Dim A, C As String
Dim B As Integer
A = “”
For I = 1 To Len(Senha)
B = Int((255 * Rnd) - 1)
B = B - 28
Wend
C = Chr(B + 30)
Next I
Encripta = A
End Function
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
ColumnAbsolute Variant opcional. True para retornar a parte de coluna da referência como uma referência absoluta. O valor
padrão é True.
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(ReferenceStyle:=xlR1C1, _
RowAbsolute:=False, _
ColumnAbsolute:=False, _
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
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.
3. Pressione CTRL+C.
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)
adr = “$A$15″
chaine_non_modif = ActiveCell.FormulaLocal
ActiveCell.Clear
ActiveCell.Formula = chaine_modif
End Sub
Sub endereço()
28/7/2014 MACROS PARA EXCEL - VBA-
chaineadr = Range(”a15″).FormulaLocal
chaine_non_modif = ActiveCell.FormulaLocal
ActiveCell.Clear
ActiveCell.FormulaLocal = chaine_modif
End Sub
Sub retorna_endereço_celula_ativa()
MsgBox Cells.SpecialCells(xlLastCell).Address
End Sub
Sub Descrimina_um_Erro()
28/7/2014 MACROS PARA EXCEL - VBA-
‘http://www.saberexcel.com
numero = 500
Exit Sub
Errorhandler:
End Sub
Sub EsERR()
cI = cell.Interior.ColorIndex
cell.Font.ColorIndex = 2
cell.Font.ColorIndex = cI
End If
Next cell
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Suprime_EspaçosII()
End Sub
Sub Inserir_Espaços()
Dim Minha_Chave
MsgBox Minha_Chave
End Sub
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
’se na coluna I:I, contiver as palavras VERSAILLES, PARIS, LYON, SAINT ‘ETIENNE
‘PARIS, VERSAILLES, 4
Sub Case_RangeR2()
Case “TOULOUSE”
‘… etc
Case Else
End Select
End If
Next
End Sub
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”, _
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)
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_lin1 = “”
‘milhão
wk_nu = wk_Parte1
extenso1
If wk_nu = 1 Then
Else
End If
End If
End If
‘milhar
wk_lin1 = wk_lin1 + “, “
Else
wk_lin1 = wk_lin1 + ” e “
End If
End If
wk_nu = wk_Parte2
extenso1
End If
‘Centana
wk_lin1 = wk_lin1 + “, “
End If
wk_nu = wk_parte
extenso1
End If
‘moeda
If Mid(wk_num1, 1, 9) = 1 Then
Else
End If
End If
‘centavos
28/7/2014 MACROS PARA EXCEL - VBA-
wk_lin1 = wk_lin1 + ” e “
End If
wk_nu = wk_Parte4
extenso1
If wk_Parte4 = 1 Then
Else
End If
End If
Extenso = wk_lin1
End Function
Sub extenso1()
If wk_x = 1 Then
If Mid(wk_nu, 2, 2) = 0 Then
Else
End If
Else
End If
wk_lin1 = wk_lin1 + ” e “
End If
If Mid(wk_nu, 2, 1) = 0 Then
wk_x = Mid(wk_nu, 3, 1)
End If
Else
wk_lin1 = wk_lin1 + ” e “
End If
wk_x = Mid(wk_nu, 2, 1)
wk_x = Mid(wk_nu, 3, 1)
wk_lin1 = wk_lin1 + ” e “
End If
28/7/2014 MACROS PARA EXCEL - VBA-
End If
End If
End If
End Sub
If HasCondFormat(ActiveCell) Then
End If
End Sub
=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)))
formatação condicional B e C
=OU(DIA.DA.SEMANA(C7)=1;DIA.DA.SEMANA(C7)=7)
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
‘[>=200000000](##\ #) ##\ ##\ ##\ ##;[>=100000000](##) ##\ ##\ ##\ ##:00\ 00\ 00\ 00 este da um erro >> substitui pela formatação
abaixo
KILOFRANCS (KF):
1.250.000,00 F .250 KF
Sub Verificar_Formato()
Range(”A1″).Select
Frt = Selection.NumberFormat
End Sub
Sub Formatação_perssonalizada()
ActiveCell.Select
Selection.Style = “Currency”
Else
End If
End Sub
Sub Real_Formato()
Selection.NumberFormat = _
End Sub
‘ActiveCell.EntireColumn.
‘Pelas colunas :
‘ActiveCell.CurrentRegion.EntireColumn.Select
‘Pelas linhas :
‘ActiveCell.CurrentRegion.EntireRow.Select
‘Ou : Selection.EntireColumn.Select
‘Sub Copia_Cola_Formatos()
Application.CutCopyMode = False
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
End Function
função área
If IsMissing(Width) Then
Else
End If
End Function
=Area(B1;B1)
End Function
Sub Alterna_Linhas_grade()
ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines
End Sub
Sub Alterna_Situacao_Grelha()
ActiveWindow.DisplayGridlines = False
Else
ActiveWindow.DisplayGridlines = True
End If
End Sub
Sub Hyperlink_navegar_planilhas()
Dim i As Integer
For i = 1 To Worksheets.Count
With Sheets(”Plan1″)
End With
Next i
End Sub
Sub Inserir_Hiperlink_RangeA5()
Address:=”http://example.microsoft.com”, _
TextToDisplay:=”Microsoft”
End With
End Sub
Sub Hiperlink_Inseri_Add_Plan()
ActiveSheet.Name = “VBA”
Sheets(”VBA”).Delete
Sheets.Add(Before:=Sheets(1)).Name = “VBA”
For i = 2 To Sheets.Count
Next i
End Sub
Sub Lista_nome_das_planilhas_em_hyperlinks()
Sheets.Add.Name = “Lista_Planilhas”
Sheets(”Lista_Planilhas”).Move Before:=Sheets(1)
Dim x As Integer
x=1
Cells(x, 1).Select
ActiveCell = Minhas_Planilhas.Name
x=x+1
Next Minhas_Planilhas
x=1
End Sub
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
Sub Deletar_hiperlinks_Planilha()
Cells.Hyperlink s.Delete
End Sub
Sub Lista_Hiperlink()
i=0
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-
Sub Hiperlink_CelA5()
Address:=”mailto:excelvbaestudos@hotmail.com?subject=Ola! E_Marcondes”, _
ScreenTip:=”Write us today”, _
TextToDisplay:=”Support VBA”
End With
End Sub
Sub Velocidade_Media()
‘XL-Eves®
Distancia = Application.InputBox _
Tempo = Application.InputBox _
Valor_Arredondado = Application.Round _
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
End Function
Sub SetupPrint()
LastCol = Application.CountA(ActiveSheet.Range(”1:1″))
BottomRw = Application.CountA(ActiveSheet.Range(”A:A”))
PageSettg = 1 ‘1=xlPortrait
Else
PageSettg = 2 ‘2=xlLandscape
End If
With ActiveSheet.PageSetup
.LeftHeader = “”
.RightHeader = PrintDate
.LeftFooter = Lfooter
.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
.Draft = False
‘.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
28/7/2014 MACROS PARA EXCEL - VBA-
.Zoom = False
End With
End Sub
Sub Copia_linha_ate_a_ultima()
Dim i As Integer
ligne1:
ActiveCell.Offset(1, 0).Select
GoTo ligne1:
ligne99:
Range(”A1″).Select
End Sub
Sub conta_linhas()
minha_linha = Selection.Rows.Count
MsgBox minha_linha
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
Sub Deleta_Linhas_Branco()
Sheets(”SuaPlanilha”).Select
Dim r, c, x As Integer
For r = 1 To 150
For c = 1 To 184
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
‘find out what the column before the next non-blank cell is
Y=x-1
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
Case 0
Case Else
Exit Sub
End Select
End If
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
Sub Atribui_altura_linhas()
AHauteur = Application.InputBox _
ASelectionner.RowHeight = AHauteur
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Deleta_Linhas()
Dim J As Integer
NumRows = rngSrc.Rows.Count
ThisRow = rngSrc.Row
ThisCol = rngSrc.Column
Rows(J).Select
Selection.Delete Shift:=xlUp
DeletedRows = DeletedRows + 1
End If
Next J
End
tem que copiar todo código para lixeira - somente copiar e colar no módulo normal
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()
End Sub
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
‘End Sub
‘ Application.OnKey “{ENTER}”
‘ Application.OnKey “+{ENTER}”
‘ Application.OnKey “~”
‘ Application.OnKey “+~”
‘End Sub
‘ Application.OnKey “{ENTER}”
‘ Application.OnKey “+{ENTER}”
‘ Application.OnKey “~”
28/7/2014 MACROS PARA EXCEL - VBA-
‘ Application.OnKey “+~”
‘End Sub
‘b.marchand mpfe
Sub CellSuivante()
Cells(ActiveCell.Row + 1, Tabulation(0)).Activate
NuCol = 0
Else
NuCol = NuCol + 1
End If
End Sub
Sub CellPrecedente()
Cells(ActiveCell.Row - 1, Tabulation(UBound(Tabulation))).Activate
NuCol = UBound(Tabulation)
End If
Else
NuCol = NuCol - 1
End If
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
‘ Tabulation = Array(1, 2, 3, 4, 5)
Sub GetUserNameTest()
MsgBox fOSUserName
MsgBox FindUserName
End Sub
strUserName = String$(254, 0)
lngLen = 255
Else
28/7/2014 MACROS PARA EXCEL - VBA-
fOSUserName = “”
End If
End Function
‘—‘
Public Function FindUserName() As String
strName = Space$(512)
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()
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:
With Target.AddComment
.Visible = False
.Text "Última alteração em: " & Date & " hora:" & Time
End With
End If
End Sub
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:
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")
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:
With MyMenu.MenuItems
.Add "Test", "Test", , 1, , ""
28/7/2014 MACROS PARA EXCEL - VBA-
End With
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:
Worksheets("sheet1").Range("A1:B3").Copy
With MSWord
With .Documents.Add
.Range.Paste
End With
.WindowState = wdWindowStateMaximize
End With
End Sub
Exit Sub
NoCanDo:
MsgBox "Impossível Abrir " & Link
End Sub
Range("E1").NumberFormat = "000000"
If IsNumeric(Range("E1")) Then
Range("E1") = Range("E1").Value + 1
End If
End Sub
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
.Hidden = CheckBox_OcultaExibe.Value
End With
End Sub
Sub Contador_Chama_Macro()
contador = 120
Range("A1").Formula = contador
nouvHeure = Hour(Now())
nouvMinute = Minute(Now())
nouvSeconde = Second(Now()) + 1
Application.Wait Reprise
Next
28/7/2014 MACROS PARA EXCEL - VBA-
If Range("A1").Value = 0 Then
Call tempo
End If
End Sub
Sub tempo()
End Sub
ActiveSheet.Calculate
End Sub
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.
With Rng
.Value = Now
.Offset(, 1) = Sh.Name
.Offset(, 2) = Target.Address
Else
.Offset(, 3) = Target.Formula
End If
End With
End Sub
Todas as alterações são registradas em uma planilha chamada História que possui a seguinte configuração:
Application.Cursor = xlNormal
End Select
End Sub
Duvida colocada: "... queria colocar um contador das vezes que o meu livro é aberto, como o posso fazer? "
Para ver esse contador basta nas propriedades do livro consultar o "personalizar".
With ActiveWorkbook.CustomDocumentProperties
.Item("AutoNum").Value = .Item("AutoNum").Value + 1
Else
.Add Name:="AutoNum", _
LinkToContent:=False, _
Type:=msoPropertyTypeNumber, _
Value:=1
End If
End With
End Sub
ExistCustom = False
Next c
End Function
‘PISCAR TELA
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á.
CÉLULA PISCANTE 2
Colocar em um módulo
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
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
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
StopBlink
End Sub
StartBlink
End Sub
Em um módulo
Sub StartBlink()
With ThisWorkbook.Worksheets("Plan1").Range("A1,a2,F7").Font
Else
28/7/2014 MACROS PARA EXCEL - VBA-
End If
End With
End Sub
Sub StopBlink()
ThisWorkbook.Worksheets("Plan1").Range("A1,a2,F7").Font.ColorIndex = _
xlColorIndexAutomatic
Application.OnTime
End Sub
LOldVal = Sheets("Plan1").Range("A2").Value
ActiveWorkbook.Save
End Sub
ESTA MACRO COLORE LINHA LADO DIREITO DA COLUNA QUE ESTÁ SELECIONADA
Range("D6:E100").Interior.ColorIndex = xlNone
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
SendKeys "{F4}"
End Sub
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
Range("A1").Formula = contador
28/7/2014 MACROS PARA EXCEL - VBA-
nouvHeure = Hour(Now())
nouvMinute = Minute(Now())
nouvSeconde = Second(Now()) + 1
Application.Wait Reprise
Next
If Range("A1").Value = 0 Then
Call tempo
End If
End Sub
Sub tempo()
End Sub
senha = "164713"
Range("C40") = Date
Range("B40") = Date
28/7/2014 MACROS PARA EXCEL - VBA-
End If
auxcont = 30 - cont
Saved = True
ActiveWorkbook.Close
End If
Else
MsgBox "Faltam " & auxcont & " dias para expirar o tempo desse Programa."
End If
End Sub
Sub Mostrar_Duplicados()
'Column A values
'Column B values
Lrows = 200
LLoop = 2
Range(LClearRange).Interior.ColorIndex = xlNone
LTestLoop = 2
Range(LChangedValue).Interior.ColorIndex = 3
28/7/2014 MACROS PARA EXCEL - VBA-
Range(LTestValue).Interior.ColorIndex = 3
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
Sub Transpor()
28/7/2014 MACROS PARA EXCEL - VBA-
'
'
'
Selection.Copy
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:
Sub StartTimer()
Schedule:=True
End Sub
Sub SalvamentoProgramado()
28/7/2014 MACROS PARA EXCEL - VBA-
Application.ThisWorkbook.Save
End If
End Sub
Sub StopTimer()
Schedule:=False
End Sub
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:
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.
Dim partex, Sb
Me.Label1.Width = 700
partex = Me.Label1.Left
Sb = Len(Me.Label1.Caption)
End Sub
Me.Label1.Visible = True
Me.Label1.Left = x
Me.Label1.Top = 10
w = 0.04
temp = Timer
DoEvents
Loop
Next x
UserForm_Activate
End Sub
SALVAMENTO AUTOMÁTICO 2
Sub StartTimer()
Schedule:=True
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub SalvamentoProgramado()
Application.ThisWorkbook.Save
End If
End Sub
Sub StopTimer()
Schedule:=False
End Sub
SALVAMENTO AUTOMÁTICO 3
Sub StartTimer()
Schedule:=True
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub SalvamentoProgramado()
Application.ThisWorkbook.Save
End If
End Sub
Sub StopTimer()
Schedule:=False
End Sub
Módulo1.ABRIR
Código em um módulo
Option Explicit
Left As Long
Top As Long
Right As Long
Bottom As Long
28/7/2014 MACROS PARA EXCEL - VBA-
End Type
() As Long
28/7/2014 MACROS PARA EXCEL - VBA-
Declare Function SHFormatDrive Lib "Shell32" (ByVal HWNd As Long, ByVal Drive As Integer, ByVal fmtID As
Integer, ByVal Options As Integer) As Long
(ByVal HWNd As Long, ByVal crkey As Byte, ByVal balpha As Byte, ByVal dwflags As Long) As Long
'Verifica aplicativo
Case 8 'Excel 97
End Select
GetSystemMetrics(SM_CYCAPTION)
End Sub
'Verifica aplicativo
Case 8 'Excel 97
End Select
End Sub
End If
With MDIRect
End With
End Sub
Sub SetTime()
End Sub
Sub ABRIR()
SetTime
UserForm1.Show
End Sub
Sub ShutDown()
Unload UserForm1
End Sub
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-
Sheets("Plan1").Shapes("text").Visible = False
End Sub
Sub Mostrar_Duplicados()
'Column A values
'Column B values
Lrows = 200
LLoop = 2
Range(LClearRange).Interior.ColorIndex = xlNone
LTestLoop = 2
Range(LChangedValue).Interior.ColorIndex = 3
Range(LTestValue).Interior.ColorIndex = 3
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
Em Esta_Pasta_de_Trabalho Open
call mensagens
Sub mensagens()
Dim MinhaHora
MinhaHora = Hour(Now)
Case 1 To 5
Case 6 To 11
Case 12 To 17
Case 18 To 24
End Select
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Listar_Planilhas()
Dim j As Integer 'Faz uma lista dos nomes das planilhas existentes
NumSheets = Sheets.Count
For j = 1 To NumSheets
Cells(j, 1) = Sheets(j).Name
Next j
End Sub
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-
'...........................'
Sub insere_formula_matricial_dias_do_Mes()
Dias_Semana
'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)"
'.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-
Sub Enter()
senha = "164713"
Range("K1") = Date
Range("L1") = Date
End If
auxcont = 0 - cont
Saved = True
ActiveWorkbook.Close
End If
Else
MsgBox "Faltam " & auxcont & " dias para expirar o tempo desse Programa."
End If
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
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
Sub Calcula()
TextBox_Total.Value = FormatCurrency(TextBox_Total.Value)
End If
End Sub
'TEXTBOX TOTAL 1
TextBox_Total.Value = ""
Exit Sub
End If
If IsNumeric(TextBox_PecasEstoque.Value) Then
Calcula
Else
28/7/2014 MACROS PARA EXCEL - VBA-
TextBox_PecasEstoque.Value = ""
TextBox_PecasEstoque.SetFocus
End If
End Sub
'TEXTBOX TOTAL 2
TextBox_Total.Value = ""
Exit Sub
End If
If IsNumeric(TextBox_ValorUnitario.Value) Then
Calcula
Else
TextBox_ValorUnitario.Value = ""
TextBox_ValorUnitario.SetFocus
End If
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
If TextBox1.Value<>"" Then
TextBox1.Value=Format(TextBox1.Value,"#,##0.00")
Else
TextBox1.Value=""
End If
End Sub
FORMAÇÃO CONDICIONAL
'O código será ativado sempre q mudar valor da célula, em Worksheet apenas a planilha em Workbooks todas
Application.EnableEvents = False
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
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
Application.ScreenUpdating = False
With wb
Next w1
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.
Else
Do
With wb
Let PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
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 " & _
Exit Do
End If
End With
On Error GoTo 0
End If
GoTo exx
End If
w1.Unprotect PWord1
Next w1
On Error GoTo 0
ShTag = False
Next w1
28/7/2014 MACROS PARA EXCEL - VBA-
If ShTag Then
With w1
If .ProtectContents Then
Do
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
' Achamos 1!
MsgBox "A Worksheet '" & w1.Name & "' foi desprotegida usando o seguinte hash " & _
"Hashed Password:" & Chr(13) & PWord1 & Chr(13) & "Tente desproteger outras " & _
w2.Unprotect PWord1
Next w2
Exit Do
End If
28/7/2014 MACROS PARA EXCEL - VBA-
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
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
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)
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-
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) & _
Sub Adiciona_planilha_4()
Worksheets.Add
End Sub
'incrementando um numero em B4
Sub Autonumeracao_incrementa()
ObjCell.Value = ObjCell.Value + 1
Next
End Sub
arrayMesesUltimoDia = Array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
If iMes = 2 Then
fnUltimoDiaDoMes = 29
Else
fnUltimoDiaDoMes = 28
End If
Else
fnUltimoDiaDoMes = arrayMesesUltimoDia(iMes)
End If
End Function
Cancel = True
End If
End Sub
MENSAGEM EM LABEL
Me.Label3.Caption = strMensagem
End Sub
FUNÇÃO DE EXTENSO
Dim i As Integer
'Separa os Decimais
End If
iQtdGrupos = Fix(Len(NumeroParaConverter) / 3)
iQtdGrupos = iQtdGrupos + 1
End If
sExtensoAtual = DesmembraValor(NumeroParaConverter, i)
If i = 1 Then
Else
Else
End If
End If
Else
28/7/2014 MACROS PARA EXCEL - VBA-
End If
Select Case i
Case 1, 2
bSufMoeda = False
End If
End Select
End If
Next i
'Define a moeda
'Escreve os Centavos
sCentavos = EscreveCentavos(sDecimais)
sExtensoFinal = IIf((sExtensoFinal = ""), "", sExtensoFinal & IIf((sExtensoFinal = "um"), sMoedaSing, sMoedaPlu)) _
& IIf((sExtensoFinal = ""), sCentavos, IIf((sCentavos = ""), "", " e " & sCentavos))
'retorna o resultado
ConverterParaExtenso = sExtensoFinal
End Function
vArrDez1 = Array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", _
"dezoito", "dezenove")
iTamMid = 2 + iPosInicMid
Else
iTamMid = 3
End If
Case 2
Case 3
If iValor = 1 Then
Else
End If
Case 4
If iValor = 1 Then
Else
End If
Case 5
If iValor = 1 Then
Else
End If
End Select
Case 0 To 19
sExtenso = vArrDez1(iValor)
Case 20 To 99
If iDivResto = 0 Then
sExtenso = vArrDez2(iDivInteiro - 2)
Else
End If
If iDivResto = 0 Then
If iDivInteiro = 1 Then
Else
End If
Else
Case 0 To 19
Case 20 To 99
If iDivResto2 = 0 Then
Else
End If
End Select
End If
End Select
End Function
vArrDez1 = Array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", _
"dezoito", "dezenove")
If iCent = 1 Then
Else
End If
'Calculando os valores
Case 0 To 19
sExtenso = vArrDez1(iCent)
Case 20 To 99
If iDivResto = 0 Then
sExtenso = vArrDez2(iDivInteiro - 2)
Else
End If
End Select
End Function
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Modificar_deletar_planilha()
Dim c As CommandBarControl
c.OnAction = "Deleta_Planilha"
Next c
End Sub
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
Sub Reabilitar_deletar_Planilha()
Dim c As CommandBarControl
c.OnAction = ""
Next c
End Sub
' Esta macro irá colocar rodapés personalizado em todas as folhas no livro.
Sub Rodapes_Perdonalizados()
Dim s As Worksheet
Application.ScreenUpdating = False
With s.PageSetup
End With
Next s
Application.ScreenUpdating = True
End Sub
Sub Copia()
MyFilePath = MyPCpath("Pasta3")
MsgBox " O Excel irá fazer um Backup no Disco C, para aceitar Click OK", vbInformation
End Sub
MyPCpath = CreateObject("WScript.Shell").SpecialFolders _
28/7/2014 MACROS PARA EXCEL - VBA-
End Functio
BACKUP PERFEITO
Sub Backup()
Application.Dialogs(xlDialogSaveAs).Show
Else
BackupFileName = awb.Name
OK = False
End If
With awb
.Save
OK = True
End With
End If
NotAbleToSave:
Application.StatusBar = False
If Not OK Then
End If
End Sub
Sub Backup()
ActiveWorkbook.Save
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
ActiveWorkbook.SaveCopyAs (TextBox_Caminho.Text)
TextBox_Caminho = ""
28/7/2014 MACROS PARA EXCEL - VBA-
TextBox_Caminho.SetFocus
End Sub
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
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
‘PROGRESSBAR PERCETUAL
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
Sub SaveAsTXT()
LinhaAnterior = 0
If (LinhaAnterior <> Celula.Row) And (LinhaAnterior) <> 0 Then Print #1, ""
LinhaAnterior = Celula.Row
End If
Next Celula
Close #1
End Sub
Sub Apagar_Dados()
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).
oCtrl.Enabled = False
Next oCtrl
oCtrl.Enabled = False
Next oCtrl
Application.CellDragAndDrop = False
End Sub
oCtrl.Enabled = True
Next oCtrl
oCtrl.Enabled = True
Next oCtrl
Application.CellDragAndDrop = True
End Sub
With Application
.CellDragAndDrop = False
End With
End Sub
Este código, gravado no evento Open da pasta, armazena o endereço completo da pasta ativa
With ActiveWorkbook
Worksheets(”Plan1″).Range(”A1″) = .FullName
End With
End Sub
Durante o processamento do seu aplicativo, desenvolvido em VBA, você precisa saber o total de planilhas na pasta de trabalho ativa.
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.
Sub FormatarPlanilha()
.Activate
With .Range("A1")
.Activate
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
.DisplayGridlines = True
.DisplayHeadings = True
.Caption = ""
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
.DisplayWorkbookTabs = True
.WindowState = xlMaximized
End With
End With
End Sub
FormatarPlanilha
End Sub
Feche o Editor.
28/7/2014 MACROS PARA EXCEL - VBA-
Teste.
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.
Worksheets(”Plan1″).Visible = False
Worksheets(”Plan2″).Visible = False
Porém, inteligente microsoftiano(a), você pode utilizar a função Array para acessar mais de uma planilha ao mesmo tempo.
Com o método Select você pode selecionar 1 célula, um intervalo contínuo de células ou intervalos não adjacentes.
Sub Selecionar_01( )
28/7/2014 MACROS PARA EXCEL - VBA-
.Range("A2").Select
End With
End Sub
Sub Selecionar_02( )
With Worksheets("Plan1")
.Range("A2:A4").Select
End With
End Sub
Sub Selecionar_03( )
With Worksheets("Plan1")
.Range("A2:A4,B2:B4,D1:E1").Select
End With
End Sub
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.
With Application
.Caption = “”
End With
End Sub
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.
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.
CONTROLADOR DE TEMPO
Sub IniciaProcesso()
MsgBox "Você clicou em sim. A mensagem aparecerá novamente em " & Tempo & " segundos"
Else
End If
End Sub
'Tomás Vasquez
28/7/2014 MACROS PARA EXCEL - VBA-
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 ):
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:
Range("$A$1") = Sh.Name
End Sub
Option Explicit
Case Is > 1
If FLAG Then
28/7/2014 MACROS PARA EXCEL - VBA-
MsgBox FLAG
Selection.Delete
Exit Sub
End If
'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
MaiscStr = UCase(.Value)
Application.EnableEvents = False
.Value = (MaiscStr)
End If
End With
Application.EnableEvents = True
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
ListView1.ListItems.Clear
For i = 2 To Plan2.Range("P1").Value
Next i
End Sub
Cancel = True
End If
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
Inicio:
D = Now + TimeSerial(0, 1, 0) 'Um minuto . Pode ser outro valor
End Sub
Else
End If
End Function
'ser fechada
'exibe a mensagem
Cancel = True
28/7/2014 MACROS PARA EXCEL - VBA-
End If
End Sub
Esta macro deleta todo o conteúdo caso a celula A1 receba o valor "x"'
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
End Select
End If
Next Cel
End Sub
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
Sub Modulo()
SendKeys "%{F11}"
End Sub
AGRUPANDO COLUNAS
2010-05-10 12:32
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
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
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
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
Sub Criar_Macro()
Dim linha, pasta
Set linha = CreateObject("Scripting.FileSystemObject")
Set pasta = linha.CreateFolder("c:\Excel")
CreateFolderDemo = pasta.Path
End Sub
Sub abrir_Formulario()
UserForm1.Show
End Sub
Sub Workbook_Open()
Application.OnKey "+{F3}", "abrir_Formulario"
End Sub
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
Sub Envia_Planilha_anexo()
Application.Dialogs(xlDialogSendMail).Show
End Sub
Sub IniciaProcesso()
Dim Tempo As String
Tempo = "00:00:10" 'altere o valor do tempo aqui
End Sub
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.
Sub Mostra_usuario()
MsgBox Environ("username"), vbInformation, "Coliniz@dor"
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
FORMATANDO TEXTBOX
Esta macro formata o textbox para receber dados de data , vc digita 14122009 , e ficara 14/12/2009,
=DATADIF(A1;A2;"Y") & " anos " & DATADIF(A1;A2;"YM") & " meses " & DATADIF(A1;A2; "MD") & " dias"
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
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
Sub Salva_Grafico()
Dim Grafico As Chart
Set Grafico = ActiveSheet.ChartObjects(1).Chart
Grafico.Export Filename:="C:\Salves\Grafico.jpg", filtername:="JPG"
End Sub
Sub msg()
MsgBox "Texte"
End Sub
Sub Macro()
Application.OnTime Now + TimeValue("00:00:10"), "msg"
End Sub
With Range("A1:C10").Validation
.Delete
.Add Type:=xlValidateWholeNumber, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:="-100", _
Formula2:="-100"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Atenção"
.ShowInput = True
.ShowError = True
End With
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
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-
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
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
Sub Sumir()
Application.CommandBars(1).Enabled = False
End Sub
Sub Aparecer()
Application.CommandBars(1).Enabled = True
End Sub
Sub Ocultar()
Application.CommandBars(1).Controls("Ajuda").Visible = True
End Sub
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
Basta salvar esta macro no módulo VBA , vá no excel e inserir função , escolha função definida pelo usuário.
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
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 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
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
End Function
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...
Sub Proteger_Formulas()
Range("A1,B3,D8").Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
With Selection.Validation
.Delete
xlBetween, Formula1:=">1"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
28/7/2014 MACROS PARA EXCEL - VBA-
.InputMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
ws.Visible = False
End If
Next ws
End Sub
frmNiverForm.Show
Application.ScreenUpdating = False
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
Call Excluir_nivers
End Sub
PROGRAMAR LISTVIEW 1
Private Sub UserForm_Initialize()
With Form_Iniciais.ListView1
.View = lvwReport
.View = lvwReport
Gridlines = True
End With
For X = 2 To lastRow
28/7/2014 MACROS PARA EXCEL - VBA-
Next
End Sub
End Function
"user32" () As Long
Dim r As Long
LeftDesk = 0
TopDesk = 0
hWndDesk = GetDesktopWindow()
hDCDesk = GetWindowDC(hWndDesk)
r = BitBlt(gPicture.hdc, 0, 0, _
r = ReleaseDC(hWndDesk, hDCDesk)
gPicture.AutoRedraw = True
End Sub
Range("D3").Select
Exit Sub
Else
Selection.ClearContents
Range("D3").Select
End If
End Sub
ro'---------------------------------------------------------------------
' Descrição :
'---------------------------------------------------------------------
bFound = False
nPosition = Len(sFullName)
bFound = True
Else
nPosition = nPosition - 1
End If
28/7/2014 MACROS PARA EXCEL - VBA-
Loop
ExtraiNomePlanilha = 0
Else
ExtraiNomePlanilha = nPosition
End If
End Function
Sub protege()
Application.ActiveWorkbook.Save
MsgBox "A data expirou o tempo desejado, feche-me..." 'Mensagem de expirar o tempo
Application.Workbooks.Close
Else
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):
End Sub
End Sub
End Sub
SENHA 1
‘Senha
‘ Abra o editor do Visual Basic (Ferramentas --> Macro --> Editor do Visual Basic);
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");
SENHA 2
Private Declare Sub FatalAppExit Lib "kernel32" Alias "FatalAppExitA" (ByVal uAction As Long, ByVal lpMessageText As String)
Senha = "1234"
Saved = True
End If
End Sub
SENHA 3
Sub PasswordBreaker ()
Chr ( l) & Chr (m) & Chr ( i1) & Chr ( i2) & Chr ( i3) & _
Chr ( i4) & Chr ( i5) & Chr ( i6 ) & Chr (n)
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
End Sub
ACESSO REGISTRADO
Esta macro registra dados de criação , acesso e alteração da planilha, colocar no WorkBook_Open
fecha_creacion = archivo.DateCreated
fecha_modificacion = archivo.DateLastModified
fecha_ultimo_acceso = archivo.DateLastAccessed
'esto en cuenta
Range("A4") = "Tamanho do Árquivo atuall: " & tamano_fichero & " Mb/Kb"
Else
End If
End Sub
‘Cria Variáveis
Classificar = False
If ActiveWindow.SelectedSheets.Count = 1 Then
Primeira = 1
‘conta as planilhas
Ultima = Worksheets.Count
Else
With ActiveWindow.SelectedSheets
Exit Sub
End If
Next Contador
Primeira = .Item(1).Index
Ultima = .Item(.Count).Index
End With
End If
Worksheets(Contador).Move Before:=Worksheets(Contador2)
End If
28/7/2014 MACROS PARA EXCEL - VBA-
Else
Worksheets(Contador).Move Before:=Worksheets(Contador2)
End If
End If
Next Contador
Next Contador2
End Sub
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
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
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
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
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-
End Sub
RODAPÉ PERSONALIZADO
Sub Rodapé_Personalizado()
With ActiveSheet.PageSetup
.CenterHeader = "&""Verdana,Bold""CALENDÁRIO" _
.FooterMargin = Application.InchesToPoints(0.2)
End With
End Sub
‘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.
Option Explicit
Sub SepareAdresse()
Dim OrdreDest()
LinhaFonte = 4 'Primeira linha onde se encontram endereços a serem divididos - aqui "4"
OrdreDest = Array(1, 0, 2, 3, 4)
'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
UB = UBound(TB) ' - 1
For i = 1 To UB
Else
Exit For
End If
Next i
End If
If UBound(OrdreDest) = 4 Then
End If
If UBound(OrdreDest) = 4 Then 'a caixa postal é opcional mas não está presente
TB(2) = ""
Else
End If
28/7/2014 MACROS PARA EXCEL - VBA-
End If
For e = 0 To UBound(OrdreDest)
Next e
LinhaDeDestino = LinhaDeDestino + 1
Passe:
Next Lig
End With
Exit Sub
Erro:
Resumo Passe
End Sub
'BOTÃO SALVAR
Private Sub CommandButton10_Click()
Application.Workbooks("ProFamilia.xls").Save
sai_salvar:
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-
Dim i As Integer
Estilo = vbYesNo
Título = versao
' a lógica acima você já deve ter estudado nos forms anteriores
With Sheets("Contatos")
.Range("A2001").Select
End With
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
End If
End Sub
Dim i As Integer
Estilo = vbYesNo
Título = versao
' 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
End If
End Sub
Dim i As Integer
Estilo = vbYesNo
Título = versao
' 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
End If
End Sub
Application.Dialogs(xlDialogPrint).Show
End Sub
Dim i As Integer
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
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
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
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
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
'
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
'
28/7/2014 MACROS PARA EXCEL - VBA-
FrmPrincipal.lblnome.Caption = Sheets("Geral").Cells(3, 1)
altera_conta = False
'
'
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
cmbAno.AddItem i
Next i
For i = 1 To 31
cmbDia.AddItem i
Next i
For i = 1 To 12
cmbMes.AddItem i
Next i
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
Data2 = cmbDia.Text & "/" & cmbMes.Text & "/" & ano ' a variavel data2 será igual ao
dia/mes dos respectivos combos + o ano da variável ano
'
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)"
End If
' se for menor calcula os dias passados comparando as datas carregadas em data1 e data2
28/7/2014 MACROS PARA EXCEL - VBA-
Sheets("Principal").Select
cmbDicas.AddItem Cells(i, 1)
Next i
End Sub
' este código impede que você feche o formulario pelo "x" no canto superior direito
End Sub
'CARREGA LISTBOX
Dim i As Integer
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
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
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
FrmPrincipal.lblnome.Caption = Sheets("Geral").Cells(3, 1)
End Sub
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-
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.
Sub ExplorePath()
Shell Environ("windir") & "\Explorer.exe " & ActiveWorkbook.Path, vbMaximizedFocus
End Sub
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
FORMATAÇÃO DE NÚMEROS
28/7/2014 MACROS PARA EXCEL - VBA-
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-
'
'
ActiveWindow.SmallScroll Down:=-31
ActiveWindow.SmallScroll ToRight:=-7
Range("V7:AD17").Select
xlTopToBottom
Range("A7").Select
End Sub
With Application
.Dialogs(xlDialogAutoCorrect).Show
End With
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
CAIXA
Sub Caixa()
Soma = 0
Valor = 1
While (Valor = 1)
For i = 1 To Numero
Soma = Soma + i
Next i
MsgBox (" A soma dos primeiros " & Numero & " números é " & Soma)
Valor = 1
Else
Valor = 0
End If
Wend
End Sub
ATIVA CALCULADORA
Sub ShowCalc()
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
UserForm1.Show
Cancel = True
End Sub
‘Para que esta macro funcione corretamente os códigos deverão conter Nº e letras
Sheets("Plan2").Cells(i, j) = ""
Next j
End If
Next i
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
DADOS DUPLICADOS
Option Explicit
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
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
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
CX DIALOGO PROTEGER
Sub Proteger_Planilha()
With Application
.Dialogs(xlDialogProtectDocument).Show
End With
End Sub
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
n.Value = UCase(n.Value)
Next
End Sub
SUB CONVERTERMINUSCULA()
Dim n As Range
n.Value = LCase(n.Value)
Next
End Sub
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
CONVERTER EM DOLAR
Sub Converter_R_US()
Coluna = "h"
Linha = 7
Linha = Linha + 1
Wend
End Sub
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()
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)
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()
'
ActiveSheet.ShowDataForm
End Sub
EXTENSO
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
'"
'"
28/7/2014 MACROS PARA EXCEL - VBA-
'" DESCRIÇÃO: Escreve por extenso em português qualquer número cardinal com
'"
'" UmMil - Escreve 1.000 completo sem omitir 'um': Verdadeiro (Sim, 'um mil')
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
Exit Function
End If
Else
End If
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 "))
FracNome = IIf(Num = Int(CDec(Num)), "", IIf(Int(CDec(Num * 100)) - Int(CDec(Num)) * 100 = 1, " centavo", " centavos"))
Case 2 'Lê a vírgula decimal, cada zero e o número restante como inteiro. Ideal para percentual.
If ExtensFrac = 0 Then
fExtenso = ExtensInt
Else
Loop
fExtenso = fExtenso & " " & fExtensoInt(ExtensFrac * 1, UndMasc, UmMil, VirgEntrMilh)
End If
fExtenso = fExtenso & IIf(UndNomeSing <> "", " ", "") & IIf(Num = 1, UndNomeSing, UndNomePlur)
If ExtensFrac = 0 Then
ExtensFrac = ""
28/7/2014 MACROS PARA EXCEL - VBA-
Else
Signif = Len(ExtensFrac) - 2
If Signif > 3 And Signif <> 6 And Signif <> 9 And Signif <> 12 Then Signif = Int(CDec(Signif / 3)) * 3 + 3
FracNome = " " & FracNome & IIf(ExtensFrac = "um", "", "s")
Else
ExtensFrac = ""
End If
End If
fExtenso = ExtensInt & IIf(ExtensInt <> "" And ExtensFrac <> "", ", e ", "") & ExtensFrac & FracNome
Else
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 "))
FracNome = IIf(Num = Int(CDec(Num)), "", FracNome & " de " & UndNomeSing)
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...)
Dim Ce As String
Dim Ma As String
Dim Mõ As String
Dim Bi As String
Dim f As String
ConjExc = True
If Num = 0 Then
fExtensoInt = ""
Exit Function
End If
Ce = Mid(NumText, 13, 3)
Ma = Mid(NumText, 9, 3)
Mõ = Mid(NumText, 5, 3)
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 ", "")
fExtensoInt = f
End Function
'Gramática portuguesa:
Else
UndText = ""
End If
'Dezena texto
"oitenta", "noventa")
Else
End If
'Centena texto
If UndMasc Then
Else
End If
'Milhar texto
fMilharText = CentenaText & IIf(Mid(NumText, 2, 2) * 1 > 0 And CentenaText <> "", ConjCen_Dez, "") _
& UndText
End Function
Dim e As String
'Regra geral:
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
e = LCase(Right(Sing, 1))
End Function
INSERIR
Sub Insere()
Cells(4, 2) = Salario
Cells(5, 2) = Gestao
Cells(6, 2) = Gerais
End Sub
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
With Worksheets(3)
End With
Linha = Linha + 1
Next BarraExcel
End Sub
SUB OLA()
Dim Nome As String
End Sub
With Application
.Dialogs(xlDialogCalculation).Show
End With
End Sub
FUNCTION RAIZ()
Dim iNum As Integer
iNum = Sqr(25)
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()
'
'
ActiveWorkbook.Save
End Sub
SUB SALVAR_COMO()
With Application
.Dialogs(xlDialogSaveAs).Show
End With
End Sub
FUNCTION SAUDAÇÃO()
vbInformation
28/7/2014 MACROS PARA EXCEL - VBA-
vbInformation
vbInformation
End If
End Function
SUB SAUDAÇÃO()
If Time$ > "19:00:00" Then
vbInformation
vbInformation
vbInformation
End If
End Sub
SUB SEPARATEXTO()
Range("A1:A10").Select
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 = Numero - 1
Wend
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
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()
'
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-
COR NA LINHA
Cells.Interior.ColorIndex = xlNone
End Sub
Plan1.Activate
ActiveWindow.DisplayWorkbookTabs = False
vbInformation
vbInformation
vbInformation
End If
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
CÓDIGOS
Public Function CalculaData(ByVal datDataInicial As Date, ByVal intAnos As _
' Ou seja, soma 0 anos, 5 meses e 11 dias à data 1/1/2006 - Resultado: 12/06/2006
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
Next i
End Function
Sub ColToRow()
Sheets("Dias").Select
Range("A2:A14").Select
28/7/2014 MACROS PARA EXCEL - VBA-
Selection.Copy
Sheets("Piscar").Select
False, Transpose:=True
End Sub
SUB CONVERTERMAIUSCULA()
Dim n As Range
n.Value = UCase(n.Value)
Next
End Sub
SUB CONVERTERMINUSCULA()
Dim n As Range
n.Value = LCase(n.Value)
Next
End Sub
SUB CONVERTERPRIMAIUSCULA()
28/7/2014 MACROS PARA EXCEL - VBA-
Dim n As Range
Next
End Sub
SUB ENTRADA_ESTOQUE()
Dim Ops(1 To 5) 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)
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)
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)
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)
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
Selection.AutoFilter
Range("A1").Select
Else
ActiveSheet.PageSetup.PrintArea = ActiveCell.CurrentRegion.Address
Range("A1").Select
End If
End Sub
SUB LANÇAMENTO_CAIXA()
Dim Ops(1 To 5) 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)
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)
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)
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)
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)
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)
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
If IsEmpty(Range("F4")) Then
Exit Sub
End If
Else
Exit Sub
End If
Range("F4").ClearContents
End Sub
SUB MACRO1()
Range("A1") = "Você entrou no mês de Janeiro"
End Sub
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
É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)
ÉFimSemana = False
Else
ÉFimSemana = True
End If
End Function
Dim sDia As Single, sMes As Single, sDiaCarnaval, sDiaCarn As Single, sMesCarnaval 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)
si = Int(sc / 4)
28/7/2014 MACROS PARA EXCEL - VBA-
sk = sc - si * 4
sq = sh + sl - 7 * sm + 114 - sp * 31
sDiadePascoa = Int(CDate(stDiadePascoa))
sDiaCarnaval = sDiadePascoa - 47
sDiaCarn = sDiadePascoa - 48
sDiaCorpChr = sDiadePascoa + 60
ÉPascoa = True
End If
ÉPascoa = True
'Paixão de Cristo
End If
ÉPascoa = True
End If
ÉPascoa = True
'Corpus Christi
End If
28/7/2014 MACROS PARA EXCEL - VBA-
ÉPascoa = True
End If
End Function
'<b>Vamos agora consolidar as funções e criar uma nova função chamada Édiaùtil</b>
É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>
Dim i As Double
i=0
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
GetComment = ""
Else
GetComment = FCell.Comment.Text
End If
End Function
max_len = Len(parm(a))
End If
Next a
For b = 1 To spaces
Next b
End If
Next a
MsgBox msgstring
End Function
SUB TESTAR_MSG()
a = Msg("Esta é uma frase que está na 1ª linha;", "Esta está na segunda;", _
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()
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
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
'*******************************************************'
''
''
''
'*******************************************************'
Dim um_a_19
28/7/2014 MACROS PARA EXCEL - VBA-
Dim dezenas
Dim centenas
Sub carregaVars()
"dezoito", "dezenove")
"oitocentos", "novecentos")
End Sub
IMAGEM
a) No intervalo A1:A5 criei números (1 a 5)
c) Coloquei um SpinButton
strImagem = Application.VLookup(Me.SpinButton1.Value, _
Worksheets(1).Range("A2:B100"), 2, False)
If Err = 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
'parcelas de um numero
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))
Processa = centenas(a1)
Else
Processa = centenas(a1 - 1)
End If
Select Case a3
Case Is > 0
um_a_19(a3)
Else
End If
Case Is = 0
End Select
ElseIf a1 = 0 Then
Case Is < 20
Case Else
Processa = dezenas(a2)
Else
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()
Else
myRange.SpecialCells(xlBlanks).EntireRow.Delete
End If
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Range("A10").Select
ActiveCell.FormulaR1C1 = LCase(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Case Is > 1
If FLAG Then
MsgBox FLAG
Selection.Delete
28/7/2014 MACROS PARA EXCEL - VBA-
Exit Sub
End If
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
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()
'variavel a comparar
Case LCase(celula)
celula = UCase(celula)
Case UCase(celula)
celula = Application.WorksheetFunction.Proper(celula.Text)
Case Else
celula = LCase(celula.Text)
End Select
Next
End Sub
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
Var1 = Application.WorksheetFunction.Sum(myRange)
Range("Q2") = Var1
Var2 = Application.WorksheetFunction.Sum(myRange)
Range("R2") = Var2
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
nRow = 1
End If
Else
End If
'mostra os dados
End Sub
'mostra os dados
End Sub
End Sub
Unload Me
End Sub
SUB ORDENARPLANILHAS()
Dim t As Integer, i As Integer, c As Integer
Application.ScreenUpdating = False
t = Sheets.Count
For i = 1 To t - 1
For c = i + 1 To t
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
Var1 = Application.WorksheetFunction.Sum(myRange)
Range("J1") = Var1
Var2 = Application.WorksheetFunction.Sum(myRange)
Range("K1") = Var2
End Sub
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
CurrentSheet.Range("a1:a5").EntireRow.Insert
Next CurrentSheet
End Sub
Selection.EntireColumn.Select
Selection.Insert
MyRange.Select
End Sub
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
Exit Sub
End If
Range("A2").Interior.ColorIndex = xlNone
Exit Sub
End If
Range("A1").Interior.ColorIndex = 35
Else
Range("A1").Interior.ColorIndex = xlNone
End If
Range("A2").Interior.ColorIndex = 45
Else
Range("A2").Interior.ColorIndex = xlNone
End If
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
ActiveSheet.Shapes.AddTextEffect _
(msoTextEffect1, “C O N F I D E N C I A L”, _
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
Sub Marca_Dagua()
28/7/2014 MACROS PARA EXCEL - VBA-
ActiveSheet.Shapes.AddTextEffect _
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
Range("A1").Select
End Sub
=MOD(LIN();3)=MOD(COL();3)
Option Explicit
Sub Inseri_Texto_Teste_Notepad()
For i = 2 To 131
Next i
Dat.Close
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Sub Inseri_Filtro_ColA()
Columns(”A:A”).Select
Selection.AutoFilter
End Sub
Columns(”A:A”).Select
Selection.AutoFilter
End Sub
=filtre1(”MaValeur”)
=SE(B1<>”";CONT.VALORES($B$1:B1)&”.”;”")
ou
=SE(B7<>”";CONT.VALORES($B$1:B7)&”º.”;”")
‘É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()
ObjCell.Value = ObjCell.Value + 1
Next
End Sub
Sub Minha_Barra_Progressao()
Selection.Name = “fond”
With Selection.ShapeRange.Fill
.ForeColor.SchemeColor = 10
.Visible = msoTrue
.Solid
End With
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
ActiveSheet.Shapes(”prog”).Select
DoEvents
Next i
Application.StatusBar = “”
Selection.Delete
Range(”A1″).Clear
ActiveSheet.Shapes(”fond”).Select
Selection.Delete
End Sub
Option Explicit
Sub BarraDeProgreso()
Dim R As Integer
Dim MT As Double
For R = 1 To 180
MT = Timer
Do
DoEvents
28/7/2014 MACROS PARA EXCEL - VBA-
Next R
Application.StatusBar = False
End Sub
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
Sub Entre_Com_Dados()
escreva_linha = ActiveSheet.Range(”A:A”).Find(”").Row
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
‘Na verdade inseri uma autoforma (um shapes) e arredondando os cantos da célula.
Sub Celula_Arredonda()
r1 = depart.Height
r2 = depart.Width
r3 = depart.Top
r4 = depart.Left
ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, _
Selection.ShapeRange.Line.ForeColor.SchemeColor = 12
Selection.ShapeRange.Fill.Visible = msoFalse
depart.Select
End Sub
Sub Inseri_colulnas()
‘© 2007 - XL-Eves®
ActiveSheet.Unprotect
Selection.Resize(rowsize:=2).Columns(2).EntireColumn. _
Resize(columnsize:=iAntalRader).Insert
With ActiveSheet
.UsedRange
.Protect
End With
End Sub
Sub Adicionar_comentario()
Selection.Font.ColorIndex = 3
Selection.Font.Bold = True
ActiveCell.AddComment
Sub Inserir_planilha_meses()
Dim J As Integer
Dim K As Integer
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
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
For K = J + 1 To Sheets.Count
Sheets(K).Move Before:=Sheets(J)
End If
Next K
End If
Next J
End Sub
‘Esta macro inseri uma planilha por semana até o fim do ano
Sub Ano_Workbook()
dSDate = CDate(sTemp)
Application.ScreenUpdating = False
dSDate = dSDate + 7
Next sht
Application.ScreenUpdating = True
End Sub
“GetActiveWindow” () As Integer
28/7/2014 MACROS PARA EXCEL - VBA-
Sub ChangeXLIcon()
h32WndXLMAIN = GetActiveWindow32()
End Sub
With ActiveSheet.PageSetup
.LeftHeader = “”
.CenterHeader = “”
.RightHeader = “”
End With
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
Sub Inseri_Image_Grafico_dentro_comentario_CelulaA1()
nomImage = "C:\imageTemp.gif"
Hauteur = Grph.Height
Largeur = Grph.Width
Plan1.Range("A1").Comment.Delete
With Plan1.Range("A1")
.AddComment
.Comment.Visible = False
'do grafico
.Comment.Shape.Height = Hauteur
.Comment.Shape.Width = Largeur
.Comment.Shape.Fill.UserPicture nomImage
End With
Kill nomImage
'deleta o gráfico
Grph.Delete
End Sub
If IsEmpty(Range("A1")) Then ‘Não pode conter valor negativo em célula módulo da planilha
Exit Sub
End If
MsgBox "O valor não pode ser negativo! Tente outra vez!!!"
Range("A1").ClearContents
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()
End Sub
ORDENAR PLANILHAS
Sub ClassificarPlanilhas()
Dim i As Integer
Dim OldActive As Object ' Checa se as estruturas das planilhas estão protegidas
If ActiveWorkbook.ProtectStructure Then
Exit Sub
28/7/2014 MACROS PARA EXCEL - VBA-
End If
Application.EnableCancelKey = xlDisabled
VisibleWins = 0
Next Item
SheetCount = ActiveWorkbook.Sheets.Count
For i = 1 To SheetCount
SheetNames(i) = ActiveWorkbook.Sheets(i).Name
Next i
Call Classificar(SheetNames)
Application.ScreenUpdating = False
For i = 1 To SheetCount
ActiveWorkbook.Sheets(SheetNames(i)).Move ActiveWorkbook.Sheets(i)
Next i
OldActive.Activate
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
Dim Temp
First = LBound(List)
Last = UBound(List)
For j = i + 1 To Last
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
Plan1.Activate
End Sub
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
Dim i4 As Integer, i5 As
Integer, i6 As Integer
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) & _
Exit Sub
End If
Next:
Next: Next: Next: Next: Next
Dim i As Integer
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
Dim i As Integer
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
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
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.
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
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")
For i = 1 To n
Application.Windows(i).Close SaveChanges:=True
End If
Next i
For i = 1 To n
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()
Columns("B:B").Select
Selection.EntireColumn.Hidden = True
End Sub
SUB OCULTAR_COLUNA()
End Sub
Sub Exibindo_coluna()
Columns("B:B").Select
Selection.EntireColumn.Hidden = False
End Sub
SUB EXIBINDO_COLUNA2()
' Forma abreviada
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
End Sub
Sheets("Plan1").Name = "Teste"
End Sub
SUB COPIAR_E_COLAR()
Range("B5").Select
Selection.Copy
Range("B7").Select
ActiveSheet.Paste
End Sub
End Sub
SUB CALCULA2()
If TextBox_Quantidade.Value > "" And TextBox_Com.Value > "" Then
TextBox_Total.Value = FormatCurrency(TextBox_Total.Value)
End If
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub
TextBox_Total.Value = ""
Exit Sub
End If
If IsNumeric(TextBox_Quantidade.Value) Then
Calcula
Else
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.Worksheets.Add
ActiveSheet.Name = "Dados"
Workbooks.Add
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("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
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-
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
Application.ScreenUpdating = False
Application.EnableCancelKey = xlDisabled
If Me.ListBox_Alterar.ListIndex = -1 Then
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
ActiveWorkbook.Save
End Sub
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)
End If
KeyAscii = 0
End Select
End Sub
Case 8, 48 To 57
Case 44
KeyAscii = 0
KeyAscii = 0
End Select
End Sub
With TextBox
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub
GRÁFICO
Sub Visualiza_Gráfico()
oChart.Activate
ActiveChart.PrintPreview
Next
End Sub
28/7/2014 MACROS PARA EXCEL - VBA-
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.
EM UM BOTÃO
Code Snippet
Sub InserirGráficoemUserform()
Image1.Picture = LoadPicture(ArquivoGIF)
End Sub
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
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 = FormatCurrency(TextBox_Total.Value)
28/7/2014 MACROS PARA EXCEL - VBA-
End If
End Sub
TextBox_Total.Value = ""
Exit Sub
End If
If IsNumeric(TextBox_Quantidade.Value) Then
Calcula
Else
TextBox_Quantidade.Value = ""
TextBox_VUnitário.SetFocus
End If
End Sub
TextBox_Com.Value = ""
Exit Sub
End If
If IsNumeric(TextBox_Com.Value) Then
Calcula
Else
TextBox_Com.Value = ""
TextBox_VUnitário.SetFocus
End If
28/7/2014 MACROS PARA EXCEL - VBA-
End Sub