Cuando usamos programación en Excel, a menudo necesitamos usar una base de datos.
Entonces, ¿cómo conectarse a la base de datos y luego leer datos de la base de datos?
VBA se conecta a la instancia de base de datos de SQL SERVER:
Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer 'Cadena para conectarse a la base de datos strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ usuario ];Contraseña=[contraseña];Catálogo inicial=[base de datos];Fuente de datos=[dirección IP de la base de datos o nombre del servidor de la base de datos];Conectar Timeout=720; " 'Declaración de consulta, si la declaración SQL es muy larga, puede usar strSQL=strSQL+ para conectar las declaraciones divididas en varios párrafos. Si la declaración es muy corta, solo puede escribirla en una línea. strSQL = "select * from Hy_KPI_Shop_Dept_WeekRpt " strSQL = strSQL+"donde sdate='2014-01-01' ordenar por sdate,shopid " Set conn = New ADODB.Connection Set ds = New ADODB.Recordset 'Abrir conexión de base de datos conn.Open strConn 'Esta frase y Connect en la cadena de conexión de la base de datos Timeout = 720 significa que si la declaración se ejecuta durante mucho tiempo, estas dos oraciones pueden extender el tiempo de espera de VBA. Sin estas dos oraciones, VBA a menudo informará un tiempo de espera de consulta. conn.CommandTimeout = 720 Con ds 'Obtiene datos de acuerdo con la declaración de consulta. Abra strSQL, conn 'Controla automáticamente la adición de todos los encabezados de columna Para col = 0 Para ds.Fields.Count - 1 'Tenga en cuenta que los parámetros en Offset( 0, col) debe ser Para que sea correcta, esta oración significa que el título se escribirá en la primera fila, comenzando desde la celda A1. Si no desea escribir la fila del título, puede comentar la siguiente oración. Worksheets("Informe semanal de KPI para cada clase en la tienda").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next 'Agrega todas las filas de datos, esta oración significa que los resultados de la consulta se escribirán en la primera fila, comienza desde la celda A1, pero como la fila del título está escrita en la primera fila, esta fila en realidad se escribe desde una fila debajo del título. Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With 'Cerrar la conexión de la base de datos y borrar los recursos Set ds = Nothing conn.Close Set conn = Nothing