Notifications
Clear all

Inserir Variavel informada por usuario no "Texto do Comando"

31 Posts
3 Usuários
0 Reactions
9,572 Visualizações
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Estou tentando desenvolver uma solução para uma planilha Excel que vai acessar um banco de dados, mas não sei como começar.

Eu já tenho a planilha praticamente pronta. Ela já acessa o banco de dados e já apresenta na planilha.

O que eu quero fazer é:

No texto de comando existem duas constantes que dizem o mês e o ano que serão acessados no banco de dados para buscar as informações. (Ex.: 8 e 2008)

Eu preciso transformar estas constante em variáveis que o usuário informa...
Poderia ser através do valor de célula da planilha excel:
Ex.: acessa o mês na célula A1 e o ano na célula A2.
Ou poderia ser através de uma UserForm (que eu ainda não sei direito como fazer então não é minha preferencia nem tenho como dar exemplo)

Desde já obrigado pelo seu tempo e atenção.

 
Postado : 08/11/2012 8:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Só para conhecer, veja no anexo,
Porque não fazer direto a conexão em vb?

 
Postado : 09/11/2012 3:47 pm
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

por que eu não sei como! :?

eu tenho ela funcionando pelo "texto de comando".... mas não sei como fazer para as contantes "mês" e "ano" virarem variáveis informadas pelo usuário. Disto que nasceu o problema, este era o caminho que já tinha mais coisa feita, o caminho vba vou ter que começar do zero. E por zero eu quero dizer começar a pesquisar como fazer a conexão direto no vb para depois fazer!

mas parece que só me resta aprender, né? :lol:

ps.: eu tinha até rastreado um arquivo deste aqui na maquina.

 
Postado : 09/11/2012 4:08 pm
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Tem referencias que você possa me enviar para eu aprender como enfrentar este desafio? :mrgreen:

 
Postado : 12/11/2012 7:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aqui no site há varios exemplos de conexão excel x access, que pode lhe auxiliar:
viewtopic.php?f=25&t=6234&hilit=+access
viewtopic.php?f=10&t=6140&p=32100#p32100
http://www.tomasvasquez.com.br/forum/vi ... KDxbmdVVHs
No site Marcoratti tem um tutorial
http://www.macoratti.net/ado_vbas.htm

 
Postado : 12/11/2012 7:55 am
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Aqui no site há varios exemplos de conexão excel x access, que pode lhe auxiliar:
viewtopic.php?f=25&t=6234&hilit=+access
viewtopic.php?f=10&t=6140&p=32100#p32100
http://www.tomasvasquez.com.br/forum/vi ... KDxbmdVVHs
No site Marcoratti tem um tutorial
http://www.macoratti.net/ado_vbas.htm

Opa, valeu!! :D
Vou fuçar todos eles!

 
Postado : 12/11/2012 8:14 am
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Aproveitando sua boa vontade.
Existe uma biblioteca das funções do VBA em algum lugar? Assim eu poderia aprender as funções per se, ao invés de sair caçando métodos de fazer as coisas sem realmente conhecer as coisas que eu declaro?

 
Postado : 12/11/2012 9:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi?, que tipo de funções?

 
Postado : 12/11/2012 9:49 am
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Um código VBA é composto de vários comandos.
Estes comandos são compostos de variáveis, constantes e funções. :P

Embora VBA seja um pouquinho mais complexo com os Objetos e suas propriedades.

Enfim:
Um lugar onde eu possa ver mais sobre o que significa, o que faz e quais são as propriedades de...
1- Objetos (Como Worksheets, Workbooks e outros similares)
2- As funções (Como MsgBox, InputBox e outras similares)

 
Postado : 12/11/2012 10:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Isso pode ajuda-lo.
http://www.bertolo.pro.br/FinEst/Semana ... oExcel.pdf

Att

 
Postado : 12/11/2012 10:54 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Rukhron,

Boa Tarde!

Dentro do próprio VBA, existe uma janela chamada pesquisadore de objetos que lhe mostra todos os objetos existentes no Excel e a forma de utilizá-los, sintaxe e exemplos.

