quarta-feira, 6 de julho de 2016

Unspecified error ADODB.Connection

Olá pessoal,

Me deparei com um problema chato de incompatibilidade entre arquiterura X86 e X64 na execução de uma conexão ADODB, o problema era intermitente e acontecia especificamente ao executar a abertura da conexão com à base de dados.

O código do erro exato não me lembro mas era Unspecified Error ou Erro Inesperado a mensagem que me consumiu muitas horas de trabalho e de pesquisa sem encontrar nenhuma solução que resolvesse o problema.

Conversando com o Douglas Cavalcante colega de trabalho ele perguntou para mim se eu havia criado essa base da conexão na máquina X86 ou X64 respondi que na primeira opção e ele me sugeriu que criasse o arquivo na máquina com arquitetura X64, e BINGO problema resolvido.

Então se você esta enfrentando o mesmo problema a resolução é bem simples, abra o MS-Access na máquina X64 e crie uma nova base do Access, importe todos os objetos da versão anterior para essa nova base e a use que o problema estará resolvido.


quinta-feira, 30 de abril de 2015

Criando uma Ribbon no Office

Uma tarefa comum aos projetos desenvolvidos a partir do office 2007 é a criação de barra de tarefas para execução das rotinas da ferramenta criada chamada de Ribbon.

Porém a MS não disponibilizou uma ferramenta prática e intuitiva para a criação desse tipo de componente, Algum tempo atrás encontrei uma planilha na NET que continha os ids das imagens disponíveis para uso no Office, porém tal planilha apresentava um resultado que nem ao menos podia ser copiado o que continuava a deixar o processo de criação de ribbons lento.

Para meu uso desenvolvi um complemento a essa planilha que disponibilizo para todos aqui.

O funcionamento é bem simples basta abrir o arquivo e ir a guia desenvolvedor, nela irá aparece um novo grupo chamado Office Icons com todas as imagens disponíveis.

Para utilizar as funcionalidades criadas por mim selecione qualquer imagem, e clique em Usar no formulário apresentado.


Preencha as informações de
  • Nome Botão - ID único com a identificação do botão.
  • Executar - Nome da Sub criada no VBA
  • Label - A descrição que será apresentada ao usuário
  • Tamanho Pequeno ou grande - Define o tamanho do ícone que será criado.
Após as definições clique em Gerar XML e o contéudo do XML será exibido e copiado automaticamente para o seu Clipboard, bastando abrir o Office UI Editor e colá-lo.

Para que sua rotina VBA seja executada ela deve receber um parâmetro do tipo IRibbonControl conforme o exemplo a seguir.


Sub MySubTest(ctl As IRibbonControl)
    Msgbox "My ribbon work",vbinformation
End Sub
O arquivo com essa implementação pode ser baixado aqui



,


terça-feira, 7 de abril de 2015

Filtrando Tabelas Dinâmicas automaticamente

Uma necessidade comum na utilização de Pivot Tables é que duas ou mais Pivots sejam filtradas com o mesmo critério, para isso desenvolvi o seguinte código:

Sub FilterPivots()
'Developed by Bruno Leite 
'officevb.com    

Dim pvt As PivotTable, pvt1 As PivotTable

Application.EnableCancelKey = xlDisabled
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim pi As PivotItem, pi1 As PivotItem
Dim pf As PivotField

'Set to the name of your PivotTable
Set pvt = FullYear.PivotTables("FY")
Set pvt1 = FullYear.PivotTables("FY1")

Application.EnableEvents = False

For Each pf In pvt.PivotFields

    Select Case pf.Orientation
    'Campos de linha 
        Case xlRowField
        For Each pi In pf.PivotItems
                pvt1.PivotFields(pf.Name).PivotItems(pi.Name).visible = pi.visible
        Next pi

    'Campos de Pagina
        Case xlPageField
        
            If pf.EnableMultiplePageItems Then
                pvt1.PivotFields(pf.Name).ClearAllFilters
                pvt1.PivotFields(pf.Name).EnableMultiplePageItems = pf.EnableMultiplePageItems

                For Each pi1 In pf.PivotItems
                    pvt1.PivotFields(pf.Name).PivotItems(pi1.Name).visible = pi1.visible
                Next pi1
            Else
                strFilter = pf.CurrentPage
                pvt1.PivotFields(pf.Name).ClearAllFilters
                pvt1.PivotFields(pf.Name).CurrentPage = strFilter
            End If

        End Select

Next pf

Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
Para utilizá-lo coloque no evento change da primeira Pivot da seguinte maneira.
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    FilterPivots
End Sub

Related Posts Plugin for WordPress, Blogger...