Funções
O que fazem
Abs
Retorna o valor absoluto de um número
Array
Returns a variant containing an array
Asc
Converts the first character of a string to its ASCII value
Atn
Returns the arctangent of a number
Choose
Returns a value from a list of items
Chr
Converts an ANSI value to a string
Cos
Returns a number's cosine
CurDir
Returns the current path
Date
Returns the current system date
DateAdd
Returns a date to which a specified time interval has been
added — for example, one month from a particular date
DateDiff
Returns an integer showing the number of specified time intervals between two dates, for example the number of months between now and your birthday
DatePart
Returns an integer containing the specified part of a given
date — for example, a date's day of the year
DateSerial
Converts a date to a serial number
DateValue
Converts a string to a date
Day
Returns the day of the month from a date value
Dir
Returns the name of a file or directory that matches a pattern
Erl
Returns the line number that caused an error
Err
Returns the error number of an error condition
Error
Returns the error message that corresponds to an error number
Exp
Returns the base of the natural logarithm (e) raised to a power
FileLen
Returns the number of bytes in a file
Fix
Returns a number's integer portion
Format
Displays an expression in a particular format
GetSetting
Returns a value from the Windows registry
Hex
Converts from decimal to hexadecimal
Hour
Returns the hours portion of a time
InputBox
Displays a box to prompt a user for input
InStr
Returns the position of a string within another string
Int
Returns the integer portion of a number
IPmt
Returns the interest payment for an annuity or loan
IsArray
Returns True if a variable is an array
IsDate
Returns True if an expression is a date
IsEmpty
Returns True if a variable has not been initialized
IsError
Returns True if an expression is an error value
IsMissing
Returns True if an optional argument was not passed to a procedure
IsNull
Returns True if an expression contains no valid data
IsNumeric
Returns True if an expression can be evaluated as a number
IsObject
Returns True if an expression references an OLE Automation object
LBound
Returns the smallest subscript for a dimension of an array
LCase
Returns a string converted to lowercase
Left
Returns a specified number of characters from the left of a string
Len
Returns the number of characters in a string
Log
Returns the natural logarithm of a number to base e
LTrim
Returns a copy of a string, with any leading spaces removed
Mid
Returns a specified number of characters from a string
Minute
Returns the minutes portion of a time value
Month
Returns the month from a date value
MsgBox
Displays a message box and (optionally) returns a value
Now
Returns the current system date and time
RGB
Returns a numeric RGB value representing a color
Right
Returns a specified number of characters from the right of a string
Rnd
Returns a random number between 0 and 1
RTrim
Returns a copy of a string, with any trailing spaces removed
Second
Returns the seconds portion of a time value
Sgn
Returns an integer that indicates a number's sign
Shell
Runs an executable program
Sin
Returns a number's sine
Space
Returns a string with a specified number of spaces
Sqr
Returns a number's square root
Str
Returns a string representation of a number
StrComp
Returns a value indicating the result of a string comparison
String
Returns a repeating character or string
Tan
Returns a number's tangent
Time
Returns the current system time
Timer
Returns the number of seconds since midnight
TimeSerial
Returns the time for a specified hour, minute, and second
TimeValue
Converts a string to a time serial number
Trim
Returns a string without leading or trailing spaces
TypeName
Returns a string that describes a variable's data type
UBound
Returns the largest available subscript for an array's dimension
UCase
Converts a string to uppercase
Val
Returns the numbers contained in a string
VarType
Returns a value indicating a variable's subtype
Weekday
Returns a number representing a day of the week
Year
Returns the year from a date value
✔ VBA Excel Specialist® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog podem ser tratados como consultoria freelance. Contate-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.
Views
...
Important:
E-mails
eBook Promo
VBA Tips - Funções - Functions
VBA Tip - Acessando arquivo Texto - Text File access - Scripting Runtime object library - Scrrun.dll
Sub WriteToTextFile()Dim fs As Scripting.FileSystemObject, f As Scripting.TextStreamDim l As LongSet fs = New FileSystemObjectSet f = fs.OpenTextFile("C:\FolderName\TextFileName.txt", _ForWriting, True)With fFor l = 1 To 100.WriteLine "This is line number " & lNext l.CloseEnd WithSet f = NothingSet fs = NothingEnd SubSub AppendToTextFile()Dim fs As Scripting.FileSystemObject, f As Scripting.TextStreamDim l As LongSet fs = New FileSystemObjectSet f = fs.OpenTextFile("C:\FolderName\TextFileName.txt", _ForAppending, True)With fFor l = 1 To 100.WriteLine "Added line number " & lNext l.CloseEnd WithSet f = NothingSet fs = NothingEnd SubSub ReadFromTextFile()Dim fs As Scripting.FileSystemObject, f As Scripting.TextStreamDim l As LongSet fs = New FileSystemObjectSet f = fs.OpenTextFile("C:\FolderName\TextFileName.txt", _ForReading, False)With fl = 0While Not .AtEndOfStreaml = l + 1Cells(l, 5).Formula = .ReadLineWend.CloseEnd WithSet f = NothingSet fs = NothingEnd Sub
VBA Excel - Criando Teclas de Atalho.
Quando criamos códigos VBA necessitamos executá-los e isso pode ser feito de muitos modos:
- Através de Eventos,
- Através de funções personalizadas (UDF),
- Através de um objecto que irá chamar o nosso código (quer esteja na worksheet ou na ribbon), e
- Através de teclas de atalho (shortcuts)
A possibilidade de utilizar determinadas teclas para chamar o código que criamos é muito prática e útil. Neste artigo veremos algumas formas e exemplos de como associar teclas de atalho a procedimentos, compreendendo as principais diferenças entre os dois métodos disponíveis.
A maneira mais simples e usada pela maioria dos utilizadores, é selecionando o separador Developer, escolhendo a opção Macros (ou pressionando as teclas Alt+F8)
Na janela com as macros disponíveis, selecionamos a macro pretendida e escolhemos a opção Options.
Abrirá uma nova janela onde podemos indicar que tecla de atalho iremos associar à macro seleccionada.
Neste exemplo, visível na imagem anterior, para chamar a Macro1, a combinação definida é Ctrl+a. Podemos indicar diversas letras (apenas letras) e se indicarmos uma letra em minúscula a combinação associada, por exemplo, será Ctrl+a e se indicarmos a letra em maiúscula a combinação associada será Ctrl+Shift+a.
Alguns exemplos:
a = Ctrl + a
u = Ctrl + u
A = Ctrl + Shift + a
U = Ctrl + Shift + u
Simples e prático.
No entanto isto limita-nos à utilização de determinadas combinações de teclas , e isso em alguns casos, poderá ser um problema. Além disso não permite a atribuição dinâmica e a utilização de teclas especiais. Mas isto pode ser resolvido utilizando VBA.
Para atribuir uma tecla de atalho a uma macro, utilizamos o método Application.OnKey()
Application.OnKey "combinação", "procedimento a associar"
Exemplo:
Application.OnKey "^a", "Macro1"
Neste caso é associada a combinação Ctrl+a à Macro1.
Mas vejamos a tabela de códigos de teclas especiais, que além das letras e números podem ser utilizados:
| Tecla | Código |
| BACKSPACE | {BACKSPACE} ou {BS} |
| BREAK | {BREAK} |
| CAPS LOCK | {CAPSLOCK} |
| CLEAR | {CLEAR} |
| DELETE ou DEL | {DELETE} ou {DEL} |
| DOWN ARROW | {DOWN} |
| END | {END} |
ENTER (teclado numérico) | {ENTER} |
| ENTER | ~ (tilde) |
| ESC | {ESCAPE} ou {ESC} |
| HELP | {HELP} |
| HOME | {HOME} |
| INS | {INSERT} |
| LEFT ARROW | {LEFT} |
NUM LOCK | {NUMLOCK} |
| PAGE DOWN | {PGDN} |
| PAGE UP | {PGUP} |
| RETURN | {RETURN} |
| RIGHT ARROW | {RIGHT} |
| SCROLL LOCK | {SCROLLLOCK} |
| TAB | {TAB} |
| UP ARROW | {UP} |
| F1 a F15 | {F1} até {F15} |
E as teclas que são usadas para combinar:
| Tecla | Código |
| SHIFT | + (adicção) |
| CTRL | ^ (acento circunflexo) |
| ALT | % (percentagem) |
Assim, com a lista de códigos, podemos combinar e associar conjuntos de teclas a macros que tenhamos criado/gravado. Podemos utilizar o evento Workbook_Open(), que é executado quando o Excel é aberto, e definindo ao abrir as associações que queremos, por exemplo:
Private Sub Workbook_Open()
Application.OnKey "+^{UP}", "MostraResultado"
Application.OnKey "%{INSERT}", "CopiaDados"
End Sub
Neste caso, a combinação Shift+Ctrl+Seta Cima chama o procedimento MostraResultado e a combinação Alt+Insert chama o procedimento CopiaDados.
No entanto estas atribuições funcionam se os procedimentos estiverem definidos num módulo, pois se estiverem definidos no Workbook ou em determinado Worksheet não irá funcionar. Nestes casos é necessário definir o caminho para eles, como é possível ver no exemplo seguinte:
Private Sub Workbook_Open()
Application.OnKey "+^{UP}", "ThisWorkbook.MostraResultado"
Application.OnKey "%{INSERT}", "Sheet1.CopiaDados"
End Sub
Aqui estamos a indicar que o procedimento MostraResultado está criado em ThisWorkbook e o procedimento CopiaDados está criado no código da Sheet1.
Mas atente que determinadas combinações, especialmente usando a tecla Alt mais uma letra ou número, não funcionam, pois são usadas como teclas de atalho do próprio MS Excel. É importante testar sempre!
É importante verificar se não estamos a utilizar uma combinação do próprio sistema operacional. Por exemplo, a combinação Ctrl+C ("^c") serve para copiar informação (copy), assim como o Ctrl+V ("^v") serve para colar informação (paste). Se atribuirmos estas combinações a diferentes procedimentos, é sobreposto o funcionamento normal (neste caso o copy/paste) e passará a chamar os procedimentos que definimos. Isto pode ser desagradável para muitos utilizadores.
Um exemplo muito simples para que testem rapidamente e entendam o problema de algumas associações. Coloquem o seguinte código num módulo e executem o procedimento AssociaTeclas.
Sub AssociaTeclas()
Application.OnKey "~", "Opps"
End Sub
Sub Opps()
MsgBox "Opps !!!"
End Sub
Mas podemos também desabilitar as associações definidas. Para isso não definir o segundo argumento do método OnKey() que é opcional.
Sub DesabilitaTeclas()
Application.OnKey "~"
Application.OnKey "^v"
Application.OnKey "^v"
Application.OnKey "%{INSERT}"
Application.OnKey "+^{UP}"
End Sub
Após executar o procedimento DesabilitaTeclas as associações definidas deixariam de funcionar e, neste caso, o Enter voltaria a funcionar como antes, assim como o Ctrl+c e o Ctrl+v.
Neste pequeno artigo vimos como é simples atribuir teclas de atalho para chamar procedimentos, utilizando as opções já disponíveis e através de código, e alguns problemas que as associações podem causar.
As associações são, sem dúvida, uma forma muito efetiva de se evocar certas funcionalidades.
VBA Tips - Guardando mensagens de Erro num arquivo Texto - Logging Errors to a Text File - Scripting Runtime object library - Scrrun.dll
Sub LogError (errX As ErrObject, Optional strProcName As String)' This procedure logs errors to a text file. It is used in' this chapter to log synchronization errors.'' Arguments:' errX: A variable that refers to the VBA Err object.Dim fsoSysObj As FileSystemObjectDim filFile As FileDim txsStream As TextStreamDim lngErrNum As LongDim strPath As StringDim strErrText As StringSet fsoSysObj = New FileSystemObject' Store error information.lngErrNum = errX.NumberstrErrText = errX.Description' Clear error.errX.Clear' Return Windows Temp folder.strPath = GetTempDirIf Len(strPath) = 0 ThenGoTo LogError_EndEnd IfOn Error Resume Next' See if file already exists.Set filFile = fsoSysObj.GetFile(strPath & APP_ERROR_LOG)' If not, then create it.If Err <> 0 ThenSet filFile = fsoSysObj.CreateTextFile(strPath & APP_ERROR_LOG)End IfOn Error GoTo 0' Open file as text stream for reading.Set txsStream = filFile.OpenAsTextStream(ForAppending)' Write error information and close.With txsStream.WriteLine lngErrNum.WriteLine strErrTextIf Len(strProcName) > 0 Then .WriteLine strProcName.WriteLine Now.WriteBlankLines 1.CloseEnd WithLogError_End:Exit SubEnd Sub
O método OpenAsTextStream retorna um objeto TextStream, que é o objeto que usa para trabalhar com o texto no arquivo. Para ler uma linha, por exemplo, escolha o método ReadLine do objeto TextStream; para escrever uma linha, opte usar o método WriteLine. Quando terminar de trabalhar com o arquivo, use o método Close para fechá-lo.O procedimento acima registra um erro em um arquivo texto. Recebe dois argumentos: um argumento ErrObject, que é uma referência ao objeto Err o qual contém o erro atual, e um argumento opcional strProcName, que especifica o nome do procedimento onde ocorreu o erro.O procedimento LogError grava em um arquivo de texto na pasta C:\Windows\Temp. Para determinar onde a pasta Temp do Windows é, ele chama um outro procedimento, o procedimento GetTempDir. Este procedimento faz uma chamada a API do Windows para determinar a pasta Temp. O Windows não consegue inicializar sem uma pasta Temp designada.O procedimento LogError é usado para registrar vários erros. A primeira vez que o procedimento é chamado, nenhum arquivo de log existe, por isso deve criar um. Em cada chamada subseqüente, o procedimento deve abrir o arquivo de log existente. A maneira mais simples de fazer isso é olhar para o nome do arquivo que está esperando, se ele não estiver lá, lide com o erro e crie o arquivo.Infelizmente, quando o procedimento é chamado pela primeira vez e o erro ocorre, a informação existente no objeto Err é limpo e as informações para o novo erro tomam seu lugar. Uma vez que há apenas um objeto Err disponível em VBA, as informações de erro que você passou para o procedimento é perdida quando um novo erro ocorre. Portanto, a primeira coisa que o procedimento faz é armazenar o número do erro e a descrição do erro nas variáveis.Uma vez que o procedimento tem uma referência para o arquivo texto, abre-o para acrescentar, e em seguida, grava as informações de erro para o arquivo, linha por linha.
VBA Tips - Alterando as propriedades dos arquivos e pastas - Setting File & Folder Attributes - Scripting Runtime object library - Scrrun.dll
Function ChangeFileAttributes(strPath As String, _Optional lngSetAttr As FileAttribute, _Optional lngRemoveAttr As FileAttribute, _Optional blnRecursive As Boolean) As Boolean' This function takes a directory path, a value specifying file' attributes to be set, a value specifying file attributes to be' removed, and a flag that indicates whether it should be called' recursively. It returns True unless an error occurs.Dim fsoSysObj As FileSystemObjectDim fdrFolder As FolderDim fdrSubFolder As FolderDim filFile As File' Return new FileSystemObject.Set fsoSysObj = New FileSystemObjectOn Error Resume Next' Get folder.Set fdrFolder = fsoSysObj.GetFolder(strPath)If Err <> 0 Then' Incorrect path.Let ChangeFileAttributes = FalseGoTo ChangeFileAttributes_EndEnd IfOn Error GoTo 0' If caller passed in attribute to set, set for all.If lngSetAttr ThenFor Each filFile In fdrFolder.FilesIf Not (filFile.Attributes And lngSetAttr) ThenLet filFile.Attributes = filFile.Attributes Or lngSetAttrEnd IfNextEnd If' If caller passed in attribute to remove, remove for all.If lngRemoveAttr ThenFor Each filFile In fdrFolder.FilesIf (filFile.Attributes And lngRemoveAttr) ThenLet filFile.Attributes = filFile.Attributes - lngRemoveAttrEnd IfNextEnd If' If caller has set blnRecursive argument to True, then call' function recursively.If blnRecursive Then' Loop through subfolders.For Each fdrSubFolder In fdrFolder.SubFolders' Call function with subfolder path.ChangeFileAttributes fdrSubFolder.Path, lngSetAttr, lngRemoveAttr, TrueNextEnd IfLet ChangeFileAttributes = TrueChangeFileAttributes_End:Exit FunctionEnd Function
VBA Tips - Retornando arquivos dentro de um diretório - Returning Files from the File System - Scripting Runtime object library - Scrrun.dll

Depois de criar uma nova instância do FileSystemObject, pode usá-lo para trabalhar com unidades, pastas e arquivos no sistema de arquivos.O procedimento a seguir retorna os arquivos em uma pasta específica em um objeto Dictionary. O procedimento GetFiles recebe três argumentos:
Retornando um valor booleano que indica se o procedimento foi bem sucedido.O caminho para o diretório,Um objeto Dictionary, eUm argumento booleano opcional que especifica se o procedimento deve ser chamado recursivamente.
O primeiro procedimento usa o método GetFolder para retornar uma referência a um objeto Folder. Em seguida, percorre a coleção de arquivos da pasta e adiciona o caminho e o nome do arquivo para cada arquivo no objeto Dictionary. Se o argumento blnRecursive estiver definido como True, o procedimento é chamado recursivamente, GetFiles para retornar os arquivos em cada subpasta.
Ao instalar as aplicações do MS Office, uma das bibliotecas de objetos instalados no seu sistema é o Scripting Runtime object library. Esta biblioteca contém objetos úteis a partir de qualquer VBA ou script, e por isso é fornecido como uma biblioteca separada.Os objetos na Scripting Runtime object library facilitam o acesso ao sistema de arquivos, e torna a leitura e gravação num arquivo texto muito mais simples.Por padrão, nenhuma referência é definido para esta biblioteca, então você deve definir uma referência para que você possa usá-lo. Se o Scripting Runtime object library não aparecer na caixa de diálogo de Referências (menu Ferramentas), você deve ser capaz de encontrá-la na subpasta C:\Windows\System\Scrrun.dll.
Function GetFiles (strPath As String, dctDict As Dictionary, Optional blnRecursive As Boolean) As Boolean' Esta função retorna todos os arquivos que estiverem dentro de um diretório' como um objeto Dictionary. Se efetuarmos a chamada recursivamente, este retornará' todos os arquivos nas subpastas.Dim fsoSysObj As FileSystemObjectDim fdrFolder As FolderDim fdrSubFolder As FolderDim filFile As File' Retorna um novo FileSystemObject.Set fsoSysObj = New FileSystemObjectOn Error Resume Next' Obtém a pasta.Set fdrFolder = fsoSysObj.GetFolder(strPath)If Err <> 0 Then' Incorrect path.GetFiles = FalseGoTo GetFiles_EndEnd IfOn Error GoTo 0' Efetua o Loop através da coleção de arquivos, adicionando-os ao dictionary.For Each filFile In fdrFolder.FilesdctDict.Add filFile.Path, filFile.PathNext filFile' Se o flag Recursivo for true, executa recursivamente.If blnRecursive ThenFor Each fdrSubFolder In fdrFolder.SubFoldersGetFiles fdrSubFolder.Path, dctDict, TrueNext fdrSubFolderEnd If' Retorna True se não ocorrer nenhum erro.GetFiles = TrueGetFiles_End:Exit FunctionEnd Function
Sub TestGetFiles()' Call to test GetFiles function.Dim dctDict As DictionaryDim varItem As Variant' Create new dictionary.Set dctDict = New Dictionary' Call recursively, return files into Dictionary object.If GetFiles(GetTempDir, dctDict, True) Then' Print items in dictionary.For Each varItem In dctDictDebug.Print varItemNextEnd IfEnd Sub
Você também pode usar o objeto FileSearch, para encontrar um arquivo ou grupo de arquivos. O objeto FileSearch tem certas vantagens em que você pode pesquisar subpastas, para um determinado tipo de arquivo, ou pesquisar o conteúdo de um arquivo, basta definir algumas propriedades.Por outro lado, a Scripting Runtime object library permite que trabalhe com arquivos individuais ou pastas como objetos que têm seus próprios métodos e propriedades. Por exemplo, o procedimento ChangeFileAttributes, altera atributos de arquivo, definindo a propriedade de atributos para cada objeto de arquivo na coleção de arquivos de um objeto de pasta particular.
VBA Tips - Reexibindo pastas ocultas com VBA - Scripting Runtime object library - Scrrun.dll
Ao instalar as aplicações do MS Office, uma das bibliotecas de objetos instalados no seu sistema é o Scripting Runtime object library. Esta biblioteca contém objetos úteis a partir de qualquer VBA ou script, e por isso é fornecido como uma biblioteca separada.Os objetos na Scripting Runtime object library facilitam o acesso ao sistema de arquivos, e torna a leitura e gravação num arquivo texto muito mais simples.Por padrão, nenhuma referência é definido para esta biblioteca, então você deve definir uma referência para que você possa usá-lo. Se o Scripting Runtime object library não aparecer na caixa de diálogo de Referências (menu Ferramentas), você deve ser capaz de encontrá-la na subpasta C:\Windows\System\Scrrun.dll.
Sub ShowHiddenFolders()
Dim objFSO As FileSystemObjectSet objFSO = New FileSystemObjectDim objFld As FolderDim iFld As FolderSet objFld = objFSO.GetFolder("c:\Root")For Each iFld In objFld.SubFolders
iFld.Attributes = Directory'iFld.Attributes = Hidden'iFld.Attributes = ReadOnly
Next iFld
End Sub
