Novo site de VBA da Microsoft
Tue, Oct 12 2010 1:29

O VBA tem um papel importante no posicionamento do MS-Office no mercado, já que permite um nível de customização que nenhuma outra ferramenta tem.

Assim, nada mais adequado que a Microsoft voltar a dar um espaço de destaque ao VBA, com conteúdo atualizado para o Office 2010:

http://msdn.microsoft.com/en-us/office/ff688774.aspx

O link direto é, na verdade, este: http://www.iheartmacros.com/

Na primeira vez que vi o link, eu li "hate", mas é "heart" o correto! 

by Luiz | 2 comment(s)
Filed under:
Excel – Erro de formato ao abrir planilha a partir de Internet Banking
Tue, Sep 21 2010 12:20

Depois de instalar o Office 2007 ou 2010, muitos usuários de Internet Banking passaram a ter problema ao usar o comando de exportar para Excel oferecido por alguns bancos. Trata-se da mensagem “The file you are trying to open ‘arquivo.xls’ is in a different format than specified by the file extension” ou, na versão em português, “O arquivo que você está tentando abrir, "arquivo.xls", está em um formato diferente do especificado pela extensão do arquivo”. Ao clicar em “Sim”, a planilha abre normalmente, mas é uma mensagem um tanto incômoda para quem usa com frequência este tipo de funcionalidade.

 

O motivo deste alerta é que o Excel 2007 trouxe um recurso novo de segurança chamado Extension Hardening, que verifica se a extensão do conteúdo a ser aberto é a mesma do comando shell que tenta abrir o arquivo. Se o tipo de arquivo for diferente (HTML, XML, CSV, etc.), o Excel exibe o aviso pedindo confirmação do usuário.

Esta checagem é configurável e eu costumo desativá-la no meu perfil de usuário nas máquinas em que trabalho. Isto é feito no registro do Windows (regedit.exe), na chave HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Security, onde deve ser criado um DWORD com o nome ExtensionHardening e valor 0. Se este valor DWORD não existir, o Excel assume o padrão 1, que faz a checagem e exibe o alerta. Existe ainda a opção 2, que impede a abertura do arquivo sem dar a opção de escolha ao usuário.

 

Definindo valor padrão de datas no Access com VBA
Sun, Aug 22 2010 11:35

 

Um recurso que facilita o trabalho de quem precisa digitar dados em um formulário é a definição de valor padrão (default value) para alguns campos.

Imagine, por exemplo, que você seja responsável por lançar no sistema os dados de extrato bancário, e que cada dia de extrato tenha de 15 a 20 lançamentos. Provavelmente você não vai querer digitar em cada registro a data de lançamento, mas sim digitá-la uma única vez e esperar que o sistema a assuma como padrão para as próximas linhas, até que você informe a próxima data.

No Access, o valor padrão pode ser definido por código VBA ou diretamente no modo estrutura do formulário. Neste cenário que descrevi acima, faz sentido definir o valor padrão por VBA, já que o conteúdo será dinâmico: sempre que o usuário digitar uma data de lançamento, este valor digitado tornar-se-á padrão para os próximos registros.

A primeira tentativa de um programador provavelmente será usar o evento After Update do campo DataLancamento para atribuir o valor padrão desta forma:

Private Sub DataLancamento_AfterUpdate()

On Error GoTo ErrHandler

If IsDate(Me.DataLancamento) = True Then

    Me.DataLancamento.DefaultValue = Me.DataLancamento

End If

ExitHere:

Exit Sub

ErrHandler:

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "DataLancamento_AfterUpdate"

Resume ExitHere

End Sub

 

O código vai até rodar corretamente, porém, a data do próximo registro não será a esperada. Provavelmente virá com algum dia de 1899. Motivo: a propriedade Valor Padrão deve ser passada na forma de string, e não com o tipo de dados do campo em questão.

Portanto, se o campo for do tipo data, use esta sintaxe:

Private Sub DataLancamento_AfterUpdate()

On Error GoTo ErrHandler

If IsDate(Me.DataLancamento) = True Then

    Me.DataLancamento.DefaultValue = "#" & Format(Me.DataLancamento, "yyyy-MM-dd") & "#"

End If

ExitHere:

Exit Sub

ErrHandler:

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "DataLancamento_AfterUpdate"

Resume ExitHere

End Sub

 

by Luiz | with no comments
Filed under: , ,
Documentação do Visual Basic 6 e de controles ActiveX
Thu, Jul 22 2010 4:12

Finalizando a série "sessão nostalgia" (pelo menos por enquanto), comentei no último artigo que a documentação de VB6 e controles ActiveX está sumindo.

Em 99 comprei o VB6 na caixa (que tenho até hoje), vinha com dois manuais MUITO bons e em português, um era o guia de referência, o outro era o guia de componentes, com a explicação e exemplo de todos os controles ActiveX (treeview, listview, grid, etc.). A Makron Books vendia esses livros separadamente também, mas hoje em dia não se encontra nem em sebos.

Esta mesma documentação existe (só em inglês) no site da Microsoft, o MSDN. Antes da reformulação do MSDN, que mudou o visual, era fácil achar este material apenas navegando na árvore lateral da Library. Agora, tem que procurar BASTANTE para achar.

