quinta-feira, 22 de abril de 2010

Achando o último dia do mês


Em algumas aplicações, principalmente as financeiras, às vezes é necessário obter o último dia de cada mês.

Seguem duas formas, uma com fórmula do Excel e outra em VBA.

Detalhe interessante: dia zero é o último dia do mês anterior.


;-)



Private Sub teste()
Dim ultimo_dia_mes As Date
ultimo_dia_mes = CDate(1 & "/" & Month(Now()) + 1 & "/" & Year(Now())) - 1
If ultimo_dia_mes = Format(Now, "dd/mm/yyyy") Then
MsgBox "ultimo dia"
End If
End Sub





Acrescentando intervalos à data corrente

Uma dica simples para "fechar a loja" por hoje, afinal o dia começa cedo e agora (01:58 hrs) é bem cedo...
Supondo que numa célula, haja a fórmula com a data de hoje: =AGORA( ).
Se eu quiser saber a data daqui a 5 dias, basta fazer isto: = agora() + 5.
Para acrescentar 1 hora e 15 minutos: =agora() + tempo(1;15;0).

É isso aí.
Pelo menos não fecho o dia com um assunto "não Excel".

;-)))

Onde vamos parar ???

Não acredito no que acabo de ver.
Uma grande revista de informática escrevendo "tuíte" no seu site...
Daqui a pouco vai aparecer o "aipéd" e coisas do gênero!
Para mim só tem uma explicação: preguiça de escrever certo.

Arghhh....

p.s.: Apesar do assunto não ter nada a ver com o "Equicél" (perceberam como ficou ridículo?), fica a dica para não fazerem isso em seus textos no Office e espero que o Word continue indicando essas aberrações como palavras incorretas.

sábado, 17 de abril de 2010

Video aulas no YouTube

Para quem gosta de vídeo-aulas, o YouTube está "recheado" de tutoriais de Excel e também de muitos outros softwares.
http://www.youtube.com/results?search_query=excel&aq=f
Sempre gostei de cursos multimídia, mas dando uma olhada nos tutoriais de Excel do YouTube, notei que a qualidade ainda deixa muito a desejar.
O vídeo é só razoável e o áudio muito pobre, provavelmente gravado com esses microfones caseiros (se não estiver enganado, são de eletreto).
Até hoje não vi nenhum curso multimídia que se comparasse em qualidade de aúdio e vídeo com os cursos da antiga Editora Terra, estes com vídeo muito bem trabalhado e áudio gravado em um estúdio de verdade.
Boa sorte para quem quiser tentar.

;-)

A pessoa que inventou deve ter achado o máximo!


Costumo dizer que a maioria dos inventores não usa o que inventa, pois certas "invenções" simplesmente não são funcionais, causam mais problemas do que ajudam ou é totalmente inútil.
Exemplo "simples" é a faixa de opções do Office 2007 que até hoje, não vi alguém que soubesse explicar qual é a lógica do agrupamento dos comandos.
Veio para atrapalhar a vida de quem já estava habituado com o funcional, intuitivo e tradicional menu.
Pior de tudo é que, outros desenvolvedores de software acharam linda a invenção e estão adotando o mesmo visual e agrupamento...
Vou deixar aqui a imagem de uma invenção que ilustra bem a situação. Pensaram na segurança para evitar spammer's e o recurso ficou tão seguro que nem o próprio dono da conta consegue mandar um simples e-mail!
Aliás, acho que nem mesmo o inventor dessa ... (deixa pra lá...) consegue acertar na primeira tentativa as letras.

;-)



quarta-feira, 14 de abril de 2010

Relógio numa célula

Bem simples:

;-)



Dim hora_atual As Date

Sub hora()

ThisWorkbook.Sheets("Plan1").Range("A1").Value = Format(Time, "hh:mm:ss")
Call acerta_hora

End Sub

Sub acerta_hora()

hora_atual = Now + TimeValue("00:00:01")
Application.OnTime hora_atual, "hora"
End Sub

Sub parar()
Application.OnTime EarliestTime:=hora_atual, Procedure:="hora", Schedule:=False
End Sub


terça-feira, 13 de abril de 2010

Listando emails do Outlook numa tabela do Access

Esta demanda partiu de um colega que precisou listar os emails pelos títulos em ordem cronológica.
Abaixo o código para consulta ou para quem precisar.
Rodamos no Office 2007.
Não esquecer de marcar a referência "Microsoft ActiveX Data Objects", qualquer versão.

;-)




Sub Listar_emails_Access()

Dim rst As New ADODB.Recordset
Dim cnn As New ADODB.Connection

Dim contador_itens As Integer
Dim nms As Outlook.NameSpace
Dim fld As Outlook.MAPIFolder
Dim itm As Object

Set nms = Application.GetNamespace("MAPI")
Set fld = nms.PickFolder

cnn.Open "Provider=Microsoft.JET.OLEDB.4.0;" & "Data Source=" & "C:\banco.mdb"

rst.Open "Tabela1", cnn, adOpenKeyset, adLockOptimistic

contador_itens = fld.Items.Count

