Tengo un libro que contiene un query, las hojas de dicho libro
entan bloqueada y contiene tambien varias macros, el problema es que
este archivo lo voy a colocar en otras pc lo que implica tener que
cambiar parte del query ya que usan otros servidores.
Como yo no voy a instalar el archivo existira una manera de crear
un documento (por ejemplo un .TXT), donde solamente le indique yo a la
persona en que carpeta lo va a colocar, y asi esta no tenga que
estarcambiando el quiery directamente desdeel archivo de excel.
Expero haberme explicado bien. De antemano gracias por su ayuda.
> ... un libro que contiene un query, las hojas... entan bloqueada y contiene tambien varias macros
> ... este archivo lo voy a colocar en otras pc lo que implica tener que cambiar parte del query ya que usan otros servidores.
> ... yo no voy a instalar el archivo existira una manera de crear un documento (por ejemplo un .TXT) donde... le indique
> ... en que carpeta lo va a colocar y... no tenga que estar cambiando el quiery... desde el archivo de excel.
- cuando "entregues" el archivo (en mano o por correo electronico) podrias comentar las instrucciones necesarias ?
- si el query es "refrescable" y el archivo usa macros, podrias detectar "cambios" en la cadena del query para "ajustes" ?
- si el query es por codigo, podrias ubicar el origen en el mismo directorio del *.XLS y usar un "ThisWorkbook.Path" ?
probablemente haya mas opciones/alternativas/... pero hay "detalles" que no se aprecian en la consulta, asi que...
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Creo que me sirve lo opcion
- si el query es por codigo, podrias ubicar el origen en el mismo
directorio del *.XLS y usar un "ThisWorkbook.Path" ?
pero no entiendo mucho de eso.
Ya que lo que necesito es que cuando envie el archivo por correo u
otro medio, no tener la necesidad de proporcionarles las claves del
libro o del proyecto de VB,
sino que solo envie un archivo(de ser posible), y que este modifique
el query del documento de excel que envie.
De esta manera si en futuro hago modificaciones al query solamente les
envio una actualización y ya.
De antemano Gracias por la ayuda
por que no expones (con lujo de detalles) como se construye en tu codigo la consulta ?
(la ruta, el archivo que se consulta, la consulta/filtro/... que se realiza, etc. etc. etc.)
saludos,
hector.
__ OP __
> Creo que me sirve lo opcion
>
> - si el query es por codigo, podrias ubicar el origen en el mismo directorio del *.XLS y usar un "ThisWorkbook.Path" ?
>
> pero no entiendo mucho de eso.
> Ya que lo que necesito es que cuando envie el archivo por correo u otro medio
> no tener la necesidad de proporcionarles las claves del libro o del proyecto de VB
SELECT ARTICULO.CODAMA, ARTITDA.EXACAT, ARTITDA.PREVAT,
ARTITDA.STMIAT, ARTICULO.ESREMA, ARTICULO.TIPAMA
FROM YYY.SISTEMA.ARTICULO ARTICULO, YYY.COMPRAS.ARTITDA ARTITDA
WHERE ARTICULO.CODAMA = ARTITDA.CODAAT
Donde YYY es el nombre del sistema donde se encuentran las tablas,
cuando envie el archivo de excel para que se instala en las otras
empresas ellos deberan modficar este nombre sino la consulta no
funcionara.
Supongamos que la envie para la compañia DD1 (YYY debera ser
cambiada por DD1)
si a DD2 (YYY debera ser cambiada por DD2).
lo que quiero es que no tengan que estar desbloqueando el libro , y
desabilitando las macros para modificar la consulta, es decir no
tengan que estar llendo a
Datos-----obtener datos externos------nueva consulta de base de datos.
Sino que de alguna manera (desde un archivo externo, se me ocurre), yo
mismo modifique esta consulta. De manera tal que cuando quiere agregar
algo mas a la consulta simplemente lo cambie en el archivo y lo envie,
algo asi como para hacer actualizaciones.
De antemano Gracias.
solo exhibes una parte de lo (re)preguntado, pero...
-> cual es la "conexion" para la base de datos externa ???
-> en donde "cabria" hacer un ThisWorkbook.Path ?
-> asumo que estas (des/re)protegiendo la hoja no ?
podrias exponer (exactamente) las partes de tu codigo donde interviene la consulta y la TD ?
y cualquier "cosa" (en la consulta/TD) que quisieras que tus usuarios "NO toquen" -?-
saludos,
hector.
__ OP __
> Bueno lo que utilizo para conectarme a la base de datos externa
> es a traves de una Origenes de datos ODBC
> y el sistema al cual me conecto es bajo el ambiente as400...
(resumiendo lo comentado hasta ahora)...
1) la realidad es que NO usas codigo (vba ?) para establecer la conexion -???-
2) estas conectando a la base de datos externa desde la interfaz del usuario (obtener datos externos) -???-
3) tienes bloqueado el libro (y/o la hoja) donde se obtienen los datos externos -???-
4) lo que ya no me queda muy claro, es si tienes tablas dinamicas... o solo tablas de consultas externas -???-
(hasta donde se, las tablas dinamicas no funcionan en hojas protegidas)
5) no se si tengas mas detalles "en el tintero" -???-
(posibles) opciones/alternativas de solucion (usando ms-query)...
puedes parametrizar las consultas externas en excel a traves de ms-query, usando -nuevamente- el asistente si...
una vez que termines con el asistente para finalizar la consulta a la base de datos... (y ANTES de devolver los resultados en excel)...
1) puedes consultar/modificar/... la sentencia de la consulta (sql) desde el mismo menu de datos (o la BH de datos externos)
-> solicita modificar la consulta
-> avanza hasta el ultimo paso (finalizar)
-> en lugar de devolver los datos a excel... selecciona ->ver datos o modificar consulta en MS Query<-
-> elige: (menu) ver / sql... (o de la BH el icono de SQL)
2) una vez que decidas que partes de la consulta deseas convertir en parametros...
-> sustituye la/s fraccion/es apropiada/s de la sentencia por un signo ? (opcionalmente pudes darles un identificador CORTO)
(lo anterior ocasiona que ANTES de refrescar una consulta, MS-Query te pregunta por el -nuevo- valor del parametro)
-> termina la modificacion y devueve los datos a excel (tendras que responder una cuantas preguntas a los parametros)
3) posteriormente, puedes sustituir la/s pregunta/s de MS-Query por los valores que pueda tomar de celdas en tu hoja...
-> vuelve a ejecutar (menu) datos / obtener datos externos / parametros... (o desde la BH de datos externos)
-> selecciona (por cada parametro) la opcion de: tomar el valor de la siguiente celda:
-> y (obviamente) selecciona la celda apropiada para cada parametro
4) segun la parte de la sentencia sql que hayas parametrizado... debera haber una celda son la sintaxis EXACTA del parametro
si deseas consultar sitios con informacion al respecto... visita:
-> Andy Wiggins: http://www.bygsoftware.com/Excel/sql.htm
-> Ole P. Erlandsen: http://www.erlandsendata.no/english/index.php?d=envbadacconnstring
-> Carl Prothman: http://www.carlprothman.net/Default.aspx?tabid=87#OLEDBProviderForSQLServer
-> Dick Kusleika: http://www.dicks-clicks.com/excel/ExternalData.htm#CreateUI
si cualquier duda... (o informacion adicional)... comentas?
saludos,
hector.
No estoy utilizando tablas dinamicas,
Revisare los links
Aparte de lo anter pero muy ligado a ello existira una manera que
a traves de VB u otra vía pueda ejecutar un archivo sql (*.qrt), sin
necesidad de hacerlo manualmente
ejemplo: es vez de ir a Datos---Obtener Datos Externos---Nueva
consulta de Base de Datos...
Despues de aparecer la ventana de Microsoft Query
Archivo----Ejecutar SQL---Abrir...
Como podria indicarle la direccion donde esta el archivo *.qrt y lo
ejecute directamente
De antemano Gracias por tu ayuda
> ... manera que a traves de VB u otra via pueda ejecutar un archivo sql (*.qrt), sin necesidad de hacerlo manualmente
> ejemplo: es vez de ir a Datos---Obtener Datos Externos---Nueva consulta de Base de Datos...
> Despues de aparecer la ventana de Microsoft Query
> Archivo----Ejecutar SQL---Abrir...
> Como podria indicarle la direccion donde esta el archivo *.qrt y lo ejecute directamente
para este tipo de casos que parecen complicados, resulta muy util usar la grabadora de macros...
- activa la grabadora de macros
- ejecuta tus acciones (completas) desde la interfase de usuario (hasta obtener tu resultado)
- deten la grabadora de macros
- revisa/edita/adapta/... el codigo generado
{+}
- convierte en parametros la/s seccion/es apropiada/s de la cadena de consulta/conexion generada por la grabadora
- determina de que celda se tomara cada seccion "parametrizada" (su contenido debera ser exactamente "el esperado")
- modifica (cuando sea necesario) la/s celda/s de cada parametro
- refresca la tabla/consulta
(hay informacion al respecto en los links sugeridos antes)
si cualquier duda (o informacion adicional)... comentas?
saludos,
hector.