En este grupo En todos

Foro de Excel



TRAER DATA DE SQL SERVER A EXCEL

GUSTAMPA
Ingenieria iprc
Escrito por Gustampa Stoner
el 20/05/2010

Buenos dias,

Tengo un archivo de consulta en el servidor (describo la ruta mas adelante) y quiero desde una macro en excel conectarme a el y traerlo a una hoja de excel para posteriormente trabajar con esa data. Pueden decirme como hago para traerla por vba en excel

El archivo se llama ventas perdidas

\\GSERVER\Price 03\1_EXCEL_SQL_SERVER\TABLAS_ACTUALIZACION_SQLSERVER\VENTASPERDIDAS (ARCHIVO DE CONSULTA DE ODBC DE EXCEL)

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 20/05/2010

A) Enciende la grabadora de macros;

b) Busca y abre el libro en cuestión;

c) Apaga la grabadora

Allí tienes la macro en VBA pedida.

Saludos, Cacho.

Abraham Valencia
Computacion e informatica microsoft mv...
Escrito por Abraham Valencia
el 20/05/2010

Pues a mi no me queda claro.... ¿Podrias ordenarte un poco? ¿Es a una BD de SQL server que te quieres conectar? ¿Que version de SQL server? ¿O es otra cosa?

Abraham

Gustampa Stoner
Ingenieria iprc
Escrito por Gustampa Stoner
el 20/05/2010

Tengo un libro de excel con formulas y macros que van a trabajar con la data que importe en una hoja especifica del libro de excel.

La data esta en un servidor sql server 2003

Pero tengo oficce 2010 y sql server 2008 r2 en la estacion local

Y el archivo que se encuentra en el servidor se llama ventas perdidas, que viene siendo una coneccion de odbc.

Quisiera un macro que me traiga esos datos y los coloque en una hoja especifica del libro de excel que tengo abierto

Https://grupos.emagister.com/documento/archivo_de_consulta_odbc/6610-467116.


Ya lo que dijo cacho lo hice pero, me habre una libro nuevo y no es lo que quiero, el codigo fue el siguiente


Sub Macro3()
'
' Macro3 Macro
'

'
Workbooks. OpenDatabase Filename:= _
"\\GSERVER\Price 03\1_EXCEL_SQL_SERVER\TABLAS_ACTUALIZACION_SQLSERVER\ventas perdidas. Dqy" _
, CommandText:=Array( _
"SELECT SAFACT. NumeroD, SAFACT. CodOper, SAFACT. CodVend, SAFACT. Descrip, SAFACT. FechaE, VW_ADM_ITEMSFACTURA. NumeroD, " _
, _
"VW_ADM_ITEMSFACTURA. Coditem, VW_ADM_ITEMSFACTURA. CodInst, VW_ADM_ITEMSFACTURA. Descrip1, VW_ADM_ITEMSFACTURA. Cantida" _
, _
"d FROM GiroserAdminDB.dbo.SAFACT SAFACT, GiroserAdminDB.dbo.VW_ADM_ITEMSFACTURA VW_ADM_ITEMSFACTURA WHERE SAFACT. " _
, _
"NumeroD = VW_ADM_ITEMSFACTURA. NumeroD AND SAFACT. TipoFac = VW_ADM_ITEMSFACTURA. TipoFac AND (SAFACT. CodOper='VPSI')" _
, ") ORDER BY SAFACT. NumeroD"), CommandType:=xlCmdSql, ImportDataAs:= _
xlTable
End Sub

Abraham Valencia
Computacion e informatica microsoft mv...
Escrito por Abraham Valencia
el 20/05/2010

No tengo Excel 2010, pero, prueba conectarte a ese archivo *dqy para extraer sus datos haciendo uso de "obtener datos externos"

Abraham