Caso alguém precise, seguem os links. Espero que não tirem do ar!

http://msdn.microsoft.com/en-us/library/aa716285(VS.60).aspx
http://msdn.microsoft.com/en-us/library/aa338033(VS.60).aspx

Para quem tem acesso ao MSDN Subscription, a documentação final do Visual Studio 6 pode ser baixada - item MSDN Library 2001. 

by Luiz | with no comments
Filed under: , ,
Controles ActiveX no Office
Thu, Jul 22 2010 3:44

Lembro que quase 10 anos atrás, quando os programas desenvolvidos para Windows tinham mais ou menos a mesma cara, usar controles Activex sempre era um bom diferencial, tanto em termos visuais como em funcionalidades.

Estou falando aqui de controles como Treeview, Listview, Progress Bar e diversos outros que, hoje, também estão batidos. Estes controles estavam disponíveis no Visual Basic 6 e no Office XP Developer, além das versões anteriores destes pacotes.

No Office 2003 em diante, apareceram alguns problemas de compatibilidade, especialmente com o Access, mas, ainda assim, muitos desenvolvedores os usam.

Eu nunca recomende o uso de controles ActiveX no Office, pois há grande probabilidade do usuário final não ter o componente registrado em sua máquina, portanto o aplicativo não funcionará.

O que tem me impressionado é o crescente número de pessoas, em geral novos desenvolvedores começando a estudar VBA, que se encantam pelo visual e funcionalidade dos controles e querem usá-los em seus projetos. Porém, além da dificuldade de achar os controles (arquivos ocx), a documentação está "sumindo" da internet, provavelmente pela idade.

Bem, o objetivo deste artigo é compartilhar aqui um exemplo feito pela Microsoft, com Access 97, que me ajudou muito no final dos anos 90. Trata-se de um MDB (formato Access 97, mas abre normalmente em versões mais novas) com exemplo de uso de cada um dos controles.

 

 

Quem quiser este exemplo, pode baixar do site da Microsoft: http://support.microsoft.com/kb/165437

Ele contém os arquivos ocx usados no exemplo para que vocês possam instalar e estudar o exemplo, porém não inclui licença para redistribuí-los (é necessário ter o antigo Office Developer ou o Visual Basic 6).

Vejam algumas telas de Treeview com Listview e de Progressbar:

 

 

 

 

 

 

Editora Pearson - exemplo de bom atendimento
Wed, Jul 21 2010 0:58

Quem conhece meus artigos publicados anos atrás na revista Fórum Access e no meu site de Access (www.accessfaq.com.br) sabe que sempre gostei e recomendei os livros de informática da Makron Books (agora editora Pearson). É uma das poucas editoras que fogem da regra que diz que "livro de informática tem que ser básico, fino e barato" e disponibiliza, em português, vários guias de referência.

A verdade é que, infelizmente, o mercado editorial no Brasil (na área de informática, pelo menos) despencou em títulos disponíveis e em interesse. É difícil encontrar quem ainda estude por livros, o que resulta em conhecimento cada vez mais superficial dos profissionais. Isto faz com que a maioria das editoras lance em português apenas livros básicos, introdutórios. Material avançado é difícil achar.  A solução, para quem fala inglês, é recorrer à Amazon.com (www.amazon.com) e à Barnes & Noble (www.bn.com). 

Numa das frequentes encomendas que fiz, comprei um antigo clássico de VB6, o Mastering Visual Basic 6, do Evangelos Petroutsos, editora Sybex (agora Wiley). No Brasil, foi lançado como "Dominando Visual Basic 6 - A Bíblia". Trata-se de um livro com mais de 1200 páginas, fora de catálogo há alguns anos. Na verdade não é um título que eu estava precisando, mas é um livro que eu sempre quis ter na minha coleção e nunca tive a oportunidade. Por fim, consegui uma cópia usada em um vendedor parceiro da Amazon, em impecável estado de conservação.

Bem, mais ou menos impecável... Ele veio sem o CD que acompanha o livro. Para um livro deste tamanho, de coleção, e cheio de exemplos, foi uma decepção.  Por ser um clássico do VB6, imaginei que ia ser fácil conseguir o material na internet. Nada! Nenhum site, nenhum fórum, nada. Entrei em contato com a editora Wiley nos EUA, confiante de que resolveriam, mas também não quiseram mexer uma palha ("I'm sorry" foi a resposta deles).

Minha última tentativa foi a editora Pearson aqui no Brasil, que não tinha motivo algum para ajudar: livro fora de catálogo, minha versão é a americana (e usada), ou seja, nenhuma relação com a Pearson. Mesmo assim, para minha surpresa, a área de atendimento ao consumidor (por meio da Amanda Fabbro) importou-se com o meu caso e, sem qualquer custo, conseguiu e me enviou um CD da versão brasileira do livro, que é idêntico ao da versão americana. Eu já estaria 100% feliz com uma cópia do CD, mas eles foram além e me mandaram um original.

Fiquei bastante impressionado com o serviço. Já era uma editora que eu gostava bastante pelos livros, e agora também pelo atendimento.

 

