domingo, 22 de janeiro de 2017

Dica do calendário do Windows 7

Um recurso tão simples que a maioria das pessoas nem sabe que existe.
Ao abrir o calendário do Windows (um clique no relógio que está no canto direito da barra de tarefas), clique uma vez sobre o mês conforme indicado nas figuras abaixo.
Depois clique no ano.
A navegação para períodos muito longos, principalmente em anos, fica muito fácil.
Esta dica sem imagens ficaria muito abstrata.

;-)




segunda-feira, 16 de janeiro de 2017

Excel e HTML

No momento não vejo utilidade para esta descoberta que aconteceu por acaso, mas acredito que em algum momento, será muito bom conhecer este comportamento do Excel:
Se você digitar o código HTML abaixo e colar numa célula do Excel, somente o texto será exibido.
É como se o Excel interpretasse o código HTML.




;-)


Problemas com conexão via ADO com SQL Server

Um caso curioso que vou deixar registrado aqui, talvez ajude alguém que passe pela mesma situação.
Outro dia, num dos computadores da empresa onde trabalho, um banco de dados Access 2013 que acessa um servidor SQL Server 2008 somente para obter dados de uma View simplesmente começou a exibir linhas duplicadas, por exemplo, se a consulta tivesse 10 registros, era exibido 1 registro repetido 10 vezes.
Depois de muitas tentativas de solucionar o problema, inclusive reparando a instalação do Office 2013 e sem obter sucesso, troquei o provider na string de conexão e .... funcionou!

De: Provider=SQLOleDB
Para: Provider=SQLNCLI

O interessante é que o problema ocorreu em apenas um dos computadores, os outros 3 continuam funcionando com o provider anterior.

;-)

Etapas rápidas no Outlook

Olá amigos!

Para quem utiliza o Outlook no dia a dia como ferramenta de produtividade, segue uma dica muito legal: as etapas rápidas.
Na guia Página Inicial, clique em Criar no grupo Etapas Rápidas e veja as opções disponíveis.
Utilizo muito para mover e-mails para pastas específicas no arquivo *.pst, evitando assim sobrecarregar minha cota no servidor Exchange.
O ganho em agilidade é muito grande e diminui muito a possibilidade de se mover um e-mail para uma pasta errada.
Como sempre, as imagens falam mais do que as palavras, então seguem os prints das telas.

:-)


domingo, 21 de agosto de 2016

Site muito bom sobre o Excel

http://guiadoexcel.com.br/

;-)

Alterando o acesso do help do Office para offline.

Este é um detalhe que dá a entender que a Microsoft não quer que você altere e sempre direcione o help para o site deles.
O problema é que nem sempre estamos online e nestas situações o help demora para responder e avisar que não foi possível efetuar a conexão com a internet.
Eu prefiro sempre ter o help offline, mais rápido e prático.
Na figura abaixo onde você pode mudar para offline.

;-)


Recuperando itens apagados no Outlook 2010

É comum apagarmos algum e-mail por engano.
Nas versões 2010 e posteriores, o Outlook permite que se recupere esses itens mesmo que tenham sido apagados da caixa "Excluídos".
Na imagem abaixo, mostro o comando para recuperar.
Detalhe importante é que somente os itens mais recentes (geralmente um ou dois dias) podem ser recuperados.
Não é muita coisa, mas muitas vezes, evita maiores dores de cabeça.

;-)


quinta-feira, 23 de junho de 2016

Cuidado com SELECT TOP n no Access

O Access tem algumas características estranhas e uma delas me chamou a atenção:
Se o SELECT TOP n registros apresentar valores duplicados, todos serão exibidos no resultado, o que em algumas situações pode resultar em problemas no banco de dados.
Nas figuras abaixo, exemplifico o caso.
Interessante que, a mesma instrução no SQL Server 2008 R2 (e acredito que em qualquer versão do SQL Server), retorna apenas 1 registro, como era de se esperar.
Na sequencia, parte do help do Access 2007 comentando esse tipo de situação.

;-)




Retorna um determinado número de registros que se encontrem na parte superior ou na parte inferior de um intervalo especificado pela cláusula ORDER BY. Suponha que você queira os nomes dos primeiros 25 estudantes da turma de 1994:


SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC;


Se você não incluir a cláusula ORDER BY, a consulta retornará um conjunto arbitrário de 25 registros da tabela Students que satisfaça a cláusula WHERE.
O predicado TOP não opta por valores iguais.

