Notifications
Clear all

"Conexão" Indesejada é criada ao manipular conexões via VBA

4 Posts
2 Usuários
0 Reactions
1,211 Visualizações
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Basicamente o problema é este:

Eu tenho um código que manipula as conexões de minha pasta excel.
Atualmente a versão dele se resume a modificar o "Texto de Comando" nas propriedades da minha conexão e percorrer todas as conexões cópia fazendo a mesma modificação.
Ex.:
Arquivo possui conexão: "MyConnection"
Ao criar uma tabela dinâmica baseada na conexão existente "MyConnection" o excel cria a excel "MyConnection1" (Novas instâncias criariam "MyConnection2", "MyConnection3", ... , "MyConnectionN".

Meu código vai percorrer todas elas e realizar as modificações desejadas no código de consulta SQL presente na propriedade "Texto de Comando" normalmente.

Maravilha, até ai funciona perfeito!

Mas então surge o problema:
Quando eu tento rodar o código após criar uma tabela dinâmica e manipula-la de alguma forma (Ex.: Marcar os campos que serão mostrados.) o Excel cria uma conexão chamada "Conexão" a partir da conexão da tabela dinâmica e vincula a tabela a esta nova conexão indesejada.

A consequência é que eu não posso mais manipular as propriedades da conexão de minha tabela dinâmica pelo meu código.

Só para esclarecer: Meu código não a esta criando por acidente - a palavra "Conexão" nem consta nas linhas de código e este é o nome que o Excel da a esta nova conexão auto-gerada todas as vezes.

Tudo que eu quero é garantir que o excel pare de criar isto. Eu não estou passando esta ordem e esta atividade esta atrapalhando o andamento de meu programa.

De antemão: obrigado pelo seu tempo e atenção.

 
Postado : 12/12/2012 8:26 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Para que o pessoal possa ajuda-lo, seria melhor postar seu arquivo modelo compactado

Att

 
Postado : 12/12/2012 8:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ruk, veja se o Tópico abaixo tem alguma relação com o seu problema.

Limpar nomes de Céluas/Intervalos [Resolvido]
viewtopic.php?f=10&t=6419

[]s

 
Postado : 12/12/2012 9:55 am
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 
Sub ConsultaSQL_MudaParametros()
' Muda os parametros mes e ano de uma consulta sql. Consta de inputbox para entrada de dados do usuario e msgbox de aviso para maior clareza
Dim InputMes As Integer
Dim InputAno As Integer
Dim ConectionIndex As Integer
Dim ConectionName As String
    Do
        InputMes = Application.InputBox(prompt:="Inserir o mês que desejas acessar númericamente (1-12).", Title:="Parametros da Pesquisa", Type:=1)
        If InputMes = False Then Exit Sub
        If InputMes >= 1 And InputMes <= 12 Then Exit Do
        MsgBox prompt:="Mês inválido", Title:="Aviso:"
    Loop
    InputAno = Application.InputBox(prompt:="Inserir o mês que desejas acessar númericamente (1-12).", Title:="Parametros da Pesquisa", Type:=1)
    If InputAno = False Then Exit Sub
    Application.ScreenUpdating = False
    If InputMes >= 1 And InputMes <= 12 Then '(A)
        Do Until ConectionIndex = ThisWorkbook.Connections.Count
            If ConectionIndex = 0 Then '(B)
                ConectionName = "ConsultaSQL"
            Else
                ConectionName = "ConsultaSQL" & ConectionIndex
            End If '(B)
            ThisWorkbook.Connections(ConectionName).ODBCConnection.CommandText = Array( “A string a ser inserida no ‘Texto de Comando’” –InputMes e InputAno" são usados para compor esta string)

            ConectionIndex = ConectionIndex + 1
            ThisWorkbook.Connections(ConectionName).Refresh
        Loop
    Application.ScreenUpdating = True
    MsgBox prompt:="Você esta acessando a consulta ao Banco de Dados referente a " & MonthName(InputMes) & " de " & InputAno & "." & Chr(13) & "Esta mudança se aplica a todas as planilhas neste documento.”, Title:="Aviso"
    End If '(A)
End Sub

Este é o código completo. :p
O que é escrito no texto de comando eu preferi substituir por uma descrição - era muito extenso e confuso, não adicionava nada para a solução do problema. Não temam pois esta parte esta correta e testada. :)

O problema é que quando eu rodo esta macro para atualizar as conexões ConsultaSQL e as geradas a partir dela quando crio tabelas dinâmicas a partir da conexão existente (ConsultaSQL1, ConsultaSQL2, ..., ConsultaSQL(N-1), ConsultaSQL(N)) uma conexão chamada "Conexão" simplesmente surge dentre as conexões ativas da planilha. Além de tudo isto a tabela dinâmica é associada a "Conexão" e não mais a "ConsultaSQL(X) da qual foi gerada, fazendo com que eu não mais consiga atualizar os parâmetros da consulta através da minha macro.

Nota: "Conexão" é gerada quando tento rodar a macro e já existe uma tabela dinâmica criada que tenha sido manipulada de qualquer forma (até a simples seleção de campos a serem exibidos).
Nota2: "Conexão" encontra-se entre aspas para destaque, o nome dado a esta conexão problemática que o excel cria sozinho não possui aspas.
Nota3: a palavra 'conexão' não esta escrita em nenhum lugar da minha macro. Esta é uma evidencia de que sua criação não pode nem ao menos ser acidental. O excel é responsável.

 
Postado : 14/12/2012 9:11 am