A bastante tempo não trabalhava com macros, precisei mês passado e achei legal compartilhar.
Trabalho em um loja de materiais de construção e temos três maquinas de tintas. Solicitamos a equipe desenvolve nosso sistema para fazer uma integração com o banco de dados dessas maquinas de tintas, pra facilitar a operação. Eles colocaram alguns empecilhos para desenvolver pois teriam que estudar a estrutura dos BD e das formulas. Então fiz as macros para detalhar tudo pra eles.
Cada maquina trabalha com um banco de dados diferente. Uma utiliza SQL Server 2005, a outra Access e por ultimo dBase.
O Banco SQL Server, tinha uma funcao que retornava todas as tabelas em que eu precisaria em um RecordSet.
- Set Conn = CreateObject("ADODB.Connection")
- Set rs = CreateObject("ADODB.Recordset")
- Set Cmd = CreateObject("ADODB.Command")
- Conn.Open "Provider=SQLOLEDB;Password=suasenha;Persist Security Info=True;User ID=seuusuario;Initial Catalog=seuBD;Data Source=seuUsuarioWindows\seuBD; Network Library=dbmssocn"
- Cmd.ActiveConnection = Conn
- sql = "comando sql aqui"
- Cmd.CommandText = sql
- Set rs = Cmd.Execute
O Banco Access e no dBase foram executados varios comandos sql e cada resultado preencia uma tabela diferente.
Access:
- Sub executaConsutla(varSQL As String)
- Dim varConn As String
- Range("A10").CurrentRegion.ClearContents
- varConn = "ODBC;DBQ=sua base de dados por exemplo C:\exemplo.mdb;Driver={Driver do Microsoft Access (*.mdb)}"
- With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A10"))
- .CommandText = varSQL
- .Name = "Query-39008"
- .Refresh BackgroundQuery:=False
- End With
- End Sub
dBase: a base que esta em dBase é um pouco mais confusa por isso criei varias funcoes que fazem a consultas e salva em tabelas diferentes:
- Sub consultaProdutos()
- Dim varSQL As String
- Dim varConn As String
- varSQL = "comando sql"
- varConn = "ODBC;DBQ=caminho da base & ";Driver={Driver do Microsoft dBase (*.dbf)}"
- getTabela varSQL, varConn, “suaTabela”
- End Sub
- Sub getTabela(varSQL As String, varConn As String, tabela As String)
- Worksheets(tabela).Activate
- Range("A10").CurrentRegion.ClearContents
- With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A10"))
- .CommandText = varSQL
- .Name = "Query-39008"
- .Refresh BackgroundQuery:=False
- End With
- Worksheets("consulta").Activate
- End Sub
Para o caso de alguem estar com uma tarefa semelhante a minha:
As maquinas de tinta que eu vi armazenam suas formulas em onças, para passar para ml basta multiplicar por 29,5735295625. Também tem formulas armazenadas com divisoes de onças por exemplo: 1Y25+5/96 bas ta dividir segunda por 48 e a terceira por 96, o resultado seria (1+(25/48)+(5/96))*29,5735 = 46,5166 ml.
Nenhum comentário:
Postar um comentário