Como evitar processos pendurados na automação do Excel
Sun, Apr 25 2010 20:08

 

Em linhas gerais, a automação é o mecanismo que permite um aplicativo (chamado cliente) acessar e manipular objetos e recursos de outro aplicativo (chamado servidor). Via de regra, a automação é algo tecnicamente complexo nos bastidores, pois pode envolver diversas interfaces entre cliente, servidor e sistema operacional.

O Office é um dos mais importantes (se não o mais importante) servidores de automação, pois além de oferecer recursos avançados (editor de textos, planilha eletrônica/gráficos, apresentações, etc.) que complementam vários tipos de soluções, conseguiu encapsular a complexidade da automação tornando-a bastante simples ao desenvolvedor. Se compararmos o MS-Office a outros pacotes concorrentes, a facilidade na programação agrega mais valor ainda ao MS-Office, já que praticamente todos seus recursos estão disponíveis programaticamente.

De todas as ferramentas do pacote Office, o Excel é a mais usada como servidor de automação, especialmente por ser um produto muito versátil (troca de dados, cálculos, gráficos, relatórios, etc.) e usado no mercado em praticamente todos os ramos de atividade.

 

Abrir e fechar o aplicativo servidor

Embora a automação do Office seja fácil de se implementar, o desenvolvedor necessita de uma atenção especial: ao abrir um aplicativo, deve cuidar de fechá-lo.

De certa forma, a automação funciona como se um usuário abrisse e manipulasse o aplicativo servidor. Se pegarmos o Excel como exemplo, a automação funciona de maneira semelhante a um usuário que aciona a aplicação Excel, abre uma pasta de trabalho, escolhe uma planilha, lê e preenche células. Assim, um processo do Excel é iniciado no Windows e, quando o usuário fecha o Excel, o processo é finalizado.

 

 

Nos cenários de automação, porém, é muito comum o aplicativo servidor ser executado nos bastidores, de forma invisível ao usuário que, na maioria das vezes, nem sabe que o Excel (ou seja lá qual aplicativo for) está sendo executado. Se o usuário não tem a janela do Excel ativa para poder fechar, quem deve fazer isto é a própria aplicação que o abriu, caso contrário o processo ficará pendurado no Windows. Além de consumir memória, isto pode ter um efeito mais nocivo: deixar a pasta de trabalho do usuário bloqueada de forma que ele não consiga acessá-la nem abrindo o Excel manualmente, nem por outro processo de automação.

 

 

Este erro é bastante comum nos fóruns de discussão: “[meu arquivo] está bloqueado para edição”. O usuário diz que fechou todos os programas (e de fato fechou), abriu seu arquivo do Excel e recebeu esta mensagem de erro.

Ao abrirmos o Windows Task Manager na guia processos e classificarmos por nome da imagem, encontramos repetidas vezes o “EXCEL.EXE”. Finalizamos os processos e, momentaneamente, o problema está resolvido. Mais tarde, porém, o problema volta a se repetir. Motivo: algum aplicativo que usa o Excel como servidor de automação está falhando em fechá-lo. Geralmente ocorre algum erro em tempo de execução no código depois que a aplicação foi instanciada, deixando-a pendurada.

 

Como evitar o processo pendurado

Para evitar este cenário descrito acima, recomendo uma destas duas práticas, por ordem de prioridade:

a)      Trazer a aplicação Excel para a tela do usuário: se o objetivo da rotina de automação for preparar um arquivo e exibir o resultado final ao usuário, nada mais óbvio que torná-lo visível, certo? Porém, muitas vezes o desenvolvedor não faz isto: ele abre o Excel, executa as rotinas de preenchimento, salva, fecha e, por fim, executa o comando Shell para abrir o arquivo em uma nova instância do Excel.

O que recomendo, nestes casos, é deixar visível a própria instância usada no preenchimento, e fazer isto logo no início do código. Desta forma, se ocorrer algum erro durante a execução do código, o processo não ficará perdido no Windows, pois o usuário terá domínio da janela.

 

Sub MySub1()

Dim xlApp As Excel.Application

Dim xlWkb As Excel.Workbook

 

On Error GoTo ErrHandler

 

'Instancia o Excel

Set xlApp = New Excel.Application

 

'Deixa o Excel visível para o usuário

xlApp.Visible = True

 

'Seu código aqui...

 

ExitHere:

Exit Sub

 

ErrHandler:

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "MySub"

Resume ExitHere

End Sub

 

 

b)      Controlar se a aplicação está instanciada e fazer a finalização no tratamento de erro: é comum alguns desenvolvedores colocarem um comando para finalizar (Quit) o Excel no tratamento de erro. Porém, se o erro ocorrer por outro motivo que não a automação e o Excel não tiver instanciado no momento, este tratamento vai gerar outro erro (“Object variable or With block variable not set”):

 

 

 

Para que não ocorra este erro, o mais correto é, antes de fazer o Quit, verificar se o Excel foi instanciado:

 

Sub MySub2()

Dim xlApp As Excel.Application

Dim xlWkb As Excel.Workbook

Dim blnIsOpen As Boolean

 