For Each itm In fld.Items
If itm.Class = olMail Then
rst.AddNew
rst!titulo = itm.Subject
rst!Data = itm.ReceivedTime
rst.Update
End If
Next itm

rst.Close
cnn.Close

MsgBox "Fim"

End Sub

terça-feira, 6 de abril de 2010

Código para importação de arquivo texto delimitado

Vou deixar aqui só para eventual consulta.
O delimitador é o ponto-e-vírgula.
Arquivo texto sem cabeçalho.

;-)

Sub importa_delimitado()
   
    Dim entrada         As String       'linha do txt
    Dim i               As Single       'número de caracteres
    Dim linha           As Integer
    Dim coluna          As Integer
    Dim texto           As String       'texto a ser gravado na célula
    Dim ultimo          As Boolean      'controle do último caracter da linha
   
    Open "C:\Users\kazu\Desktop\pasta1.csv" For Input As #1
        
    linha = 1
    coluna = 1
    Do While Not EOF(1)
        Line Input #1, entrada
        For i = 1 To Len(entrada)
            If Mid(entrada, i, 1) = ";" Then
                Cells(linha, coluna).Value = texto
                coluna = coluna + 1
                texto = ""
            Else
                'Se for o último caracter, grava na célula
                If i = Len(entrada) Then
                    texto = texto & Mid(entrada, i, 1)
                    Cells(linha, coluna).Value = texto
                    coluna = coluna + 1
                    texto = ""
                    ultimo = True
                End If
                If Not ultimo Then texto = texto & Mid(entrada, i, 1)
            End If
            ultimo = False
        Next
        linha = linha + 1
        coluna = 1
    Loop
 
    Close #1
 
End Sub


domingo, 4 de abril de 2010

Inserindo células copiadas em outro intervalo


Boas!

Para inserir um grupo de células em outro intervalo, muita gente costuma primeiro inserir novas células para depois colar o conteúdo copiado.
O meio mais fácil de fazer isso, é clicar com o botão direito, selecionar "Inserir células copiadas..." e depois optar por deslocar as células à direita ou abaixo.
No exemplo bem simples, eu inseri os números 4, 5 e 6 na primeira coluna em seus respectivos lugares.

;-)

Obtendo o reembolso pelo Windows OEM

Apenas vou deixar o link aqui.
Parabéns ao Otto Teixeira que conseguiu essa façanha e que muitos outros tenham sucesso contra a prepotência das empresas.

http://ottoteixeira.com/2010/03/21/como-conseguir-o-reembolso-pelo-windows-oem/

Espero que o link da Info não saia do ar tão rapidamente:
http://info.abril.com.br/noticias/tecnologia-pessoal/ele-rejeitou-o-windows-e-foi-reembolsado-24032010-34.shl


;-)

domingo, 7 de março de 2010

Transferindo contas do Outlook 2003 - parte 2

Pesquisando um pouco mais, encontrei um aplicativo interessante que resolveu o meu problema anterior.
Explicando, apesar de conseguir transferir a conta do Outlook 2003 para outro HD, ao baixar as mensagens do Yahoo!, estavam vindo todas e-mails desde a abertura da conta!
Ao executar o aplicativo Easy Transfer, o problema foi resolvido.
Abaixo o link para quem não quer ter dor de cabeça como eu tive...
http://www.microsoft.com/downloads/details.aspx?FamilyId=2B6F1631-973A-45C7-A4EC-4928FA173266&displaylang=en


;-)

Colar > Especial > Valores (texto em html)

Às vezes eu preciso copiar texto e/ou valores de sites que geralmente vêm no formato html para colar no Excel, para tanto eu uso Colar > Especial > Valores.
Um jeito mais prático, é colar diretamente na barra de fórmulas, que acaba tendo o mesmo efeito, porém com menos click's.
Experimentem!


;-)

sábado, 6 de março de 2010

Exportar conta de e-mail no Outlook 2003

Ao transferir meus arquivos para um novo HD, com o XP recém-instalado, deparei com um problema inesperado: exportar a conta de e-mail no Outlook origem para depois importá-la no novo WinXP.
Aparentemente uma tarefa simples, mas... não existe a opção de exportar a conta!
O Outlook Express que é a versão simplificada do leitor de e-mail tem esse recurso, não entendo porque a Microsoft não incluiu no "irmão mais velho".
Bem, pesquisando pela internet, encontrei a solução através de uma chave no registro.
Segue o caminho das pedras.
Depois de localizar a chave, basta exportá-la e importar no outro PC.
Artigo original em http://www.infonegocio.com/luzylar/cuentasoutlook2003.htm

A "maledeta":

HKEY_CURRENT_USER\
Software\
Microsoft\
Windows NT\
CurrentVersion\
Windows Messaging Subsystem\
\Profiles\
Outlook\
9375CFF0413111d3B88A00104B2A6676

;-)

segunda-feira, 15 de fevereiro de 2010

Alinhar texto dentro de uma string

Olá!

Segue uma dica para alinhar um texto dentro de uma variável do tipo string.
Não vejo muita utilidade, pois quando temos possíveis espaços dentro de uma string e queremos trabalhar somente com o valor, faz mais sentido usar um TRIM(variável).
Bem, se a função existe, em alguma situação ela deve ter sua utilidade.