PD: OJO, tu explicacion sigue siendo algo enredada :(

Gustampa Stoner
Ingenieria iprc
Escrito por Gustampa Stoner
el 20/05/2010

Caray, lo pondre mas facil


En el computador donde se encuentra el servidor existe un archivo

Http://grupos.emagister.com/documento/archivo_de_consulta_odbc/6610-467116

tal y como se muestra en esta direccion arriba esta el archivo,


la direccion dentro del computador donde se encuatra el archivo es:

"\\GSERVER\Price 03\1_EXCEL_SQL_SERVER\TABLAS_ACTUALIZACION_SQLSERVER\ventas perdidas. Dqy

tengo un libro de excel abierto y quiero un codigo visual basic (macro) que con darle a un boton vaya a esa direccion y me traiga el archivo a una hoja especifica del libro de excel que tengo abierto, mas facil no puedo

Abraham Valencia
Computacion e informatica microsoft mv...
Escrito por Abraham Valencia
el 20/05/2010

Esta bien lo que te digo entonces, usa "obtener datos externos" y obtendras los datos en la hoja que desees... Y tal y como dijo Cacho, usando la grabadora obtendras el codigo VBA

Abraham

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 20/05/2010

"... Ya lo que dijo cacho lo hice pero, me habre una libro nuevo y no es lo que quiero ..."

Entenderás que -lo anterior- sólo es posible al no utilizar correctamente el asistente para obtener datos externos.
Saludos, Cacho.

Gustampa Stoner
Ingenieria iprc
Escrito por Gustampa Stoner
el 21/05/2010

Buenos dias, Profe cacho, ya esta listo, ya puedo obtener los datos desde un libro abierto y colocarlo en una hoja nueva, pero tuve que revisar algunos libros avanzados de vba y sql para dar en el punto.




'-------------------------------------------------------------------------
Sub CONECCION_nvr()
'
' Macro para conectar con base de datos query
' Gus Stoner
'

'
Dim destino As String, fecha_inicial As String, fecha_final As String, hoja_destino As Worksheet


destino = InputBox("Escribe el nombre de la HOJA Destino" & vbCrLf & vbCrLf & _
"El Nombre corresponde a una hoja nueva a crear", "Hoja Destino", "Cual Nombre..? ")

Set hoja_destino = ActiveWorkbook.Sheets.Add
hoja_destino. Name = destino

hoja_destino. Activate

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"ODBC;DRIVER=SQL Server;SERVER=GSERVER;UID=sa;;APP=Microsoft Office 2010;WSID=GIRO10;DATABASE=GiroserAdminDB" _
, Destination:=Range("$A$1")). QueryTable
. CommandText = Array( _
"SELECT SAFACT. NumeroD, SAFACT. CodOper, SAFACT. CodVend, SAFACT. Descrip, SAFACT. FechaE, VW_ADM_ITEMSFACTURA. NumeroD, " _
, _
"VW_ADM_ITEMSFACTURA. Coditem, VW_ADM_ITEMSFACTURA. CodInst, VW_ADM_ITEMSFACTURA. Descrip1, VW_ADM_ITEMSFACTURA. Cantida" _
, _
"d FROM GiroserAdminDB.dbo.SAFACT SAFACT, GiroserAdminDB.dbo.VW_ADM_ITEMSFACTURA VW_ADM_ITEMSFACTURA WHERE SAFACT. " _
, _
"NumeroD = VW_ADM_ITEMSFACTURA. NumeroD AND SAFACT. TipoFac = VW_ADM_ITEMSFACTURA. TipoFac AND (SAFACT. CodOper='VPSI')" _
, ") ORDER BY SAFACT. NumeroD")
. RowNumbers = False
. FillAdjacentFormulas = False
. PreserveFormatting = True
. RefreshOnFileOpen = False
. BackgroundQuery = True
. RefreshStyle = xlInsertDeleteCells
. SavePassword = False
. SaveData = True
. AdjustColumnWidth = True
. RefreshPeriod = 0
. PreserveColumnInfo = True
. SourceConnectionFile = _
"\\GSERVER\Price 03\1_EXCEL_SQL_SERVER\TABLAS_ACTUALIZACION_SQLSERVER\ventas perdidas. Odc"
. ListObject. DisplayName = "Tabla_ventas_perdidas"
. Refresh BackgroundQuery:=True
End With
Exit Sub
End Sub

