Quando usamos programação Excel, muitas vezes precisamos usar um banco de dados.
Então, como se conectar ao banco de dados e depois ler os dados do banco de dados?
O VBA se conecta à instância do banco de dados SQL SERVER:
Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 'String para conectar ao banco de dados strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ usuário ];Senha=[senha];Catálogo inicial=[banco de dados];Fonte de dados=[endereço IP do banco de dados ou nome do servidor de banco de dados];Conectar Timeout=720; " 'Instrução de consulta, se a instrução sql for muito longa, você pode usar strSQL=strSQL+ para conectar as instruções divididas em vários parágrafos. Se a instrução for muito curta, você só poderá escrevê-la em uma linha. strSQL = "selecione * de Hy_KPI_Shop_Dept_WeekRpt " strSQL = strSQL+"where sdate='2014-01-01' order by sdate,shopid " Set conn = New ADODB.Connection Set ds = New ADODB.Recordset 'Abrir conexão de banco de dados conn.Open strConn 'Esta frase e Connect na string de conexão do banco de dados Timeout = 720 significa que se a instrução for executada por um longo período, essas duas sentenças podem estender o tempo de espera do VBA. Sem essas duas sentenças, o VBA geralmente relatará um tempo limite de consulta. conn.CommandTimeout = 720 With ds 'Obter dados de acordo com a instrução de consulta Open strSQL, conn 'Controlar automaticamente a adição de todos os cabeçalhos de coluna For col = 0 To ds.Fields.Count - 1 'Observe que os parâmetros em Offset( 0, col) deve ser Para estar correta, esta frase significa que o título será escrito na primeira linha, a partir da célula A1. Se não quiser escrever a linha do título, você pode comentar a frase a seguir. Planilhas("Relatório semanal de KPI para cada classe na loja").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next 'Adicione todas as linhas de dados, esta frase significa que os resultados da consulta serão escritos na primeira linha, ele começa na célula A1, mas como a linha do título é escrita na primeira linha, esta linha é na verdade escrita a partir de uma linha abaixo do título. Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With 'Fecha a conexão com o banco de dados e limpa os recursos Set ds = Nothing conn.Close Set conn = Nothing