On Error GoTo ErrHandler

 

'Instancia o Excel

Set xlApp = New Excel.Application

blnIsOpen = True

 

'Seu código aqui...

 

 

'Finaliza a aplicação

xlApp.Quit

blnIsOpen = False

 

ExitHere:

Exit Sub

 

ErrHandler:

 

'Verifica se o Excel está instanciado

If blnIsOpen = True Then

    xlApp.Quit

End If

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "MySub"

Resume ExitHere

End Sub

 

 

Conclusão

Estas duas técnicas são bastante simples, mas ajudam a evitar problemas muito comuns e recorrentes quando fazemos automação de aplicativos, especialmente do Excel. Podem ser usadas a partir de qualquer linguagem, seja VBA (como nos exemplos acima), seja VB6, VB.Net, C# ou outra linguagem.

 

Recursos do Access removidos na versão 2010
Wed, Apr 21 2010 15:39

Sempre quando sai uma versão atualizada de algum produto, vemos muitos artigos sobre as novas funcionalidades, mas quase sempre passa despercebido algo igualmente importante: os recursos que ficaram para trás.

Este artigo tem por objetivo justamente isto: listar os recursos do Access que não estarão mais disponíveis na versão 2010. Mesmo que você hoje desenvolva com versões anteriores do Access e não esteja planejando migrar tão cedo para o 2010, vale a pena ter conhecimento dos recursos com os quais não poderá contar no futuro e assim planejar melhor a arquitetura dos novos aplicativos que venha a construir.

 

 

Formato Snapshot

O formato Snapshot (*.snp) é bastante usado por desenvolvedores, especialmente em aplicações corporativas, para salvar relatórios. O visualizador deste formato é o Snapshot Viewer, que vinha na instalação do Office e também fica disponível para download gratuito no site da Microsoft (http://support.microsoft.com/kb/175274/pt-br).

Era (na verdade, ainda é) um bom utilitário, com ótima visualização e navegação de páginas. Porém, a partir do Access 2007 SP2, o Snapshot passou a “concorrer” com o formato PDF, que é muito mais difundido e utilizado, então o Snapshot perdeu um pouco o sentido.

 

 

 

Controle calendário (Calendar control – mscal.ocx)

O controle calendário foi o ActiveX mais usado com o Access durante um bom tempo, mais até que o Treeview control. Não que fosse uma grande maravilha – pois não é -, mas o fato de estar ali disponível pela própria instalação do Access levou muitos desenvolvedores a utilizá-lo em suas aplicações.

O visual do controle é ok, além de ser fácil de programar e utilizar, porém muita gente – sem saber - acabava tendo problema na distribuição, pois é um controle ActiveX, não é nativo do Access, além de ter diferentes versões de acordo com o idioma do Access.

 

Particularmente, não deixa saudades. O Access 2007 já traz o date-time picker (que é uma espécie de combobox em que o drop-down é um calendário suspenso) nativo, e mesmo para quem desenvolve para versões anteriores, há boas alternativas de calendários desenvolvidos dentro do próprio Access, com formulários e controles nativos, mais funcionais e sem nenhum problema de distribuição. Aqui há alguns links: http://www.accessmvp.com/JConrad/accessjunkie/calendars.html

 

 

Página de acesso a dados (Data Access Pages - DAPs)

Outro recurso que não deve fazer falta (não por ser ruim, mas por ser pouco usado) são as páginas de acesso a dados (DAPs). Esta foi a primeira tentativa de levar front-ends do Access para a web, porém não foi bem sucedida. Disponível a partir do Access 2000, a tecnologia era baseada em ASP, ADO e DHTML. O desenvolvedor, por meio de um simples assistente, gerava um formulário (semelhante a um formulário Access), que na verdade era uma página ASP que acessava o banco de dados (DHTML fazendo data binding com ADO).

Considerando que a primeira bolha da internet estava sendo inflada naquela época, todas as empresas demandavam sites dinâmicos (com acesso a dados) e os desenvolvedores focavam na web, era de se esperar que as DAPs fizessem mais sucesso, afinal representavam uma forma fácil e rápida de colocar uma página no ar. Porém, ficou só na expectativa mesmo, não sei ao certo por quê. Provavelmente por uma combinação de fatores: o visual das DAPs era de formulários enlatados; a customização era difícil; as DAPs tinham o estigma de “sites de mentira”; o desenvolvedor acabaria tendo que escrever muito código ASP para atender os requisitos do cliente, então as DAPs representavam pouco ganho de produtividade dentro do escopo todo do projeto.

 

 

 Provavelmente muitos vão dizer que o desenvolvimento para Access Services – os bancos de dados web (ou web databases) do Access 2010 – é o substituto das DAPs. Embora os web databases, mesmo em sua versão inicial, sejam muito melhores e mais completos do que as DAPs jamais foram, não podem ser considerados substitutos. Os web databases são publicados apenas em sites SharePoint 2010 com Access Services (portanto, na versão paga do SharePoint), enquanto as DAPs podiam ser jogadas em qualquer servidor com IIS.

O Access 2010 ainda consegue armazenar as DAPs no arquivo e convertê-las para versões anteriores do Access, porém não permite editar nem executar. O Access 2007 também não permitia editar a estrutura, mas executar era possível.

 

 

Visualizador de conflitos de replicação

Como desde a versão 2007 o suporte a replicação de dados foi deixado de lado, nada mais natural que parar de suportar o visualizador de conflitos. Embora eu poucas vezes tenha usado os mecanismos de replicação nativos do Access, gostava muito deles. Era um recurso muito profissional disponível num banco de dados considerado de amadores (assim como a segurança em nível de usuário, que também foi descontinuada). Como eu tinha 0,5% de esperança de ver estes recursos de volta no Access, fiquei triste por ter agora 0,0%.

Quanto ao visualizador de conflitos em si, é possível criar uma versão customizada, já que tudo é baseado em objetos programáveis. Anos atrás escrevi sobre isto na revista FórumAccess, quem tiver interesse pode dar uma olhada nas edições 63 e 64, ou aqui tem o eletrônico do primeiro deles: http://linhadecodigo.com.br/Artigo.aspx?id=1220

 

 

 

Conexão com Paradox (3 a 7), Lotus 1-2-3 e Access 1.0 e 2.0

Dos recursos que estão ficando para trás, este item é o que mais me preocupa. Não que seja comum encontrar aplicativos que precisem permanentemente destes conectores específicos, mas sempre foi da essência do Access a facilidade de conexão com diversos bancos de dados. Isto tem se perdido ao longo das versões. Se compararmos o Access 97 com o 2010, por exemplo, veremos que o 97 se conectava com qualquer coisa, e o 2010 apenas com alguns gatos pingados. Seguindo este caminho, daqui poucos anos o Access só falará com Access, SQL Server e SharePoint.

O que perdemos com isto? Estes são os principais pontos:

a)      O Access é a melhor ferramenta de migração de dados que conheço. Posso (ou podia) vincular qualquer origem, qualquer destino e rodar consultas de acréscimo para carregar dados, consultas de atualização para manutenção de dados e consultas de exclusão para limpar bases. E é comum os desenvolvedores precisarem fazer manutenções ou migrações em bases antigas.

