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
 

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

Preguntas similares