Leer datos de un libro cerrado

26/04/2004 - 19:13 por Henry Sanchez | Informe spam
Es posible leer valores guardados en un libro sin tener
que abrirlo?

Hojala desde VBA

Saludos,

Henry

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
26/04/2004 - 20:18 | Informe spam
hola, Henry !

Es posible leer valores guardados en un libro sin tener que abrirlo?



en septiembre de 2003 'preguntabas' sobre 'usar rangos de otros libros'... ;) [algunas ideas fueron]:

==> [algunas] 'ideas' para 'devolver' valores en rangos de 'otros' libros =>CERRADOS<
1) la manera mas facil [rapida y 'sencilla'] de hacer 'referencias' a libros cerrados =>SIN ABRIRLOS<= es...
CREAR el vinculo 'real' [solo 'temporalmente'] tal como 'aparece' en la barra de formulas un enlace a libros cerrados:
a) el nombre del libro =>INCLUYENDO la ruta y la extension<= se 'delimita' por corchetes '[.]'
b) [si el el caso] el siguiente 'parametro' es el nombre de la hoja
c) el siguiente 'parametro' [referencia al rango o nombre] va 'precedida' por un signo de 'cierre' de admiracion '!'
d) TODA la 'cadena' [despues del signo '=' y hasta ANTES del signo '!'] va 'delimitada' por apostrofos =>'<
2) otras 'tecnicas' que se pueden usar son [p.e.] el metodo 'ExecuteExcel4Macro', usar ADO, DAO, etc.

¿comentas cual es la situcion que necesitas resolver?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Henry Sanchez
27/04/2004 - 21:16 | Informe spam
Hola Hector,

Gracias como siempre,

Es cierto, hace tiempo estuve interesado en el mismo tema
y no consegui exactamente lo que necesitaba,
El asunto es el siguiente
Necesito leer cada uno de los valores en un rango de un
libro de trabajo que se encuentra cerrado, el numero de
estos valores depende del No de lineas en el rango, que
por lo general es variable.

Dado que el no de datos es variable, lo mejor es tratar de
leer estos datos desde VBA.

En cuanto a usar ADO o DAO, seguramente funciona, pero en
esa epoca no encontre informacion de como es que se maneja
y no tengo ninguna experiencia en el tema, y si como me
temo, debo instalar algo adicional, el asunto se complica,
pues mis aplicaciones funcionan en muchos computadores de
cada uno de mis clientes y algunas veces, cuando hago uso
por ejemplo de un control diferente a los que tiene Excel
por defecto, algunos computadores no encuentran el
control .ocx correspondiente, y se generan los errores en
tiempo de ejecucion. Por esa razon trato de ceñirme
siempre a los controles y tecnicas basicas.

Si estoy equivocado en mi apreciacion respecto al uso de
DAO o ADO me gustaria saberlo.

Saludos,

Henry
hola, Henry !

Es posible leer valores guardados en un libro sin tener




que abrirlo?

en septiembre de 2003 'preguntabas' sobre 'usar rangos de


otros libros'... ;) [algunas ideas fueron]:

==> [algunas] 'ideas' para 'devolver' valores en rangos


de 'otros' libros =>CERRADOS<>
1) la manera mas facil [rapida y 'sencilla'] de


hacer 'referencias' a libros cerrados =>SIN ABRIRLOS<=
es...
CREAR el vinculo 'real' [solo 'temporalmente'] tal


como 'aparece' en la barra de formulas un enlace a libros
cerrados:
a) el nombre del libro =>INCLUYENDO la ruta y la


extension<= se 'delimita' por corchetes '[.]'
b) [si el el caso] el siguiente 'parametro' es el


nombre de la hoja
c) el siguiente 'parametro' [referencia al rango o


nombre] va 'precedida' por un signo de 'cierre' de
admiracion '!'
d) TODA la 'cadena' [despues del signo '=' y hasta


ANTES del signo '!'] va 'delimitada' por apostrofos =>'<>
2) otras 'tecnicas' que se pueden usar son [p.e.] el


metodo 'ExecuteExcel4Macro', usar ADO, DAO, etc.

¿comentas cual es la situcion que necesitas resolver?
saludos,
hector.

.

Respuesta Responder a este mensaje
#3 Héctor Miguel
27/04/2004 - 22:54 | Informe spam
hola, Henry !