b)      Quando precisamos criar um sistema que consome dados de uma base antiga, ou nem tão antiga, se o Access não tem os conectores, ficamos praticamente sem alternativa de como atender o requisito. Recentemente, por exemplo, precisei criar um sistema que consumia dados de planilhas Lotus 1-2-3 enviadas diariamente, e com o Access e o Excel não é mais possível. Quem vai acabar ocupando este espaço é o OpenOffice.

 

 

Conclusão

Tão importante quanto conhecer os novos recursos do Access 2010 (para explorá-los melhor) é saber o que está parando de funcionar, e assim avaliar e criar alternativas. Muitas vezes surgem oportunidades de mercado em cima de recursos removidos.

by Luiz | 1 comment(s)
Filed under: ,
Word - como mudar o idioma dos estilos
Mon, Mar 1 2010 18:07

Hoje eu tinha em mãos dois templates do Word, sendo um para documentos em português e outro em inglês. Além de importar os estilos de um documento para o outro, era preciso também alterar o idioma para que ficassem de acordo com a versão do template (português ou inglês).

Este tipo de alteração em cascata mostra o quanto é importante encadear os estilos na hora de sua criação. O campo "estilo baseado em" faz este papel importante: ao alterar um estilo base (mudar tipo de fonte, idioma, etc.), todos os seus derivados são automaticamente atualizados. Assim, se todos os estilos estivessem devidamente encadeados, bastaria alterar o idioma do estilo Normal para atualizar os demais. Não era o caso.

Para resolver, rodei este pequeno trecho de código:

 

Sub MudarIdiomaEstilos()
Dim s As Style
For Each s In ThisDocument.Styles
    If s.Type = wdStyleTypeParagraph Or s.Type = wdStyleTypeCharacter Or _
    s.Type = wdStyleTypeLinked Or s.Type = wdStyleTypeParagraphOnly Then
        s.LanguageID = wdPortugueseBrazil
    End If
Next s
End Sub

 

Veja que a constante LanguageID nada mais é que o código do idioma (wdPortugueseID=1046, wdEnglishUS=1033, etc.).

 

Distribuindo soluções VSTO para Office 2007 - Pré-requisitos
Mon, Mar 1 2010 14:06

Desenvolver soluções Office usando o Visual Studio é uma boa evolução para quem tem anos de prática de VBA. O ambiente é mais amigável, mais produtivo (quando bem utilizado) e tem mais recursos que o velho e bom VBA. Tudo uma maravilha, até o momento de distribuir a solução. Nesta hora, sempre penso a mesma coisa: "por que não fiz em VBA?"

Instalar add-ins VSTO do Office em ambientes corporativos é algo realmente penoso. Toda a produtividade ganha na fase de desenvolvimento pode ser perdida quando se faz (ou tenta se fazer) o deployment.

Para começar, é difícil encontrar uma empresa que tenha todos os requisitos atualizados:

- .NET Framework 3.5 com SP1

- VSTO Runtime 3.0 com SP1