;-)



Option Explicit
Dim texto As String

Sub teste()

texto = " azul "
Debug.Print texto

'Texto alinhado à esquerda dentro da variável
LSet texto = "azul"
Debug.Print texto

'Texto alinhado à direita dentro da variável
RSet texto = "azul"
Debug.Print texto
End Sub


domingo, 14 de fevereiro de 2010

Acessando dados do SQL Server Express 2005

ADO é um recurso muito versátil, permite ao Excel acessar base de dados como o Access, arquivos texto e também do SQL Server.
Vou mostrar aqui um exemplo bem simples de como acessar a tabela de clientes ("Customers") do Northwind.
Para quem quiser utilizar o recurso, não esqueça de marcar o "Microsoft Active Data Objects" nas referências do projeto VBA, pode ser qualquer versão. Aqui eu utilizei a 2.8.


;-)



Option Explicit

Sub SQL_Express()
Dim rst As New ADODB.Recordset
Dim cnn As New ADODB.Connection
Dim i As Integer

cnn.Open "Provider=SQLNCLI;Data Source=(local)\SQLEXPRESS;uid=sa;pwd=123;database=northwind"

rst.CursorLocation = adUseClient
rst.Open "SELECT CompanyName FROM customers", cnn, adOpenKeyset, adLockOptimistic

i = 1
Do While Not rst.EOF
Cells(i, 1).Value = rst!CompanyName
i = i + 1
rst.MoveNext
Loop

rst.Close
cnn.Close

Set rst = Nothing
Set cnn = Nothing

End Sub


sábado, 13 de fevereiro de 2010

Várias versões do Office no mesmo computador

Ter várias versões do Office sempre gera algum tipo de problema.
Lembro que tive a versão 97 com 2000, 97 com XP e recentemente 2003 com 2007.
Cansei de tantos pequenos problemas que resolvi ficar somente com o 2003 instalado, mais do que suficiente para as minhas necessidades.
Para quem quiser se aventurar... segue um link com dicas muito interessantes:


http://pubs.logicalexpressions.com/Pub0009/LPMArticle.asp?ID=762


;-)

quarta-feira, 27 de janeiro de 2010

Usando a barra de status do Excel

Muitas vezes durante a execução de uma macro, queremos acompanhar o andamento do processo.
Para isso, basta usar o recurso da barra de status do próprio Excel.
Abaixo um exemplo bem simples com um looping preenchendo um conjunto de células.
Ao lado, o resultado.

;-)


Option Explicit
Dim i As Integer

Sub status_bar()
For i = 1 To 5000
DoEvents
Cells(i, 1).Value = "Teste"
Application.StatusBar = "Preenchendo célula " & i & " de 5.000"
Next
Application.StatusBar = False

End Sub


domingo, 27 de dezembro de 2009

Office 2008 no Mac não tem VBA!

Muito estranho...
Bem, não sou usuário dos Mac's, talvez alguém que o seja possa contribuir com sua opinião.

Segue o link (tomara que não sumam com o artigo).
Vou guardar uma cópia em pdf no meu e-mail, caso o link esteja quebrado.

;-)



Verificar se uma planilha existe numa pasta fechada via VBA

Às vezes me deparo com pedidos estranhos em grupos de discussões e fóruns da vida.
Acabei de ver agora, um colega que precisa ver se uma planilha existe numa pasta que está fechada.
Tempos atrás eu precisei usar a linguagem SQL no VBA para inserir dados numa outra planilha, cuja pasta poderia ou não estar aberta. Para contornar isso, usei o ADO.
Importante: não esquecer de marcar a referência "Microsoft Active Data Objects" (versão de 2.6 para cima).
Aproveitando para relembrar conceitos... uma "pasta" do Excel contém planilhas (é muito comum as pessoas chamarem pastas de planilhas e confundirem pasta do Excel com pasta do Windows que são coisas bem diferentes!).


;-)



Sub ver()
Dim arquivo As String
arquivo = "c:\teste.xls"
Dim cnn As New ADODB.Connection
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;data source = " _
& arquivo & ";Extended Properties=Excel 8.0;"

On Error Resume Next
cnn.Execute "SELECT top 1 * from [planilha1$]"
If Err.Number = 0 Then
MsgBox "Planilha existe"
Else
MsgBox "Planilha não existe"
End If

cnn.Close
Set cnn = Nothing

End Sub


sexta-feira, 25 de dezembro de 2009

Corretor da nova ortografia no Word 2007

Demorou mas saiu:

http://www.microsoft.com/downloads/details.aspx?FamilyId=DF0AF8D5-A8DA-4938-8A44-E8BE7C8EEAEF&displaylang=pt-br

Ou na minha pasta compartilhada do 4shared, link mais acima da página.

;-)

Pesquisar este blog

Arquivo do blog

Quem sou eu

Minha foto
Administrador de Empresas/Técnico em Processamento de Dados. Microsoft Office User Specialist - Excel Proficient. Pós-graduado em Business Intelligence.