No exemplo anterior, se as médias de pontuação de grau 25 e 26 forem as mesmas, a consulta retornará 26 registros.


sábado, 18 de junho de 2016

Criar um banco de dados pelo VBA

As vezes é necessário criar um banco de dados durante a execução de um programa.
Apliquei esta solução quando enviava o mesmo banco de dados para clientes diferentes, porém cada um com tabelas específicas.
Não esquecer de marcar a referência no VBA conforme a figura mais abaixo.

;-)


Private Sub CriarBancoDeDados()
 
    Dim objCatalog As ADOX.Catalog
 
    Set objCatalog = New ADOX.Catalog
 
    objCatalog.Create "provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Teste.accdb"

    Set objCatalog = Nothing
 
End Sub




quarta-feira, 15 de junho de 2016

Utiizando funções do Excel em outros aplicativos Office

Um recurso que facilita muito a vida de quem programa em VBA no Microsoft Office é a possibilidade de utilizar recursos de um aplicativo em outro.
Exemplificando, utilizar as funções do Excel no Word através do VBA, veja nas figuras mais abaixo.
Não esquecer de marcar a referência do Excel na versão do Office instalado.

;-)




domingo, 5 de junho de 2016

Conexão ADO em banco de dados Access 2010 com senha

Outro dia precisei fazer uma conexão via ADO num banco de dados criado no Access 2010 com senha.
Utilizei a string de conexão abaixo, mas que sempre informava "Formato de banco de dados desconhecido":

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Banco de Dados1.accdb;Jet OLEDB:Database Password="MinhaSenha"

Em pesquisa na internet, descobri que o problema é na forma como a senha é criptografada no banco de dados, bastando portanto, apenas alterar para o formato antigo, vide imagem.

;-)




sábado, 4 de junho de 2016

Listar tabelas do Access via VBA

Marca a referência:
Microsoft ADO Ext.  2.8 for DDL and Security


Option Compare Database
Option Explicit

Private Sub ListarTabelas()

    Dim cnn As New ADODB.Connection

    Dim catalogo As New ADOX.Catalog
    Dim tabela As New ADOX.Table

    Set cnn = New ADODB.Connection
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\northiwnd.mdb"
 
    Set catalogo.ActiveConnection = cnn
 
    For Each tabela In catalogo.Tables
        Debug.Print tbl.Name
    Next


End Sub

domingo, 20 de março de 2016

Powerpoint VBA

Uso do VBA no PowerPoint é raro, lembro de ter visto uma única vez, um colega de trabalho utilizar.
Eu mesmo utilizei somente para uma demonstração, depois nunca mais.
Sinceramente não vejo muita utilidade, mas é bom saber que existem publicações sobre o assunto.

Powerfull Powerpoint For Educators.

;-)


quarta-feira, 10 de fevereiro de 2016

Operador LIKE no VBA

Interessante como alguns recursos do VBA quase não são utilizados, porém são extremamente úteis.
É o caso do LIKE que costumeiramente é utilizado em instruções SQL.
Eu não sabia que existia no VBA e descobri por acaso olhando o help.
Confesso que já criei diversas funções para contornar o uso do LIKE e teria economizado tempo se soubesse que a instrução existia.
Abaixo os exemplos do próprio help do VBA.

;-)

Exemplo do operador Like

Este exemplo usa o operador Like para comparar uma seqüência de caracteres com um padrão.
Dim MyCheck
MyCheck = "aBBBa" Like "a*a"    ' Retorna True.
MyCheck = "F" Like "[A-Z]"    ' Retorna True.
MyCheck = "F" Like "[!A-Z]"    ' Retorna False.
MyCheck = "a2a" Like "a#a"    ' Retorna True.
MyCheck = "aM5b" Like "a[L-P]#[!c-e]"    ' Retorna True.
MyCheck = "BAT123khg" Like "B?T*"    ' Retorna True.
MyCheck = "CAT123khg" Like "B?T*"    ' Retorna False.

sábado, 26 de setembro de 2015

Sites muito bons sobre Outlook

http://www.howto-outlook.com/

http://www.slipstick.com/

;-)

sábado, 19 de setembro de 2015

Atualização da planilha ao usar funções personalizadas

Sempre achei que funções personalizadas (aquelas que a gente escreve no VBA) necessitavam de comandos para atualizar os valores, normalmente F2 para editar e para o recálculo.
Para contornar essa característica, basta acrescentar no início o comando:

Application.Volatile