- Office 2007 com SP2 (este requisito não é devidamente documentado, mas importante em vários tipos de solução, especialmente se manipular Charts do Office)

 

Em ambientes corporativos, o acesso à Internet não é livre, muito menos a permissão para baixar pacotes como estes que mencionei acima. Para piorar, os links para download da Microsoft costumam trazer a versão bootstrapper, ou seja, um instalador que começa o trabalho mas faz downloads adicionais, o que não resolve o problema. Portanto, se você está montando uma pasta de instaladores de pré-requisitos (PreRecs), precisa procurar pela versão redistributable dos componentes, o que nem sempre é fácil achar.

Segue aqui uma lista de endereços:

- .NET Framework 3.5 com SP1 (este eu demorei a achar!):

 http://msdn.microsoft.com/en-us/netframework/aa569263.aspx

http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe

- VSTO Runtime 3.0:

http://www.microsoft.com/downloads/details.aspx?FamilyId=54EB3A5A-0E52-40F9-A2D1-EECD7A092DCB&displaylang=en

- VSTO Runtime SP1:

http://www.microsoft.com/downloads/details.aspx?familyid=D8EB4921-891A-4B5E-973F-0B96E6CCF376&displaylang=en

- VSTO Runtime Language Pack (para Windows em português):

http://www.microsoft.com/downloads/details.aspx?FamilyId=1DCA6E2D-5C1F-4DF8-BE5A-3D1561B8F0E3&displaylang=pt-br

- Office 2007 SP2 em português

http://www.microsoft.com/downloads/details.aspx?FamilyId=B444BF18-79EA-46C6-8A81-9DB49B4AB6E5&displaylang=pt-BR

- Office 2007 SP2 em inglês

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=b444bf18-79ea-46c6-8a81-9db49b4ab6e5

Erro "Fractional Truncation" no SQL Server com Access VBA - ADO
Sat, Dec 5 2009 0:45

Se você está usando uma simples rotina ADO (a partir do Access ou do Excel, por exemplo) para gravar um registro no SQL Server e está recebendo uma mensagem de erro “Fractional Truncation”, é possível que seja por causa de um campo DateTime.

Embora o código esteja correto, pode ser que o SQL Server não entenda isto se o cursor estiver do lado servidor:

rst.DataVcto = CDate(Me.DataVencimento)

A solução é formatar a data para string no formato usado pelo SQL Server:

rst.DataVcto = Format(Me.DataVencimento, “yyyy-MM-dd”)

Se o cursor estiver do lado cliente (rst.CursorLocation = adUseClient), não é necessário formatar a data, o código original deverá funcionar.

by Luiz | with no comments
Office e a Reforma Ortográfica
Sat, Nov 28 2009 20:31

Finalmente, depois de um longo atraso, a Microsoft lançou o pacote de atualização do Office 2007, que incorpora na ferramenta as novas regras de ortografia da língua portuguesa trazidas pela Reforma Ortográfica, aprovada há um ano.

É necessário ter o Office 2007 com Service Pack 2 instalado para baixar a nova atualização (para saber se você tem o SP2 instalado, a janela "About" agora está no botão Office > Word Options > Resources > About).

O link da atualização da correção ortográfica é este: http://www.microsoft.com/downloads/details.aspx?FamilyId=DF0AF8D5-A8DA-4938-8A44-E8BE7C8EEAEF&displaylang=pt-br

Se o seu Office é em inglês (como o meu) e você tem instalado o Language Pack para Português-Brasil, é necessário também instalar o Service Pack 2 do language pack, que pode ser encontrado aqui: http://www.microsoft.com/downloads/details.aspx?displaylang=pt-br&FamilyID=e1203db2-1cc9-4809-9b6e-3f232cb8899f

Informações sobre o que está sendo atualizado: http://office.microsoft.com/pt-br/help/HA103876701046.aspx

 

Agora, algumas considerações minhas:

1) Essa atualização demorou demais a sair, mas não considero culpa da Microsoft. A própria Academia Brasileira de Letras levou meses para soltar a publicação oficial do novo vocabulário. Nem mesmo os dicionários oficiais (Aurélio, Houaiss e outros) até agora lançaram as novas publicações, e eles vivem disto, tinham obrigação de ter se antecipado em parte. A Microsoft foi mais rápida que eles.

2) Quem diz que o Br-Office (versão brasileira do OpenOffice) já tem as novas regras desde o começo do ano, ou está brincando, ou não é rigoroso no uso correto do nosso idioma. Há inúmeros erros na aplicação na nova gramática, e até da velha. Para se ter uma ideia, na abertura do programa aparece escrito (bem grande): "BEMVINDO", sem hífen e com "M". Bem, acho que aos 6 anos de idade eu aprendi que M só vem antes de P e B, e esta regra obviamente não mudou.

3) E o Office 2003? Cadê a atualização do Office 2003? Resposta: não tem e não terá. Esta é uma decisão com a qual não concordo, sob nenhum aspecto: técnico, jurídico, comercial, do bom senso, etc.

