Jump to content
cottavi

Como diferenciar en una cadena de texto, si esta contiene el nombre de un archivo o la ruta de un directorio

Recommended Posts

Saludos al foro.

Antes que nada, deseo dar las gracias a Elsa Matilde de quien me tomado mucho del código que verán a continuación.

Mi problema se refiere a como diferenciar en una cadena de texto, si esta contiene el nombre de un archivo o es simplemente la ruta de un directorio.

Para ello, en el evento Click del ComboBox 1 del archivo anexo, se me ocurre utilizar alguna función para detectar el carácter "." contenido dentro de una cadena de texto asignado a una variable.

Aquí se presentan dos opciones:

OPCIÓN 1
Si el carácter "." no existe dentro de la variable, indica que tenemos la ruta de un directorio, por ejemplo:

C:\Users\Usuario\Downloads\CalVarVB6N-foro\Aca-Autocad\

En este caso, regresamos al UserForm1, cargamos el ComboBox1 desde esta ultima ruta.

OPCIÓN 2
Si el carácter "." existe dentro de la variable (por ejemplo: C:\Users\Usuario\Downloads\CalVarVB6N-foro\Aca-Autocad\AplicacionesCad\Lisp\ACAD.LSP), entonces estamos frente al nombre de un archivo y llamamos directamente a la sub rutina que lo abre. 

Como verán en el códigoo anexo, solo tengo: un UserForm1, un Botón para salir y un ComboBox1 donde realizo la selección de archivos o carpetas.

Agradeciendo de antemano su apoyo, a continuación el código:

'declaración de variables
Public strArchivos As String

Public strNombreCarpeta As String

Public ruta As String

Public archivo As String

'rutina aunto_open

Sub AUTO_OPEN()

Load UserForm1

UserForm1.Show

End Sub

Sub abrir(archivo As String)

'con esta sub rutina se abre cualquier sub directorio o archivo seleccionado
'sin importar su extensión.
'esta rutina me ha dado excelentes resultados porque no requiero saber la dirección del
'ejecutable de cada aplicación en cada ordenador donde este trabajando.

'esta rutina no es de mi autoría, vino como valor añadido en un código que bajé alguna vez.

ShellExecute Application.hwnd, "Open", archivo, _
vbNullString, _
vbNullString, _
SW_SHOWNORMAL

End Sub

Private Sub ComboBox1_Click()

'aqui añadimos la variable strNombreCarpeta lo seleccionado en el ComboBox1

strNombreCarpeta = ruta & ComboBox1.Text
archivo = ComboBox1.Text'para diferenciar si dentro de la variable strNombreCarpeta

'hay un archivo o una carpeta, se me ha ocurrido utilizar alguna función
'para detectar el carácter ".", se se presentan dos opciones:

'OPCION 1
'si el carácter "." no existe dentro de strNombreCarpeta, indica que
'que tenemos en strNombreCarpeta la ruta de un directorio, por ejemplo:
'C:\Users\Usuario\Downloads\CalVarVB6N-foro\Aca-Autocad\
'en este caso, regresamos al UserForm1 y se inicia de nuevo el proceso desde
'la ruta C:\Users\Usuario\Downloads\CalVarVB6N-foro\Aca-Autocad\

'Por favor, ayúdenme con este código u otro que sea más conveniente.

'OPCION 2
'si el carácter "." existe dentro de strNombreCarpeta, por ejemplo:

'C:\Users\Usuario\Downloads\CalVarVB6N-foro\Aca-Autocad\AplicacionesCad\Lisp\ACAD.LSP

'se llama directamente a la sub rutina abrir.

Call abrir(archivo)

End Sub

Private Sub CommandButton1_Click()

Unload Me

End Sub

Private Sub UserForm_Activate()

'por Elsamatilde en:

'http://www.todoexpertos.com/categorias/tecnologia-e-internet/software-y-aplicaciones/microsoft-excel/respuestas/onu9ao4jz3afw/combobox-con-listado-de-carpetas

'carpeta donde se hará la búsqueda inicial
strNombreCarpeta = "C:\Users\Usuario\Downloads\CalVarVB6N-foro\"
'guardamos la ruta inicial para luego pegarle el directorio (o el nombre del archivo)
'seleccionado en el combobox1

ruta = strNombreCarpeta
'limpiamos el combobox1
ComboBox1.Clear

'pasamos al directorio elegido
On Error Resume Next
ChDir strNombreCarpeta
On Error GoTo 0

'recorremos la carpeta buscando sub carpetas y archivos

strArchivos = Dir(strNombreCarpeta, 16)

'recorremos los archivos de la carpeta

Do While strArchivos <> ""

ComboBox1.AddItem strArchivos

'obtenemos la siguiente entrada

strArchivos = Dir()
Loop

Exit Sub

End Sub

sincarpeta:

MsgBox "La carpeta seleccionada está vacia" & strNombreCarpeta, , "ERROR"
Unload Me

End Sub

 

Share this post


Link to post
Share on other sites

Gracias ikanni por tu aporte.

Lo que se muestra en el List1 es efectivamente la ruta de cada sub carpeta y archivo, pero desafortunadamente es lo que he estado evitando porque es muy difícil de leer.

Saludos.

 

Share this post


Link to post
Share on other sites

por dar una idea, puedes utilizar la función "right"

If Right(ruta, 3) <> "jpg"

Esto comprueba si los 3 últimos dígitos de la variable "ruta" es distinto de jpg.En tu caso podría ser:

If Right(ruta, 4) <> "." & "*"

O busca tu condición buena

Share this post


Link to post
Share on other sites

Hola cottavi,

Veo que no te has fijado bien.... En el lsit1 te lista carpetas y subcarpetas, NO archivos.

SI elijes una carpeta del list1, te desplegará en el combobox todos los archivos dentro de la carpeta/subacrpeta elejida.

Luego con elejir un archivo del combobox, te lo abrirá, independientemente de la extensión.

Hace 16 horas, cottavi dijo:

... pero desafortunadamente es lo que he estado evitando porque es muy difícil de leer.

Saludos.

 

Estas pidiendo que te ayuden con un código que detecte el punto(.), para saber si es un archivo o un a carpeta.... ¿ Y eso es mas fácil de leer? Tener desplegados en un combo carpetas, subcarpetas y archivos, de entrada para mi sería mucho mas dificil de leer. por que si elijes un archivo, bien pero si elijes una subcarpeta. Entonces el combo se deberia de recargar para mostrarte las subacarpetas( si las hubiese) y los archivos de la nueva selección.... Y ademas deberias poder subir de nivel, por si te has equivocado al elegir la carpeta. En el fondo lo que pides es que el combo funcione como el explorador de archivos. No se a mi me parece mas lioso.

Con todo, aqui te dejo el procedimiento que hace lo que has pedido, sobre que te detecte el punto...
Cambia tu procedimiento ComboBox1_Click por este

Private Sub ComboBox1_Click()
   archivo = ruta & ComboBox1.Text
   comienza = Len(archivo) - 4
   TestPos = InStr(comienza, archivo, ".", 1)
   If Not TestPos = 0 Then
      abrir archivo
   Else
      MsgBox "No es un archivo, es una carpeta :-)"
   End If

End Sub

 Si en el fondo lo que quieres es que el combo funcione como un explorador de archivos, Si tengo tiempo lo preparo;)

Saludos

Ikanni

Share this post


Link to post
Share on other sites

Hola de nuevo,

Bueno estaba mas fácil de lo que parecía...

Mira el adjunto...En el combo puedes elegir carpeta o archivo. Si es archivo lo abrirá y si es carpeta se actualizara el combo con esa carpeta y te volverá a mostrar las carpeta ( si las hubiese ) y los archivos.

Que quieres subir de nivel.. Le clickeas a "." o bien ".." del combo y te subira un nivel.

Saludos

Ikanni

ComboBox con listado de carpetas-rev5_IK.xlsm

Share this post


Link to post
Share on other sites

Gracias ikanni

Justo lo que buscaba.

Ahora me toda a mi colocar algunos botones como:

  1. Ir al inicio
  2. Regresar al anterior
  3. Cargar imágenes ramdom en un control image

Pero hace justo lo que deseaba.

Por mi parte el problema esta resuelto.

Gracias de nuevo.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png