basta teclar F2 na janela da IDE do VBA.

 
Postado : 12/11/2012 11:01 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom, o pouco que sei sobre isso, obtive no metodo do arqueologista, ou seja procurando, caçando, testando, "escavando"; porem entre todos os sites/locais que "escavo", o help do exel/VBA é o mais completo. Alem do F2 (como disse o colega Wagner), para algo mais direto, se tiver alguma duvida sobre um termo no projeto/codigo, posicionando-se sobre sobre esse termo e teclando F1, vc recebe o "help" das propriedade e exemplo (se existente).
Em sites em portugues vc recebe algo (talvez) um pouco mais didático; mas carece de uma procura:
Prof Bertolo ( http://www.bertolo.pro.br/ ) (conforme indicação do colega Alexandre),
AmbienteOffice do colega Gualberto ( http://www.ambienteoffice.com.br/ ),
Macoratti ( http://www.macoratti.net/Default.aspx ),
Msdn ( http://msdn.microsoft.com/pt-br/ ),
aqui no Planilhando,no Tomás Vasques ( http://www.tomasvasquez.com.br/blog/ ),entre tantos outros.
Porem não tente querer aprender tudo, por tratar-se de algo mais complexo e flexivel; onde um mesmo objetivo pode ser alcançado de diversas maneiras; vá aprendendo/utilizando conforme tenha necessidade.

 
Postado : 12/11/2012 11:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa Tarde

Seria a mesma coisa que eu estava precisando apesar do meu banco ser em firebird

de uma olhada no tópico

viewtopic.php?f=10&t=6249

Ivair

 
Postado : 12/11/2012 11:54 am
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Com todas estas referencias acho que estou bem perto de fazer o que preciso.

Mais uma coisa:
Teria como já exportar estes dados como uma Tabela Dinâmica? :roll:

 
Postado : 12/11/2012 12:58 pm
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Estava fuçando o código e me deparei com a linha de comando ".CommandText =". Notei que ela modifica exatamente o valor que eu quero modificar, o tal "Texto de Comando", e queria saber como posso usar isto ai para alterar apenas o valor de "CommandText" baseado em variáveis declaradas pelo usuário.

Apenas isto já resolve o meu problema atual.

Vou colocar aqui o código de uma pasta que eu gerei com conexão a um access que eu criei só para poder ficar fuçando e ver como as coisas funcionam. :lol:
Eu usei o comando Macro para realizar algumas ações e ver como elas se traduziam em códigos (mudei algumas coisas também :p)

Sub MexerPraVer()

    Workbooks("Pasta1").Connections.AddFromFile _
        "C:Users----DocumentsMinhas fontes de dadosDatabaseCarro Tabelezura.odc"
    With ActiveWorkbook.Connections("DatabaseCarro Tabelezura").OLEDBConnection
        .BackgroundQuery = True
        .CommandText = Array("Tabelezura") 'é esta a linha que mexe no elemento da configuração da conexão que eu quero modificar (acreditem ou não é só isto mesmo que eu quero fazer)
        .CommandType = xlCmdTable
        .Connection = Array( _
        "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=C:Users----DesktopDatabaseCarro.accdb;" _
        , _
        "Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password" _
        , _
        "="""";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transact" _
        , _
        "ions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don'" _
        , _
        "t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data" _
        , "=False;Jet OLEDB:Bypass UserInfo Validation=False")
        .RefreshOnFileOpen = True
        .RefreshPeriod = 60
        .SavePassword = False
        .SourceConnectionFile = _
        "C:Users----DocumentsMinhas fontes de dadosDatabaseCarro Tabelezura.odc"
        .SourceDataFile = "C:Users----DesktopDatabaseCarro.accdb"
        .ServerCredentialsMethod = xlCredentialsMethodIntegrated
        .AlwaysUseConnectionFile = False
        .ServerFillColor = False
        .ServerFontStyle = False
        .ServerNumberFormat = False
        .ServerTextColor = False
    End With
    With ActiveWorkbook.Connections("DatabaseCarro Tabelezura")
        .Name = "DatabaseCarro Tabelezura"
        .Description = ""
    End With
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
        ActiveWorkbook.Connections("DatabaseCarro Tabelezura"), Version:= _
        xlPivotTableVersion14).CreatePivotTable TableDestination:="Plan" & Sheets.Count & "!R3C1", _
        TableName:="Tabela dinâmica1", DefaultVersion:=xlPivotTableVersion14
    Sheets("Plan" & Sheets.Count).Select
    Cells(1, 1).Select
End Sub
 
Postado : 13/11/2012 1:41 pm
(@rukhron)
Posts: 29
Eminent Member
Topic starter
 

Sendo ainda mais especifico:

A conexão do Workbook com o banco de dados pode ficar já configurada. Eu só preciso realmente criar uma forma de um usuário sem nenhum requisito de conhecimento no uso de VBA, SQL, etc possa informar duas variáveis pre-determinadas para poder acessar o mês o ano que ele quer no banco de dados.

Informadas as variáveis o programa VBA modificaria apenas o campo do "Texto do Comando" ou "CommandText" no VBA (realmente esta é a única parte imprescindível).

Com a conexão alterada os dados seriam atualizados e o usuário poderia utilizar os recursos do Excel sobre ele (Inserir Tabela, Inserir Tabela Dinâmica, etc).
A pessoa que vai usar será instruída de como usar os recursos Excel necessários, mas não da para ensinar VBA/SQL ou outra coisa que não use a interface facilitada do Excel.

Novamente, obrigado a todos pelo seu tempo e pela ajuda que já me deram até agora. :)

 
Postado : 13/11/2012 2:03 pm
Página 2 / 3