A justificativa para tal decisão é o fato do Office 2003 não estar mais em período de manutenção. Porém, ele estava SIM em período de manutenção quando a lei do acordo ortográfico entrou em vigor, e assim permaneceu por  vários meses depois disto. O fato de terem levado quase um ano para lançar o pacote de correção não pode ser considerada uma justificativa válida para não aplicar ao Office 2003, mesmo sendo verdade o que escrevi na consideração 1. Na minha visão, foi uma decisão infeliz, incompatível com os valores da empresa.

 

 

by Luiz | with no comments
Windows Media Player no Windows 7 N
Sat, Nov 21 2009 20:43

Após tentar inúmeras vezes instalar o Windows 7 Ultimate no meu notebook, sem sucesso (mensagens de erro na etapa de descompactação dos arquivos), testei, por falta de alternativas, instalar o Windows 7 Ultimate N, que... funcionou!

Que diabos é o Windows 7 "N"? Trata-se de uma versão disponível na Europa onde, em razão de ação judicial, a Microsoft precisa disponibilizar uma versão do Windows sem o Media Player. Veja bem: não é que o Media Player é proibido na Europa, mas sim que deve haver duas versões do Windows: uma com e uma sem o Media Player (a versão "N"). Como o preço é o mesmo, acredito que absolutamente ninguém adquira a tal versão "N", e que a minha seja a única no mundo...

Após fazer a instalação, em um novo HD recém-formatado, o computador não tinha nenhum programa de áudio. Verifiquei as pastas do Program Files e a lista do Windows Update, mas em nenhum dos dois constava o Media Player.

A solução, então, foi baixar o Media Player 12. Mas onde? Na página do Media Player no site da Microsoft, apenas as versões anteriores estão disponíveis (pelo menos até hoje, 21/11/2009). Eu até achei em sites alternativos, mas eu não confio neles. Bem, depois de muito tempo procurando, finalmente achei este link:

http://www.microsoft.com/downloads/details.aspx?FamilyID=31017ed3-166a-4c75-b90c-a6cef9b414c4&displaylang=en

Fiz o download e estou usando agora o bonito Windows Media Player 12. 

Se por algum motivo, ou por acidente, você instalou o Windows 7 N, fica aí o link para colocar o Windows Media Player 12.

Coleções de ícones
Fri, Nov 20 2009 22:38

Depois de alguns anos usando uma antiga coleção de ícones que eu tinha, concluí que o visual estava ultrapassado (ou então eu já estava cansado dele). Resolvi, então, ir atrás de novos ícones.

O primeiro lugar a que recorri, obviamente, foi o Google. Estava atrás de coleções gratuitas. Para a minha surpresa, não foi tão fácil achar algo bom. Eu até achei ícones muito bonitos, mas era um aqui e outro ali, sem identidade visual entre si. Como é importante os ícones de uma aplicação terem consistência, continuei procurando coleções.

Dentre as pagas, gostei destas três:

VirtualLNK: http://www.virtuallnk.com/
IconShock: http://www.iconshock.com/
IconExperience: http://www.iconexperience.com/

Optei pela Iconshock, em razão da quantidade. Embora custasse mais que a IconExperience, a quantidade de ícones era infinitamente maior (na prática não se mostrou tão maior assim, já que as imagens são um tanto repetitivas).

Embora tenha pago caro para resolver a necessidade, a compra não me atendeu por completo: os ícones pequenos (16x16) têm definição muito ruim. Como todas as coleções adotaram o estilo "Vista" de transparência, só os ícones grandes (32x32 ou mais) ficam realmente bons. Os de 24x24 até podem ser entendidos, com boa vontade, mas os de 16x16 não.

Este ano recebi por cortesia da Infragistics (um dos principais fabricantes de componentes para desenvolvimento .NET) seu novo produto: NetAdvantage Icons. Embora a Infragistics não tenha tradição em ícones, o produto deles é melhor que a maioria das tradicionais coleções existentes por aí. E, para completar, os ícones de 16x16 têm boa definição!

http://www.infragistics.com/dotnet/netadvantage/icons.aspx#Overview

Fica aí a sugestão para quem estiver procurando ícones (para comprar).  

by Luiz | with no comments
Filed under: ,
Referências de desenvolvimento do Office 2010
Sun, Nov 15 2009 21:32

As referências de desenvolvimento do Office 2010 podem ser encontradas aqui:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=2baf54a3-bbde-4cb8-b0e6-19005939db6a

by Luiz | with no comments
Um recurso prático no BrOffice - Writer
Thu, Aug 20 2009 19:33

Tenho de vez em quando mexido um pouco no BrOffice para conhecê-lo mais a fundo, na prática.

Hoje eu vi no Writer um recurso muito prático e simples, que não tem no MS-Word e faz muita falta: chama-se "Inserir entrada sem numeração".

Imagine que você tenha uma lista numerada (com um nível ou mais) e, em algum item da lista, por exemplo, no item "2.b", você queira incluir um segundo parágrafo de texto. No MS-Word, o novo parágrafo vai automaticamente ser numerado com "2.c", e se você mandar remover o número, ele vai "entender" que você saiu da lista e bagunçar tanto o recuo como o espaçamento entre parágrafos.