... leer ... un rango de un libro ... cerrado ... depende del No de lineas ... que por lo general es variable [...]
... usar ADO o DAO ... si como me temo, debo instalar algo adicional, el asunto se complica
... mis aplicaciones funcionan en muchos computadores de ... mis clientes
... algunas veces ... algunos computadores no encuentran el control ... correspondiente, y [...]
... trato de ceñirme siempre a los controles y tecnicas basicas [...]



para este tipo de 'requerimientos' ['recomiendan'] usar ADO [ActiveX Data Objects] 'que' DAO [Data Access Objects]
'pero'... [efectivamente] =>se requiere<= esteblecer una referencia [en el proyecto de macros] ...
a la biblioteca de objetos =>Microsoft ActiveX Data Objects x.x Library<= 'x.x' corresponde a la version 'instalada'
[ademas] si el proyecto sera ejecutado en diferentes pc's... es =>recomendable<= 'programar' EN la version 'mas baja'
[y aunque tambien tiene sus 'visicitudes']... si 'desconoces' la dimension del rango [mientras el 'otro' libro esta cerrado]
[me parece que] es [quizas] =>la unica<= opcion 'viable' para 'rescatar' [bloques de] datos de un libro =>SIN 'abrirlo'<
otra alternativa seria 'tomar' UNA A UNA [cada vez] las referencias 'conocidas' en el libro cerrado
esto lo puedes hacer con una [¿simple?] instruccion usando el metodo 'ExecuteExcel4Macro'
=> NO requiere 'aditamentos', pero... seria una 'llamada' por cada celda del rango hasta que <= :((

te adjunto un ejemplo de 'ExcecuteExcel4Macro' y otro usando ADO ;)
saludos,
hector.
_______
opcion 1: tomar datos desde un libro cerrado (UNA REFERENCIA A LA VEZ con el metodo ExecuteExcel4Macro)
==> primer paso, una funcion [es una manera muy 'versatil'] ...
Function ExtraerDeArchivo( _
ByVal DelDirectorio As String, _
ByVal DelArchivo As String, _
ByVal DeLaHoja As String, _
ByVal DeLaReferencia As String)
Dim TomarDe As String
If Right(DelDirectorio, 1) <> "\" Then DelDirectorio = DelDirectorio & "\"
TomarDe = "'" & DelDirectorio & "[" & DelArchivo & "]" & DeLaHoja & "'!" & _
Range(DeLaReferencia).Range("a1").Address(, , xlR1C1)
ExtraerDeArchivo = ExecuteExcel4Macro(TomarDe)
End Function

==> segundo paso, 'como llamarla' ...
Sub ExtraerUnDato()
Dim Ruta As String, Archivo As String, Hoja As String, Referencia As String, Mensaje as String
Ruta = "C:\Mis documentos": Archivo = "Pruebas.xls": Hoja = "Hoja3": Referencia = "b25"
Mensaje = " Directorio: " & Ruta & vbCr & _
" Archivo: " & Archivo & vbCr & _
" Hoja: " & Hoja & vbCr & _
"Referencia: " & UCase(Referencia) & vbCr & _
"Lectura de la referencia al libro NO ABIERTO:"
MsgBox Mensaje & vbCr & ExtraerDeArchivo(Ruta, Archivo, Hoja, Referencia)
End Sub
_______
opcion 2: tomar datos desde un libro cerrado [una o varias celdas a la vez, usando ADO]
==> MUY IMPORTANTE: deberas establecer una referencia en el proyecto VBA [herramientas / referencias...]
a la biblioteca de objetos ==> Microsoft ActiveX Data Objects x.x Library
==> primer paso, la funcion ...
Function TomarDatosDeArchivoCerrado( _
ByVal ArchivoDeOrigen As String, _
ByVal HojaDeDatos As String, _
ByVal RangoDeDatos As String, _
ByVal Títulos As Boolean)
Dim ConectarCon As ADODB.Connection, Ejecutar As ADODB.Command, HDR As String, _
Registros As ADODB.Recordset, Reg_n As Integer, Campo As Integer
Set ConectarCon = New ADODB.Connection
If Títulos = True Then HDR = "Yes" Else HDR = "No"
ConectarCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ArchivoDeOrigen & ";" & _
"Extended Properties=""Excel 8.0;" & _
"IMEX=1;" & _
"HDR=" & HDR & ";"";"
Set Ejecutar = New ADODB.Command
Ejecutar.ActiveConnection = ConectarCon
If HojaDeDatos = "" _
Then Ejecutar.CommandText = "SELECT * from `" & RangoDeDatos & "`" _
Else Ejecutar.CommandText = "SELECT * from `" & HojaDeDatos & "$" & RangoDeDatos & "`"
Set Registros = New ADODB.Recordset
Registros.Open Ejecutar, , adOpenKeyset, adLockOptimistic
If Registros.RecordCount > 1 Or Registros.Fields.Count > 1 _
Then MsgBox "Seleccionados..." & vbCr & _
Registros.Fields.Count & " campos (columnas) de " & vbCr & _
Registros.RecordCount & " registros (renglones)." _
Else MsgBox "Selección de UN registro unicamente."
Registros.MoveFirst
Do While Not Registros.EOF And Campo <= Registros.Fields.Count - 1
For Campo = 0 To Registros.Fields.Count - 1
For Reg_n = 1 To Registros.RecordCount
MsgBox "En el campo " & Campo + 1 & " {" & Registros.Fields(Campo).Name & "}" & vbCr & _
"Valor del registro " & Reg_n & ": " & Registros.Fields(Campo).Value
Registros.MoveNext
Next: Registros.MoveFirst: Next: Loop: ConectarCon.Close
Set ConectarCon = Nothing: Set Registros = Nothing: Set Ejecutar = Nothing
End Function

==> segundo paso, 'como llamarla'
==> tiene dos 'formas' [seleccionas la que necesites en el cuadro de mensaje]:
==> usando el nombre de la hoja y el rango de datos, o solo una referencia a un rango con nombre ...
Sub ExtraerVariosDatos()
Dim Forma As VbMsgBoxResult
Forma = MsgBox("Selecciona la forma de consulta al archivo externo..." & vbCr & _
" SI = Usar Hoja y Rango de celdas" & vbCr & _
" NO = Usar Nombres (en rangos)", _
vbYesNo + vbQuestion, "Forma de consulta")
If Forma = vbYes _
Then TomarDatosDeArchivoCerrado "C:\Mis documentos\Pruebas.xls", "Hoja3", "a21:c25", False _
Else TomarDatosDeArchivoCerrado "C:\Mis documentos\Pruebas.xls", "", "NombreRango", False
End Sub

en esta segunda opcion, el primer MsgBox 'te dice' cuantas columnas y renglones tiene el rango ['de algo servira']
y el segundo MsgBox 'te dice' los valores que contiene cada celda en el rango [puedes cambiar los MsgBox por ... ??? ]
Respuesta Responder a este mensaje
#4 Henry Sanchez
28/04/2004 - 02:03 | Informe spam
Gracias por tu ayuda Hector,

creo que me quedo con la opcion No 1 para evitar eso de
establecer referencias y demas.

Le voy a sacar mucho provecho a la funcion.

Nota:
Tienes una base de datos con las consultas que llegan al
grupo? solo asi se explica que recuerdes consultas de
hace mas de un año.

Saludos,

Henry
hola, Henry !

... leer ... un rango de un libro ... cerrado ...




depende del No de lineas ... que por lo general es
variable [...]
... usar ADO o DAO ... si como me temo, debo instalar




algo adicional, el asunto se complica
... mis aplicaciones funcionan en muchos computadores




de ... mis clientes
... algunas veces ... algunos computadores no




encuentran el control ... correspondiente, y [...]
... trato de ceñirme siempre a los controles y




tecnicas basicas [...]

para este tipo de 'requerimientos' ['recomiendan'] usar


ADO [ActiveX Data Objects] 'que' DAO [Data Access Objects]
'pero'... [efectivamente] =>se requiere<= esteblecer una


referencia [en el proyecto de macros] ...
a la biblioteca de objetos =>Microsoft ActiveX Data


Objects x.x Library<= 'x.x' corresponde a la
version 'instalada'
[ademas] si el proyecto sera ejecutado en diferentes


pc's... es =>recomendable<= 'programar' EN la
version 'mas baja'
[y aunque tambien tiene sus 'visicitudes']...


si 'desconoces' la dimension del rango [mientras
el 'otro' libro esta cerrado]
[me parece que] es [quizas] =>la unica<= opcion 'viable'


para 'rescatar' [bloques de] datos de un libro
=>SIN 'abrirlo'<>
otra alternativa seria 'tomar' UNA A UNA [cada vez] las


referencias 'conocidas' en el libro cerrado
esto lo puedes hacer con una [¿simple?] instruccion


usando el metodo 'ExecuteExcel4Macro'
=> NO requiere 'aditamentos', pero... seria


una 'llamada' por cada celda del rango hasta que
<= :((

te adjunto un ejemplo de 'ExcecuteExcel4Macro' y otro


usando ADO ;)
saludos,
hector.
_______
opcion 1: tomar datos desde un libro cerrado (UNA


REFERENCIA A LA VEZ con el metodo ExecuteExcel4Macro)
==> primer paso, una funcion [es una manera


muy 'versatil'] ...
Function ExtraerDeArchivo( _
ByVal DelDirectorio As String, _
ByVal DelArchivo As String, _
ByVal DeLaHoja As String, _
ByVal DeLaReferencia As String)
Dim TomarDe As String
If Right(DelDirectorio, 1) <> "\" Then DelDirectorio =


DelDirectorio & "\"
TomarDe = "'" & DelDirectorio & "[" & DelArchivo & "]"


& DeLaHoja & "'!" & _
Range(DeLaReferencia).Range


("a1").Address(, , xlR1C1)
ExtraerDeArchivo = ExecuteExcel4Macro(TomarDe)
End Function

==> segundo paso, 'como llamarla' ...
Sub ExtraerUnDato()
Dim Ruta As String, Archivo As String, Hoja As String,


Referencia As String, Mensaje as String
Ruta = "C:\Mis documentos": Archivo = "Pruebas.xls":


Hoja = "Hoja3": Referencia = "b25"
Mensaje = " Directorio: " & Ruta & vbCr & _
" Archivo: " & Archivo & vbCr & _
" Hoja: " & Hoja & vbCr & _
"Referencia: " & UCase(Referencia) &


vbCr & _
"Lectura de la referencia al libro NO


ABIERTO:"
MsgBox Mensaje & vbCr & ExtraerDeArchivo(Ruta,


Archivo, Hoja, Referencia)
End Sub
_______
opcion 2: tomar datos desde un libro cerrado [una o


varias celdas a la vez, usando ADO]
==> MUY IMPORTANTE: deberas establecer una referencia en


el proyecto VBA [herramientas / referencias...]
a la biblioteca de objetos ==> Microsoft ActiveX


Data Objects x.x Library
==> primer paso, la funcion ...
Function TomarDatosDeArchivoCerrado( _
ByVal ArchivoDeOrigen As String, _
ByVal HojaDeDatos As String, _
ByVal RangoDeDatos As String, _
ByVal Títulos As Boolean)
Dim ConectarCon As ADODB.Connection, Ejecutar As


ADODB.Command, HDR As String, _
Registros As ADODB.Recordset, Reg_n As Integer,


Campo As Integer
Set ConectarCon = New ADODB.Connection
If Títulos = True Then HDR = "Yes" Else HDR = "No"
ConectarCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &


_
"Data Source=" &


ArchivoDeOrigen & ";" & _
"Extended


Properties=""Excel 8.0;" & _
"IMEX=1;" & _
"HDR=" & HDR & ";"";"
Set Ejecutar = New ADODB.Command
Ejecutar.ActiveConnection = ConectarCon
If HojaDeDatos = "" _
Then Ejecutar.CommandText = "SELECT * from `" &


RangoDeDatos & "`" _
Else Ejecutar.CommandText = "SELECT * from `" &


HojaDeDatos & "$" & RangoDeDatos & "`"
Set Registros = New ADODB.Recordset
Registros.Open Ejecutar, , adOpenKeyset,


adLockOptimistic
If Registros.RecordCount > 1 Or Registros.Fields.Count
1 _
Then MsgBox "Seleccionados..." & vbCr & _
Registros.Fields.Count & "


campos (columnas) de " & vbCr & _
Registros.RecordCount & "


registros (renglones)." _
Else MsgBox "Selección de UN registro unicamente."
Registros.MoveFirst
Do While Not Registros.EOF And Campo <=


Registros.Fields.Count - 1
For Campo = 0 To Registros.Fields.Count - 1
For Reg_n = 1 To Registros.RecordCount
MsgBox "En el campo " & Campo + 1 & " {" &


Registros.Fields(Campo).Name & "}" & vbCr & _
"Valor del registro " & Reg_n


& ": " & Registros.Fields(Campo).Value
Registros.MoveNext
Next: Registros.MoveFirst: Next: Loop:


ConectarCon.Close
Set ConectarCon = Nothing: Set Registros = Nothing:


Set Ejecutar = Nothing
End Function

==> segundo paso, 'como llamarla'
==> tiene dos 'formas' [seleccionas la que necesites en


el cuadro de mensaje]:
==> usando el nombre de la hoja y el rango de datos, o


solo una referencia a un rango con nombre ...
Sub ExtraerVariosDatos()
Dim Forma As VbMsgBoxResult
Forma = MsgBox("Selecciona la forma de consulta al


archivo externo..." & vbCr & _
" SI = Usar Hoja


y Rango de celdas" & vbCr & _
" NO = Usar


Nombres (en rangos)", _
vbYesNo + vbQuestion, "Forma


de consulta")
If Forma = vbYes _
Then TomarDatosDeArchivoCerrado "C:\Mis


documentos\Pruebas.xls", "Hoja3", "a21:c25", False _
Else TomarDatosDeArchivoCerrado "C:\Mis


documentos\Pruebas.xls", "", "NombreRango", False
End Sub

en esta segunda opcion, el primer MsgBox 'te dice'


cuantas columnas y renglones tiene el rango ['de algo
servira']
y el segundo MsgBox 'te dice' los valores que contiene


cada celda en el rango [puedes cambiar los MsgBox
por ... ??? ]

.

Respuesta Responder a este mensaje
#5 Henry Sanchez
28/04/2004 - 02:04 | Informe spam
Gracias por tu ayuda Hector,

creo que me quedo con la opcion No 1 para evitar eso de
establecer referencias y demas.

Le voy a sacar mucho provecho a la funcion.

Nota:
Tienes una base de datos con las consultas que llegan al
grupo? solo asi se explica que recuerdes consultas de
hace mas de un año.

Saludos,

Henry
hola, Henry !

... leer ... un rango de un libro ... cerrado ...




depende del No de lineas ... que por lo general es
variable [...]
... usar ADO o DAO ... si como me temo, debo instalar




algo adicional, el asunto se complica
... mis aplicaciones funcionan en muchos computadores




de ... mis clientes
... algunas veces ... algunos computadores no




encuentran el control ... correspondiente, y [...]
... trato de ceñirme siempre a los controles y




tecnicas basicas [...]

para este tipo de 'requerimientos' ['recomiendan'] usar


ADO [ActiveX Data Objects] 'que' DAO [Data Access Objects]
'pero'... [efectivamente] =>se requiere<= esteblecer una


referencia [en el proyecto de macros] ...
a la biblioteca de objetos =>Microsoft ActiveX Data


Objects x.x Library<= 'x.x' corresponde a la
version 'instalada'
[ademas] si el proyecto sera ejecutado en diferentes


pc's... es =>recomendable<= 'programar' EN la
version 'mas baja'
[y aunque tambien tiene sus 'visicitudes']...


si 'desconoces' la dimension del rango [mientras
el 'otro' libro esta cerrado]
[me parece que] es [quizas] =>la unica<= opcion 'viable'


para 'rescatar' [bloques de] datos de un libro
=>SIN 'abrirlo'<>
otra alternativa seria 'tomar' UNA A UNA [cada vez] las


referencias 'conocidas' en el libro cerrado
esto lo puedes hacer con una [¿simple?] instruccion


usando el metodo 'ExecuteExcel4Macro'
=> NO requiere 'aditamentos', pero... seria


una 'llamada' por cada celda del rango hasta que
<= :((

te adjunto un ejemplo de 'ExcecuteExcel4Macro' y otro


usando ADO ;)
saludos,
hector.
_______
opcion 1: tomar datos desde un libro cerrado (UNA


REFERENCIA A LA VEZ con el metodo ExecuteExcel4Macro)
==> primer paso, una funcion [es una manera


muy 'versatil'] ...
Function ExtraerDeArchivo( _
ByVal DelDirectorio As String, _
ByVal DelArchivo As String, _
ByVal DeLaHoja As String, _
ByVal DeLaReferencia As String)
Dim TomarDe As String
If Right(DelDirectorio, 1) <> "\" Then DelDirectorio =


DelDirectorio & "\"
TomarDe = "'" & DelDirectorio & "[" & DelArchivo & "]"


& DeLaHoja & "'!" & _
Range(DeLaReferencia).Range


("a1").Address(, , xlR1C1)
ExtraerDeArchivo = ExecuteExcel4Macro(TomarDe)
End Function

==> segundo paso, 'como llamarla' ...
Sub ExtraerUnDato()
Dim Ruta As String, Archivo As String, Hoja As String,


Referencia As String, Mensaje as String
Ruta = "C:\Mis documentos": Archivo = "Pruebas.xls":


Hoja = "Hoja3": Referencia = "b25"
Mensaje = " Directorio: " & Ruta & vbCr & _
" Archivo: " & Archivo & vbCr & _
" Hoja: " & Hoja & vbCr & _
"Referencia: " & UCase(Referencia) &


vbCr & _
"Lectura de la referencia al libro NO


ABIERTO:"
MsgBox Mensaje & vbCr & ExtraerDeArchivo(Ruta,


Archivo, Hoja, Referencia)
End Sub
_______
opcion 2: tomar datos desde un libro cerrado [una o


varias celdas a la vez, usando ADO]
==> MUY IMPORTANTE: deberas establecer una referencia en


el proyecto VBA [herramientas / referencias...]
a la biblioteca de objetos ==> Microsoft ActiveX


Data Objects x.x Library
==> primer paso, la funcion ...
Function TomarDatosDeArchivoCerrado( _
ByVal ArchivoDeOrigen As String, _
ByVal HojaDeDatos As String, _
ByVal RangoDeDatos As String, _
ByVal Títulos As Boolean)
Dim ConectarCon As ADODB.Connection, Ejecutar As


ADODB.Command, HDR As String, _
Registros As ADODB.Recordset, Reg_n As Integer,


Campo As Integer
Set ConectarCon = New ADODB.Connection
If Títulos = True Then HDR = "Yes" Else HDR = "No"
ConectarCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &


_
"Data Source=" &


ArchivoDeOrigen & ";" & _
"Extended


Properties=""Excel 8.0;" & _
"IMEX=1;" & _
"HDR=" & HDR & ";"";"
Set Ejecutar = New ADODB.Command
Ejecutar.ActiveConnection = ConectarCon
If HojaDeDatos = "" _
Then Ejecutar.CommandText = "SELECT * from `" &


RangoDeDatos & "`" _
Else Ejecutar.CommandText = "SELECT * from `" &


HojaDeDatos & "$" & RangoDeDatos & "`"
Set Registros = New ADODB.Recordset
Registros.Open Ejecutar, , adOpenKeyset,


adLockOptimistic
If Registros.RecordCount > 1 Or Registros.Fields.Count
1 _
Then MsgBox "Seleccionados..." & vbCr & _
Registros.Fields.Count & "


campos (columnas) de " & vbCr & _
Registros.RecordCount & "


registros (renglones)." _
Else MsgBox "Selección de UN registro unicamente."
Registros.MoveFirst
Do While Not Registros.EOF And Campo <=


Registros.Fields.Count - 1
For Campo = 0 To Registros.Fields.Count - 1
For Reg_n = 1 To Registros.RecordCount
MsgBox "En el campo " & Campo + 1 & " {" &


Registros.Fields(Campo).Name & "}" & vbCr & _
"Valor del registro " & Reg_n


& ": " & Registros.Fields(Campo).Value
Registros.MoveNext
Next: Registros.MoveFirst: Next: Loop:


ConectarCon.Close
Set ConectarCon = Nothing: Set Registros = Nothing:


Set Ejecutar = Nothing
End Function

==> segundo paso, 'como llamarla'
==> tiene dos 'formas' [seleccionas la que necesites en


el cuadro de mensaje]:
==> usando el nombre de la hoja y el rango de datos, o


solo una referencia a un rango con nombre ...
Sub ExtraerVariosDatos()
Dim Forma As VbMsgBoxResult
Forma = MsgBox("Selecciona la forma de consulta al


archivo externo..." & vbCr & _
" SI = Usar Hoja


y Rango de celdas" & vbCr & _
" NO = Usar


Nombres (en rangos)", _
vbYesNo + vbQuestion, "Forma


de consulta")
If Forma = vbYes _
Then TomarDatosDeArchivoCerrado "C:\Mis


documentos\Pruebas.xls", "Hoja3", "a21:c25", False _
Else TomarDatosDeArchivoCerrado "C:\Mis


documentos\Pruebas.xls", "", "NombreRango", False
End Sub

en esta segunda opcion, el primer MsgBox 'te dice'


cuantas columnas y renglones tiene el rango ['de algo
servira']
y el segundo MsgBox 'te dice' los valores que contiene


cada celda en el rango [puedes cambiar los MsgBox
por ... ??? ]

.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida