Bueno, solo he mirado (de momento) el primer parrafo.
Contienes un grave error...
Aunque revisas que el usuario no haya elegido un path inaccesible, no revisas que haya cancelado.
Si cancela, txtPath.Text, Dialogo.FileName, txtSucia.Text y Dialogo.FileTitle quedan con valor "".
Se puede preguntar por si están vacíos, pero es más cómodo tratarlo como un error.
Te pongo ese párrafo para solucionar ese caso, cuando revises que a pesar de ello te siguiere dando error, pués se revisa el resto del código.
Por cierto, como dices que invocas un ejecutable, imagino que el control 'Commondialog' tiene filtrado para elegir solo ficheros ejecutables, no???. Que has establecido algún valor en las propiedades 'Filter'. Sino el usuario podría elegir cualquier cosa... he puesto un filter de ejemplo...
Contienes un grave error...
Aunque revisas que el usuario no haya elegido un path inaccesible, no revisas que haya cancelado.
Si cancela, txtPath.Text, Dialogo.FileName, txtSucia.Text y Dialogo.FileTitle quedan con valor "".
Se puede preguntar por si están vacíos, pero es más cómodo tratarlo como un error.
Te pongo ese párrafo para solucionar ese caso, cuando revises que a pesar de ello te siguiere dando error, pués se revisa el resto del código.
Código (VB) [Seleccionar]
Private Function SeleccionaFile() As Boolean
Dim cadenita
With Dialogo
.DialogTitle = "Elija un fichero ejecutable..."
.Filter = "Ejecutables (.exe .com .vbs)|*.exe;*.com;*.vbs|Exe (.exe)|*.exe|Com (.com )|*.com|VB Script (.vbs)|*.vbs" ' ...etc...
.CancelError = True
On Error GoTo Cancelado
.ShowOpen
txtPath.Text = .FileName
txtSucia.Text = .FileTitle
End With
cadenita = Len(txtPath.Text)
If cadenita > 255 Then
MsgBox "La ruta de este programa es demasiado lejana, debe seleccionar una ruta más corta de destino", vbCritical
txtPath.Text = ""
Exit Function
End If
SeleccionaFile = True
Exit Function
Cancelado:
If (Err.Number = 32755) Then
MsgBox "el usuario ha cancelado la eleccion de fichero..."
' hacer lo que corresponda a este caso... tipicamente no hacer nada al devolver.
Else
Call MsgBox("Ocurrio un error inesperado..." & CStr(Err.Number), , "Dialogo de seleccion de fichero") ' no se espera que esto suceda... pero si alguna vez ocurre, al reportar el mensaje, hay por donde indagar...
End If
End Function
' ... despues... en la llamada
if (SeleccionaFile = TRUE) then
'... se invoca lo que sea que haces...
else
' pero si devuelve false, es lo mismo que si el usuaro no hubiera realizado ninguna accion
end if
Por cierto, como dices que invocas un ejecutable, imagino que el control 'Commondialog' tiene filtrado para elegir solo ficheros ejecutables, no???. Que has establecido algún valor en las propiedades 'Filter'. Sino el usuario podría elegir cualquier cosa... he puesto un filter de ejemplo...