Gustampa Stoner
Ingenieria iprc
Escrito por Gustampa Stoner
el 21/05/2010

Ahora, espero que me ayude con el codigo, como hago para tener la opcion de seleccioonar un archivo en particular ubicado en el directorio del servidor mencionado

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 21/05/2010

¿Te estás refiriendo a un archivo distinto de "Ventas perdidas"...?

Y en tal caso: ¿También cambia la tabla?

Gustampa Stoner
Ingenieria iprc
Escrito por Gustampa Stoner
el 21/05/2010

Si efectivamente.

1. - directorio distinto.. La opcion desde una lista despegable


Y expliqueme lo de la tabla

Gustampa Stoner
Ingenieria iprc
Escrito por Gustampa Stoner
el 21/05/2010

Perdon.


Archivo distinto, pero tener la opcion desde una lista despegable de optar por otros, tengo como 12 archivos diferentes


Y lo de la tabla explicar

Wildwolf Roy
Historia complutense, madrid
Escrito por Wildwolf Roy
el 01/09/2010

Buenos días, desde una consulta de Access, he de grabar datos en una hoja de Excel, periódicamente. Estos datos han de añadirse a los que ya hay.

He creado una macro en Excel que funciona perfectamente (más abajo escribo el código), pero, siempre va a la misma celda destino de cuando grabé la macro y me arma un lío tremendo.

Quisiera que el resultado de la macro se pegara a partir de la primera celda en blanco de la columna B y sucesivas, o bien, si no hay otro remedio, que pregunte siempre el destino.

Puedes ayudarme? Gracias por anticipado, Margarita

Mi macro:
Sub Archivar()
'
' Archivar Macro
' Macro grabada el 01/09/2010 por CajaMadrid
'

'
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access Database;DBQ=J:\REMESAS\ARCHIVO DE REMESAS Y CREDITOS. Mdb;DefaultDir=J:\REMESAS;DriverId=25;FIL=MS Access;MaxBuff" _
), Array("erSize=2048;PageTimeout=5;")), Destination:=Range(" B2921 "))
. CommandText = Array( _
"SELECT ExcelMacro. ID_0610, ExcelMacro. EXPEDIENTE, ExcelMacro. `NUMERO DE CAJA`, ExcelMacro. AÑO, ExcelMacro. `FECHA DE ARCHIVO`, ExcelMacro. FECHA_ENTRADA, ExcelMacro. FE_BAJA" & Chr(13) & "" & Chr(10) & "FROM `J:\REMESAS\ARCHIVO DE " _
, "REMESAS Y CREDITOS`. ExcelMacro ExcelMacro" & Chr(13) & "" & Chr(10) & "ORDER BY ExcelMacro. ID_0610")
. Name = "Consulta desde MS Access Database_16"
. FieldNames = True
. RowNumbers = False
. FillAdjacentFormulas = False
. PreserveFormatting = True
. RefreshOnFileOpen = False
. BackgroundQuery = True
. RefreshStyle = xlInsertDeleteCells
. SavePassword = False
. SaveData = True
. AdjustColumnWidth = True
. RefreshPeriod = 0
. PreserveColumnInfo = True
'. Refresh BackgroundQuery:=False
End With
End Sub

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 01/09/2010

Hola! Margarita.

La regla de este Foro es muy sencilla: "un tema por debate"

Como verás, te has incorporado a un debate iniciado y terminado hace -ya- 4 meses con una duda que no se vincula con la que le dio origen.

Te sugiero, entonces, que inicies uno nuevo mediante el enlace:

---> Crear nuevo debate

Explica allí cual es tu dificultad.
Saludos, Cacho.