Assim, em qualquer alteração nos valores envolvidos na função personalizada, a atualização será automática, da mesma forma como funcionam as funções do Excel.

;-)

domingo, 13 de setembro de 2015

Caixa de diálogo "Selecionar Arquivo"

Código completo.
Tempos atrás eu tinha postado um código mais enxuto que usava no Word, este está completo com todas as opções.

Original em: https://msdn.microsoft.com/pt-br/library/office/ff196794.aspx


;-)


Private Sub cmdFileDialog_Click() 
  
   ' Requires reference to Microsoft Office 11.0 Object Library. 
 
   Dim fDialog As Office.FileDialog 
   Dim varFile As Variant 
 
   ' Clear listbox contents. 
   Me.FileList.RowSource = "" 
 
   ' Set up the File Dialog. 
   Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 
 
   With fDialog 
 
      ' Allow user to make multiple selections in dialog box 
      .AllowMultiSelect = True 
             
      ' Set the title of the dialog box. 
      .Title = "Please select one or more files" 
 
      ' Clear out the current filters, and add our own. 
      .Filters.Clear 
      .Filters.Add "Access Databases", "*.MDB" 
      .Filters.Add "Access Projects", "*.ADP" 
      .Filters.Add "All Files", "*.*" 
 
      ' Show the dialog box. If the .Show method returns True, the 
      ' user picked at least one file. If the .Show method returns 
      ' False, the user clicked Cancel. 
      If .Show = True Then 
 
         'Loop through each file selected and add it to our list box. 
         For Each varFile In .SelectedItems 
            Me.FileList.AddItem varFile 
         Next 
 
      Else 
         MsgBox "You clicked Cancel in the file dialog box." 
      End If 
   End With 
End Sub


sábado, 18 de julho de 2015

Anexando arquivos em campos de tabelas no Access

Um recurso muito interessante do Access é a possibilidade de gravar arquivos em campos.
Alguém já deve estar se perguntando qual a utilidade disto, mas imagine por exemplo, poder catalogar e guardar fotos ou imagens.
Obviamente o recurso deve ser utilizado com moderação para não aumentar o tamanho do mdb.
Bem, como sempre, pensando em automação para tornar simples as tarefas rotineiras, segue abaixo um código VBA para executar a operação de anexar arquivos.

;-)

 
 
Option Compare Database
Option Explicit

Sub AnexaArquivo()

    Dim rs          As DAO.Recordset
    Dim rsAnexo     As DAO.Recordset
    Dim db          As DAO.Database    

    Set db = CurrentDb()   

    db.Execute "DELETE FROM tabela1"    

    Set rs = db.OpenRecordset("tabela1")       

    rs.AddNew
    Set rsAnexo = rs.Fields("CampoAnexo").Value
    rsAnexo.AddNew
    rsAnexo.Fields("FileData").LoadFromFile "c:\teste.txt"
    rsAnexo.Update
    rs.Update

    rs.Close
    Set rs = Nothing    

    Set db = Nothing

End Sub

terça-feira, 14 de julho de 2015

Código para apagar tabelas no Access

A fim de evitar mensagens de erro, é conveniente sempre verificar se a tabela existe antes de comandar um DROP.
Segue abaixo um exemplo.

Obs.: marcar a referência no VBA – ActiveX Data Objects


Sub ApagaTabela()
On Error GoTo Erro

    Dim rst As New ADODB.Recordset
   
    rst.Open "SELECT name FROM MSysObjects where type = 1 AND name = 'Tabela3'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    'type 6 = tabela vinculada

    If rst.RecordCount > 0 Then
        CurrentProject.Connection.Execute "DROP TABLE Tabela3"
    End If

Saida:
    rst.Close
    Set rst = Nothing
    Exit Sub

Erro:
    MsgBox Err.Description, vbOKOnly
    Resume Saida

End Sub

quarta-feira, 13 de maio de 2015

Mais um código para encerrar processos no TaskManager

Public Function KillProcess(Processo As String)

    'O nome do processo é case sensitive
    'Exemplo: WINWORD.EXE / EXCEL.EXE / wordpad.exe / etc

    Dim oServ As Object
    Dim cProc As Variant
    Dim oProc As Object

    Set oServ = GetObject("winmgmts:")
    Set cProc = oServ.ExecQuery("Select * from Win32_Process")

    For Each oProc In cProc
        If oProc.Name = Processo Then errReturnCode = oProc.Terminate()
    Next

End Function

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.