cancelar con GetOpenFilename

05/02/2007 - 03:34 por Ivan | Informe spam
hola de nuevo a todos

tengo una duda con la cancelación del cuadro de dialogo que aparece con el
método GetOpenFilename. Aunque se que devuelve false, cuando se establece
Multiselect a true he observado varias cosas/problemas que me han obligado a
saltarme los posibles errores como se ve en el siguiente fragmento de
código:->

Private Sub SeleccionarArchivos1()
Dim Arch, i As Long, f As Long, ul As Long
Arch = Application.GetOpenFilename( _
filefilter:="Excel Files (*.xls), *.xls", _
Title:="Elegir archivos", _
MultiSelect:=True)
On Error Resume Next
If Arch(1) = False Then Exit Sub
On Error GoTo 0

la duda esta en que a pesar de que al declararla como multiselect en teoría
devuelve una matriz, con 'If Arch(1)=false then ..., me da el error 'No
coinciden los tipos' si se cancela, y con if Arch=False no me lo da al
cancelar pero me lo da si acepto(Abrir). También he probado con 'If
IsEmpty(Arch) then' pero sin resultado.

Aunque supongo que no pasa nada por usar 'on error resume next' (parece
funcionar bien), me gustaría saber si existe otra forma especifica de tratar
la cancelación de GetOpenFilename

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
05/02/2007 - 05:57 | Informe spam
hola, Ivan 1

el metodo 'GetOpenFileName' con 'Multiselect' en 'True'... devuelve una matriz [asi se trate de solo un archivo seleccionado] ;)
o sea, puedes consultar/preguntar/confirmar/... si efectivamente tu variable se ha convertido en una matriz [o no] +/- asi:

If IsArray(Arch) Then
' aqui continuas con tus cciones 'normales' con uno o varios archivos seleccionados '
Else
MsgBox "Operacion cancelada !!!"
End If

OJO: una verificacion de si esta vacia: -> 'If IsEmpty(Arch) then' NO funciona :-(( puesto que:
a) al declararla: -> Dim Arch [efectivamente] -> se inicializa como 'Empty' [PERO]...
b) al cancelar el cuadro de dialogo... se convierte en 'False' [con lo cual, NO es 'Empty'... NI 'vacio' ("")...]
[simplemente]... NO es una matriz ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
... duda con la cancelacion del cuadro de dialogo... GetOpenFilename... cuando se establece Multiselect a true
... me han obligado a saltarme los posibles errores como se ve en el siguiente fragmento de codigo:->
Private Sub SeleccionarArchivos1()
Dim Arch, i As Long, f As Long, ul As Long
Arch = Application.GetOpenFilename( _
filefilter:="Excel Files (*.xls), *.xls", _
Title:="Elegir archivos", _
MultiSelect:=True)
On Error Resume Next
If Arch(1) = False Then Exit Sub
On Error GoTo 0

la duda esta en que a pesar de que al declararla como multiselect en teoria devuelve una matriz
con 'If Arch(1)=false then ..., me da el error 'No coinciden los tipos' si se cancela
y con if Arch=False no me lo da al cancelar pero me lo da si acepto(Abrir).
Tambien he probado con 'If IsEmpty(Arch) then' pero sin resultado.
Aunque supongo que no pasa nada por usar 'on error resume next' (parece funcionar bien)
me gustaria saber si existe otra forma especifica de tratar la cancelación de GetOpenFilename
Respuesta Responder a este mensaje
#2 Ivan
05/02/2007 - 17:50 | Informe spam
hola Hector Miguel, muchas gracias de nuevo

OJO: una verificación de si esta vacía: -> 'If IsEmpty(Arch) then' NO
funciona :-(( ..
...
b) al cancelar el cuadro de dialogo... se convierte en 'False'
[con lo cual, NO es 'Empty'... NI 'vacio' ("")...]
[simplemente]... NO es una matriz ;)



creo que esto es lo que me mareaba, y aunque parece lógico a posteriori, no
se me había ocurrido que al no seleccionar ningún elemento la matriz no
existe.

bueno, otra mas para la saca a tu costa. Muchas gracias

un saludo
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida