ayuda con crear directorios (TreeView)

16/07/2007 - 21:12 por daniel | Informe spam
Hola a todos
se puede hacer lo siguiente
dentro de un userform poner 1 TreeView llamado(TreeView1) 1 listbox
(ListBox1) 1 textbox (textbox1) 1 label (label1)
en el Tree View que aparezca el listado de carpetas y sub carpetas de la si
guiente ruta (C:\Documents and Settings\DANIEL\Mis
documentos\programdmgegt)
es decir que en piece a nombrar las carpetas apartir de esa no desde C:\.
1) que cuando se pinche en en una de las carpetas del Tree View en el
listbox1 muestre los archivos que tiene esa carpeta
2) si se puede poner que ciertos archivos con ciertas extensiones no se
puedan visualizar
en el textbox que aparezca la ruta de la carpeta y en el label la ruta
completa `del archivo al pulsar en el listbox1.



espero haber me espresado bien

un saludo y muchas gracias
Daniel

Preguntas similare

Leer las respuestas

#6 daniel
23/07/2007 - 19:54 | Informe spam
Hola Hector Miguel
si con eso funciona bien le copiaria mal el ejemplo.
se puede hacer que al seleccionar una carpeta muestre en el label1 la ruta
entera de esta.
y que en un listbox los archivos que hay dentro de esta carpeta y en el
listbox al selecionar un archivo muestre la ruta completa en el label2.
se puede hacer para que no muestre ciertos archivos con las extensiones
ejemplo(.dmg , .dmgtxt ,)
esto de las extensiones si es posible que esten puestas en una columa las
extensiones que so se puedan ver me refiero.


un saludo y muchisimas gracias
Daniel
"Héctor Miguel" escribió en el mensaje
news:%
hola, daniel !

si yo creo que es por que no tengo copiado el codigo me podias decir cual
es.
me da el siguiente error:
error de copilacion no se ha definido sub o funcion [...]



no me queda claro si copiaste todo el codigo de la exposicion en la
conversacion sugerida -?-
por si las dudas... el siguiente es el ejemplo completo:

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

' == inicio del codigo =>
' keepITcool
' Option Explicit
Private Sub tvPopulate(sPath As String)
Dim fso As FileSystemObject
Dim fld As Folder
Set fso = New Scripting.FileSystemObject
If fso.FolderExists(sPath) Then
TreeView1.Nodes.Clear
Set fld = fso.GetFolder(sPath)
Call GetFiles(fld)
Else
MsgBox "The folder path " & sPath & "does not exist"
End If
End Sub
Private Sub GetFiles(fld As Folder, Optional par As Folder = Null)
Dim kid As Folder
Dim fil As File
Dim nod As Node
On Error Resume Next
If par Is Nothing Then
Set nod = TreeView1.Nodes.Add(, , fld.Name, fld.Name)
nod.Expanded = True
Else
TreeView1.Nodes.Add par.Name, tvwChild, fld.Name, fld.Name
End If
Application.StatusBar = "Filling nodes for " & fld.Path
For Each kid In fld.SubFolders
Call GetFiles(kid, fld)
Next
For Each fil In fld.Files
If fil.Name Like "*xls" Then
TreeView1.Nodes.Add fld.Name, tvwChild, fil.Path, fil.Name
End If
Next
End Sub
Private Sub TreeView1_Click()
MsgBox TreeView1.SelectedItem
End Sub
Private Sub UserForm_activate()
Call tvPopulate("D:\my documents")
Application.StatusBar = ""
End Sub
Private Sub UserForm_Initialize()
With TreeView1
.Appearance = cc3D
.Indentation = 12
End With
End Sub

Respuesta Responder a este mensaje
#7 Héctor Miguel
23/07/2007 - 23:13 | Informe spam
hola, daniel !

se puede hacer que al seleccionar una carpeta muestre en el label1 la ruta entera de esta.
y que en un listbox los archivos que hay dentro de esta carpeta
y en el listbox al selecionar un archivo muestre la ruta completa en el label2.
se puede hacer para que no muestre ciertos archivos con las extensiones ejemplo(.dmg , .dmgtxt ,)
esto de las extensiones si es posible que esten puestas en una columa las extensiones que so se puedan ver me refiero.



1) con respecto de las EXTensiones que no quieres que se muestren, y dado que el ejemplo SOLO muestra *xls -?-
seria bueno si comentas alguna adaptacion que ya le hubiera efectuado al codigo ;)
-> revisa la instruccion en el procedimiento GetFiles donde dice:
-> If fil.Name Like "*.xls" Then ListBox1.AddItem fil.Name

2) con relacion a *separar* los archivos del TreeView y pasarlos a un control de lista...
solo necesitas modificar el procedimiento Private Sub GetFiles(...
[de preferencia, lo he separado a GetFolders para el llenado del TreeView y GetFiles para el llenado del Lixtbox]
y... he agregado una constante para el directorio *base* <= OJO
habria que hacer alguna preparacion por si esta base pudiera ser alguna *raiz* [p.e. C:\] -?-

corre algunas pruebas y... si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

' keepITcool
' mod = hmod
' Option Explicit
Private Const Base As String = "c:\documents and settings\hmod\" '<= modifica esta *base*
Private Sub tvPopulate(sPath As String)
Dim fso As FileSystemObject, fld As Folder
Set fso = New Scripting.FileSystemObject
If fso.FolderExists(sPath) Then
TreeView1.Nodes.Clear
Set fld = fso.GetFolder(sPath)
Call GetFolders(fld)
TreeView1.Nodes(1).Selected = True
Else: MsgBox "The folder path " & sPath & "does not exist"
End If
End Sub
Private Sub GetFolders(fld As Folder, Optional par As Folder = Null)
Dim kid As Folder, nod As Node
On Error Resume Next
If par Is Nothing Then
Set nod = TreeView1.Nodes.Add(, , fld.Name, fld.Name)
nod.Expanded = True
Else: TreeView1.Nodes.Add par.Name, tvwChild, fld.Name, fld.Name
End If
Application.StatusBar = "Filling nodes for " & fld.Path
For Each kid In fld.SubFolders
Call GetFolders(kid, fld)
Next
End Sub
Private Sub GetFiles(sPath As String)
Dim fso As FileSystemObject, fld As Folder, fil As File
Set fso = New Scripting.FileSystemObject
Set fld = fso.GetFolder(sPath)
ListBox1.Clear
For Each fil In fld.Files
If fil.Name Like "*.xls" Then ListBox1.AddItem fil.Name
Next
End Sub
Private Sub TreeView1_Click()
Call GetFiles(Base & TreeView1.SelectedItem.FullPath)
Label1 = Base & TreeView1.SelectedItem.FullPath
Label2 = ""
End Sub
Private Sub ListBox1_Click()
Label2 = Label1 & "\" & ListBox1.Text
End Sub
Private Sub UserForm_activate()
Call tvPopulate(Base & "mis documentos") ' aqui se *complementa* la base <= OJO
Application.StatusBar = ""
End Sub
Private Sub UserForm_Initialize()
Label1 = ""
Label2 = ""
With TreeView1
.Appearance = cc3D
.Indentation = 12
End With
End Sub
Respuesta Responder a este mensaje
#8 daniel
24/07/2007 - 19:05 | Informe spam
Hola Hector Miguel
Muchisimas gracias era lo que queria
intentare modificar yo lo de las extensiones y si no te pido ayuda

un saludo y muchisimas gracias
Daniel
"Héctor Miguel" escribió en el mensaje
news:O$
hola, daniel !

se puede hacer que al seleccionar una carpeta muestre en el label1 la
ruta entera de esta.
y que en un listbox los archivos que hay dentro de esta carpeta
y en el listbox al selecionar un archivo muestre la ruta completa en el
label2.
se puede hacer para que no muestre ciertos archivos con las extensiones
ejemplo(.dmg , .dmgtxt ,)
esto de las extensiones si es posible que esten puestas en una columa las
extensiones que so se puedan ver me refiero.



1) con respecto de las EXTensiones que no quieres que se muestren, y dado
que el ejemplo SOLO muestra *xls -?-
seria bueno si comentas alguna adaptacion que ya le hubiera efectuado
al codigo ;)
-> revisa la instruccion en el procedimiento GetFiles donde dice:
-> If fil.Name Like "*.xls" Then ListBox1.AddItem fil.Name

2) con relacion a *separar* los archivos del TreeView y pasarlos a un
control de lista...
solo necesitas modificar el procedimiento Private Sub GetFiles(...
[de preferencia, lo he separado a GetFolders para el llenado del
TreeView y GetFiles para el llenado del Lixtbox]
y... he agregado una constante para el directorio *base* <= OJO
habria que hacer alguna preparacion por si esta base pudiera ser alguna
*raiz* [p.e. C:\] -?-

corre algunas pruebas y... si cualquier duda [o informacion adicional]...
comentas ?
saludos,
hector.

' keepITcool
' mod = hmod
' Option Explicit
Private Const Base As String = "c:\documents and settings\hmod\" '<=
modifica esta *base*
Private Sub tvPopulate(sPath As String)
Dim fso As FileSystemObject, fld As Folder
Set fso = New Scripting.FileSystemObject
If fso.FolderExists(sPath) Then
TreeView1.Nodes.Clear
Set fld = fso.GetFolder(sPath)
Call GetFolders(fld)
TreeView1.Nodes(1).Selected = True
Else: MsgBox "The folder path " & sPath & "does not exist"
End If
End Sub
Private Sub GetFolders(fld As Folder, Optional par As Folder = Null)
Dim kid As Folder, nod As Node
On Error Resume Next
If par Is Nothing Then
Set nod = TreeView1.Nodes.Add(, , fld.Name, fld.Name)
nod.Expanded = True
Else: TreeView1.Nodes.Add par.Name, tvwChild, fld.Name, fld.Name
End If
Application.StatusBar = "Filling nodes for " & fld.Path
For Each kid In fld.SubFolders
Call GetFolders(kid, fld)
Next
End Sub
Private Sub GetFiles(sPath As String)
Dim fso As FileSystemObject, fld As Folder, fil As File
Set fso = New Scripting.FileSystemObject
Set fld = fso.GetFolder(sPath)
ListBox1.Clear
For Each fil In fld.Files
If fil.Name Like "*.xls" Then ListBox1.AddItem fil.Name
Next
End Sub
Private Sub TreeView1_Click()
Call GetFiles(Base & TreeView1.SelectedItem.FullPath)
Label1 = Base & TreeView1.SelectedItem.FullPath
Label2 = ""
End Sub
Private Sub ListBox1_Click()
Label2 = Label1 & "\" & ListBox1.Text
End Sub
Private Sub UserForm_activate()
Call tvPopulate(Base & "mis documentos") ' aqui se *complementa* la base
<= OJO
Application.StatusBar = ""
End Sub
Private Sub UserForm_Initialize()
Label1 = ""
Label2 = ""
With TreeView1
.Appearance = cc3D
.Indentation = 12
End With
End Sub

Respuesta Responder a este mensaje
#9 daniel
28/07/2007 - 17:38 | Informe spam
Hola Hector Miguel
1) No consegui solucionar lo de que las extensiones que estan en la columna
C no se muestren en el listbox1.
sabes como se haria.
2) cuando haces click en el treeview y luego haces otro click para editar el
nombre se podria hacer que al cambiar el nombre de la carpeta en el treeview
esta se cambie automaticamente.
3) se puede hacer que arrastrando un archivo del listbox al treeview se
copie en donde lo e arratrado. (como pasa con el explorador de windows).


un saludo y muchas gracias
Daniel
"daniel" escribió en el mensaje
news:%23gwP$
Hola Hector Miguel
Muchisimas gracias era lo que queria
intentare modificar yo lo de las extensiones y si no te pido ayuda

un saludo y muchisimas gracias
Daniel
"Héctor Miguel" escribió en el mensaje
news:O$
hola, daniel !

se puede hacer que al seleccionar una carpeta muestre en el label1 la
ruta entera de esta.
y que en un listbox los archivos que hay dentro de esta carpeta
y en el listbox al selecionar un archivo muestre la ruta completa en el
label2.
se puede hacer para que no muestre ciertos archivos con las extensiones
ejemplo(.dmg , .dmgtxt ,)
esto de las extensiones si es posible que esten puestas en una columa
las extensiones que so se puedan ver me refiero.



1) con respecto de las EXTensiones que no quieres que se muestren, y dado
que el ejemplo SOLO muestra *xls -?-
seria bueno si comentas alguna adaptacion que ya le hubiera efectuado
al codigo ;)
-> revisa la instruccion en el procedimiento GetFiles donde dice:
-> If fil.Name Like "*.xls" Then ListBox1.AddItem fil.Name

2) con relacion a *separar* los archivos del TreeView y pasarlos a un
control de lista...
solo necesitas modificar el procedimiento Private Sub GetFiles(...
[de preferencia, lo he separado a GetFolders para el llenado del
TreeView y GetFiles para el llenado del Lixtbox]
y... he agregado una constante para el directorio *base* <= OJO
habria que hacer alguna preparacion por si esta base pudiera ser
alguna *raiz* [p.e. C:\] -?-

corre algunas pruebas y... si cualquier duda [o informacion adicional]...
comentas ?
saludos,
hector.

' keepITcool
' mod = hmod
' Option Explicit
Private Const Base As String = "c:\documents and settings\hmod\" '<=
modifica esta *base*
Private Sub tvPopulate(sPath As String)
Dim fso As FileSystemObject, fld As Folder
Set fso = New Scripting.FileSystemObject
If fso.FolderExists(sPath) Then
TreeView1.Nodes.Clear
Set fld = fso.GetFolder(sPath)
Call GetFolders(fld)
TreeView1.Nodes(1).Selected = True
Else: MsgBox "The folder path " & sPath & "does not exist"
End If
End Sub
Private Sub GetFolders(fld As Folder, Optional par As Folder = Null)
Dim kid As Folder, nod As Node
On Error Resume Next
If par Is Nothing Then
Set nod = TreeView1.Nodes.Add(, , fld.Name, fld.Name)
nod.Expanded = True
Else: TreeView1.Nodes.Add par.Name, tvwChild, fld.Name, fld.Name
End If
Application.StatusBar = "Filling nodes for " & fld.Path
For Each kid In fld.SubFolders
Call GetFolders(kid, fld)
Next
End Sub
Private Sub GetFiles(sPath As String)
Dim fso As FileSystemObject, fld As Folder, fil As File
Set fso = New Scripting.FileSystemObject
Set fld = fso.GetFolder(sPath)
ListBox1.Clear
For Each fil In fld.Files
If fil.Name Like "*.xls" Then ListBox1.AddItem fil.Name
Next
End Sub
Private Sub TreeView1_Click()
Call GetFiles(Base & TreeView1.SelectedItem.FullPath)
Label1 = Base & TreeView1.SelectedItem.FullPath
Label2 = ""
End Sub
Private Sub ListBox1_Click()
Label2 = Label1 & "\" & ListBox1.Text
End Sub
Private Sub UserForm_activate()
Call tvPopulate(Base & "mis documentos") ' aqui se *complementa* la base
<= OJO
Application.StatusBar = ""
End Sub
Private Sub UserForm_Initialize()
Label1 = ""
Label2 = ""
With TreeView1
.Appearance = cc3D
.Indentation = 12
End With
End Sub





Respuesta Responder a este mensaje
#10 Héctor Miguel
30/07/2007 - 07:33 | Informe spam
hola, daniel !

1) No consegui solucionar lo de que las extensiones que estan en la columna C no se muestren en el listbox1.
sabes como se haria.

2) cuando haces click en el treeview y luego haces otro click para editar el nombre se podria hacer
que al cambiar el nombre de la carpeta en el treeview esta se cambie automaticamente.
3) se puede hacer que arrastrando un archivo del listbox al treeview se copie en donde lo e arratrado.
(como pasa con el explorador de windows).



1) no me queda claro si has hecho modificaciones a los codigos que se han visto/comentado/propuesto/... en este hilo -?-
si [aparentemente] el que estas usando manda al control de lista todo tipo de archivos de cada carpeta *registrada* en el treeview...
[insisto en que] convendria si lo comentas/expones [en caso de existir], ya que los codigos [vistos hasta ahora]...
-> SOLAMENTE *pasan* al control de lista... los archivos que contienen en el nombre: -> *.xls*
-> revisa la instruccion en el procedimiento GetFiles donde dice:
-> If fil.Name Like "*.xls" Then ListBox1.AddItem fil.Name







2 y 3) estos *requerimientos* nuevos/complementarios/adicionales/... [como que]
me dan la impresion de que seria mejor *mostrar* el explorador de windows [o algo mas *asemejado*] que un control treeview -?-

-> para 'mover/copiar' archivos de una ubicacion a otra, puedes usar al menos dos formas:
[aparte de que habria que *encuadrarlas* en los eventos de los controles treeview y listbox]

1) una instruccion =>Name "Origen" As "Destino"< -> "Origen" y "Destino" son [una cadena de texto que 'representa'] directorio/s + nombre_archivo + EXT[ension]

a) para renombrar un archivo [mismo directorio] ... los 'requisitos' son ...
(1) que "Origen" EXISTA [y este cerrado] y...
(2) que "Destino" NO EXISTA
[p.e.] Name "C:\Misma ruta\Archivo1.abc" As "C:\Misma ruta\Archivo2.xyz"

b) si "Origen" y "Destino" son 'diferentes'... la instruccion [practicamente] 'hara lo mismo que...'

2) una instruccion =>FileCopy "Origen", "Destino"< -> en este caso, "Destino" sera INVARIABLEMENTE 'reemplazado' <= OJO

puedes consultar en la ayuda de vba el uso de 'FileCopy' y 'Name'

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida