quinta-feira, 17 de janeiro de 2019

Formatar texto numérico com zeros à esquerda

Sempre aparace uma necessidade de colocar zeros à esquerda em textos que representam números.

Exemplo clássico é transformar o número que represente um mês, em forma de string, com o zero antes.

Tipo: 
Dim sMes AS String
Dim sAno AS STring

sAno = "" & YEAR( sAno )

sMes =  "" & Month( NOW() )      ' Resultará em 2019 1, enquanto que o desejável seria 201901.

Quase todo mundo tem uma função que faz isso. Eis a minha:



Function strZero(iNumero As Variant, iTam As Integer) As String

 Dim strTemp As String

  strTemp = String(iTam, "0")

 strZero = Right(strTemp & Trim(iNumero), iTam)

End Function

'
' Exemplo
'

Dim sMes AS String
Dim sAno AS STring

sAno = "" & YEAR( sAno )

sMes =  strZero(  Month( NOW() ), 2)   

' sMes = 201901.

OU

msgbox  "" & YEAR( now() ) & strZero(  Month( NOW() ), 2)   






Exemplo de uso: 

terça-feira, 8 de janeiro de 2019

VBA: Pegar a última linha preenchida

Muitas vezes precisamos escrever em uma planilha, linha a linha, sou seja, quando for colocar um novo conteúdo na planilha, precisamos que o mesmo ocorra uma linha após a última linha preenchida.

Para isso, precisamos saber qual  a última linha?

Uso a função fUltimaLinha para isso. Sintaxe:

wsPlanilha  = Planilha em que se deseja obter a última linha
iColuna       = Número da coluna que será avaliada

Retorna um valor LONG. ( mais de 32 mil linhas ).

Exemplo:

DIM iUltimaLinha AS LONG

iUltimaLinha = fUltimaLinha( Sheets("PlanilhaDestino"), 1 ) + 1

sheets("PlanilhaDestino").Cells( iUltimaLinha, 1) = "Teste!"
sheets("PlanilhaDestino").Cells( iUltimaLinha, 2) = "Novo Teste!"


Function fUltimaLinha(wsPlanilha As Worksheet, iColuna As Integer) As Long
   Dim iLinha As Long
 
   iLinha = wsPlanilha.Cells(Rows.Count(), iColuna).END(xlUp).Row
   fUltimaLinha = iLinha
End Function



quinta-feira, 3 de janeiro de 2019

Função para limpar uma planilha, via VBA

Quando trabalhamos com uma planilha que receberá novo conteúdo, muitas vezes precisamos apagar o conteúdo atual da mesma. Há diversas formas de fzer isso. Criei essa função genérica para limpar qualquer planilha.


Ela recebe como parâmetros:
wsDestino = Planilha que se deseja limpar
Exemplo de uso:
LimpaPlanilha Sheets("Buffer_1"), "A2", "F"
Neste caso, vai limpar uma planilha chamada Buffer_1, a partir da célula A2 até a célula F. Para saber a última linha e fechar o Range em F, verifico qual é a última linha preenchida observando o conteúdo da coluna A.



sCelulaInicial = Célula a partir da qual iniciaremos a limpeza. Passar no formato "A3", ou seja, endereço de célula baseado em Letra + Número da linha

scolunaFinal  = Letra da coluna final para formar um RANGE que se deseja limpar. Passar somente a letra da coluna

Sub LimpaPlanilha(wsDestino As Worksheet, sCelulaInicial As String, sColunaFinal As String)

Dim wsPlanAtual As Worksheet
Dim bAtualUpate As Boolean
'
' Preserva o status de screenpudating atual
'
bAtualUpate = Application.ScreenUpdating
'
' Preserva a planilha atual
'
Set wsPlanAtual = ActiveSheet
'
' Desliga o screenupdating.
'
Application.ScreenUpdating = False
'
' Ativa a planilha que será "limpa"
'
wsDestino.Activate
'
' Monta o RANGE que será "limpo"
'
wsDestino.Range("" & sCelulaInicial & ":" & sColunaFinal & wsDestino.Cells(Rows.Count, 1).END(xlUp).Row).Select
'
' Apaga o conteúdo
'
Selection.Clear
'
' Reativa a planilha antes da chamada da função
'
wsPlanAtual.Activate
'
' Restaura o ScreenUpdating anterior à chamada da função
'
Application.ScreenUpdating = bAtualUpate
'
' Libera memória com o conteúdo da variável de apoio
'
Set wsPlanAtual = Nothing
End Sub

Formatar texto numérico com zeros à esquerda

Sempre aparace uma necessidade de colocar zeros à esquerda em textos que representam números. Exemplo clássico é transformar o número que ...