No BrOffice, existe o botão "Inserir entrada sem numeração" na barra de "Marcadores e numeração", que insere um parágrafo não numerado no mesmo item em que você se encontra.

Para quem costuma escrever tutoriais "passo a passo" numerados, como eu, é uma ajuda e tanto.

Access - Numeração com ano
Tue, Aug 4 2009 23:43

Uma dúvida que aparece com certa frequência nos fóruns é sobre a criação de numeradores compostos com ano:

1/2008, 2/2008, 3/2008, 4/2008 ... 100/2008, 101/2008
1/2009, 2/2009, 3/2009, 4/2009 ... 100/2009, 101/2009
etc.

A melhor solução, a meu ver, é ter dois campos na tabela: um só com o numerador (1, 2, 3, etc.) e outro só com o ano. A concatenação do numerador com o ano deve ser feita só em consultas e relatórios.

Tenho um exemplo que escrevi muito tempo atrás, em 2001, que não usa exatamente a prática que considero a mais adequada, porém também funciona. No exemplo, há um único campo texto que armazena o número já concatenado na tabela.

O exemplo está anexo a este artigo, para quem quiser baixar. Basta usar a função NextNumAno(), alterando o nome da tabela e do campo na instrução SELECT para coincidir com o seu banco de dados.

O mesmo módulo tem a função NextNumSimples(), que também pode ser usada caso você queira partir para a melhor solução que descrevi acima (onde o numerador fica num campo separado).

Em uma outra oportunidade eu re-escreverei este exemplo da forma que considero mais adequada hoje, oito anos depois. 

Erro no acesso a base Access pelo VB2008
Sun, Jul 26 2009 0:13

Ao testar um simples código de acesso a um arquivo MDB pelo VB2008, recebi a seguinte mensagem de erro:

---------------------------

---------------------------
The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
---------------------------
OK  
---------------------------

Como tenho o MS-Access instalado e funcionando normalmente na máquina, tenho certeza de que o Jet está registrado.

O problema está ligado à versão 64bit do Windows, e a solução é exatamente a mesma que eu descrevi semanas atrás para o componente Shockwave Flash: abrir as Propriedades > Compile > Advanced Compile Options > Target CPU e escolher x86.

Controles ActiveX param de funcionar após atualização do Windows KB960715
Fri, Jul 24 2009 16:16

A atualização do Windows disponível no KB960715, chamada "Update Rollup for ActiveX Kill Bits", a qual visa resolver questões de segurança no Internet Explorer, tem como consequência a quebra de controles ActiveX usados há anos pelo VB6, como Flexgrid, Hierarchical Flexgrid, Datagrid, Chart control, Masked Edit, Winsock e Animation.

Para resolver, é preciso distribuir a nova versão dos controles, que pode ser obtida com a instalação do "VB6 SP6 Cumulative Update": http://www.microsoft.com/downloads/details.aspx?FamilyId=CB824E35-0403-45C4-9E41-459F0EB89E36&displaylang=en&displaylang=en

Esta instalação requer o Visual Basic 6 com o Service Pack 6 (http://www.microsoft.com/downloads/details.aspx?FamilyID=9ef9bf70-dfe1-42a1-a4c8-39718c7e381d&displaylang=en).

Quem não tiver o Visual Basic 6 não conseguirá baixar os controles. A princípio, parece um requisito normal, já que a distribuição destes ActiveX requer uma licença do Visual Basic. Porém, existe um outro produto da Microsoft (e dos caros!) que licencia a distribuição dos ActiveX: o Office Developer Edition. Quem tem apenas o Office Developer Edition (e não o VB6) ficou na mão, pois não tem como baixar as atualizações. 

 

Mais informações aqui:

http://blogs.msdn.com/askie/archive/2009/02/20/certain-vb-controls-no-longer-display-on-web-pages-after-installing-kb960715.aspx

 

SQL Server - Erro ao atachar database - 5120 - Windows Vista
Fri, Jul 24 2009 1:22

Ao fazer uma simples operação de atachar um database no SQL Server, é possível que você receba uma mensagem de erro como esta:

 

TITLE: Microsoft SQL Server Management Studio
------------------------------

An error occurred when attaching the database(s).  Click the hyperlink in the Message column for details.

------------------------------
BUTTONS:

OK
------------------------------

E a explicação no hyperlink é esta:

TITLE: Microsoft SQL Server Management Studio
------------------------------

Attach database failed for Server 'TOSHIBA-LUIZ\SQLEXPRESS2005'.  (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.0.2531.0+((Katmai_PCU_Main).090329-1045+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Attach+database+Server&LinkId=20476

------------------------------
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

Não é possível abrir o arquivo físico "C:\Projetos\Data\GMedico.mdf". Erro do sistema operacional 5: "5(error not found)". (Microsoft SQL Server, Error: 5120)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.4035&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------

Nas primeiras vezes que tive este erro, a única solução que encontrei foi atachar o database em outro servidor, fazer Backup e depois restaurar no meu servidor. Depois descobri que se tratava de um simples problema de permissão: bastou abrir o Management Studio com permissões de administrador que eu consegui atachar normalmente. 

by Luiz | with no comments
Filed under: , , , ,
More Posts Next page »