Crear directorios desde VBA

03/05/2005 - 11:12 por Rantamplan | Informe spam
Buenas foro,
tengo en una hoja un boton con un codigo asociado que se supone al pulsar
sobre el boton comprueba si existe un directorio llamado 2005 y si no
existe lo crea. Si existe, comprueba que dentro de el exista otro
subdirectorio con el mes actual y si no existe, tambien lo crea.
El caso es que no me funciona, me falla en el momento de crear el
directorio correspondiente al año (Error 76, no se ha encontrado la ruta
de acceso). El caso es que este mismo codigo lo tengo funcionando en un
excel97 y funciona, pero en un excel 2003 no soy capaz de hacerlo andar!.
¿Alguna sugerencia? ;-)

Private Sub CommandButton2_Click()
Dim anno_actual, mes_actual, ruta_mes, ruta_anno
Dim meses As Variant
Dim i As Integer, j As Integer

meses = Array("Enero", "Feberero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")


'Devuelve un entero del 1 al 12 asociado al mes actual
'1 - Enero ... 12 - Diciembre
mes_actual = DatePart("m", Date)
anno_actual = DatePart("yyyy", Date)

For i = 2005 To 2010
If i = anno_actual Then
MsgBox anno_actual
ruta_anno = "c:\Remoto\" + CStr(i)
MsgBox ruta_anno
If Dir(ruta_anno) = "" Then
MkDir ruta_anno
'End If
'Para los 12 meses del año
For j = 0 To 11
If j = mes_actual - 1 Then
MsgBox mes_actual
ruta_mes = ruta_anno + "\" + meses(j)
MsgBox ruta_mes
If Dir(ruta_mes) = "" Then
MkDir ruta_mes
End If
End If
Next j
End If
End If
Next i
End Sub


Gracias!
Salu2.
"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989

Preguntas similare

Leer las respuestas

#6 KL
03/05/2005 - 16:42 | Informe spam
...existe una solucion muy guapa para crear multiples neveles de carpetas
ofrecida por Dana Delouis aqui http://tinyurl.com/74sx9
pero funciona a partir del Office 2000 (por la funcion Split)

Saludos,
KL


"KL" wrote in message
news:OsJl71%
Hola Rantamplan,

A ver, vayamos por partes.


1) Lo que falla es esto:
ruta_anno = "c:\Remoto\" + CStr(i)
Esto es porque estas intentando crear 2 niveles a la vez. En el otro PC
donde te funciona lo mas probable es que ya existiera la carpeta c:\Remoto
con anterioridad. Y de paso la funcion CStr es redundante y no aporta
valor (vaya! tambien es redundante la segunda parte de esta frase)

2) No entiendo la finalidad de los bucles
For i 05 To 2010... Next i
y
For j=0 To 11... Next j
Si no has omitido nada en el codigo expuesto se puede prescindir
perfectamente de los bucles.

Prueba esto:

Private Sub CommandButton2_Click()
Dim anno_actual, mes_actual, ruta_mes, ruta_anno
Dim meses As Variant
Dim i As Integer, j As Integer

meses = Array("Enero", "Feberero", "Marzo", "Abril", _
"Mayo", "Junio", "Julio", "Agosto", "Septiembre", _
"Octubre", "Noviembre", "Diciembre")

Ruta = "c:\Remoto\"
ruta_anno = Ruta & DatePart("yyyy", Date)
ruta_mes = ruta_anno & "\" & meses(DatePart("m", Date))

MsgBox Ruta
If Dir(Ruta) = "" Then MkDir Ruta
MsgBox ruta_anno
If Dir(ruta_anno) = "" Then MkDir ruta_anno
MsgBox ruta_mes
If Dir(ruta_mes) = "" Then MkDir ruta_mes
End Sub






Saludos,
KL


"Rantamplan" wrote in message
news:
Buenas foro,
tengo en una hoja un boton con un codigo asociado que se supone al pulsar
sobre el boton comprueba si existe un directorio llamado 2005 y si no
existe lo crea. Si existe, comprueba que dentro de el exista otro
subdirectorio con el mes actual y si no existe, tambien lo crea.
El caso es que no me funciona, me falla en el momento de crear el
directorio correspondiente al año (Error 76, no se ha encontrado la ruta
de acceso). El caso es que este mismo codigo lo tengo funcionando en un
excel97 y funciona, pero en un excel 2003 no soy capaz de hacerlo andar!.
¿Alguna sugerencia? ;-)

Private Sub CommandButton2_Click()
Dim anno_actual, mes_actual, ruta_mes, ruta_anno
Dim meses As Variant
Dim i As Integer, j As Integer

meses = Array("Enero", "Feberero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")


'Devuelve un entero del 1 al 12 asociado al mes actual
'1 - Enero ... 12 - Diciembre
mes_actual = DatePart("m", Date)
anno_actual = DatePart("yyyy", Date)

For i = 2005 To 2010
If i = anno_actual Then
MsgBox anno_actual
ruta_anno = "c:\Remoto\" + CStr(i)
MsgBox ruta_anno
If Dir(ruta_anno) = "" Then
MkDir ruta_anno
'End If
'Para los 12 meses del año
For j = 0 To 11
If j = mes_actual - 1 Then
MsgBox mes_actual
ruta_mes = ruta_anno + "\" + meses(j)
MsgBox ruta_mes
If Dir(ruta_mes) = "" Then
MkDir ruta_mes
End If
End If
Next j
End If
End If
Next i
End Sub


Gracias!
Salu2.
"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989




Respuesta Responder a este mensaje
#7 Rantamplan
03/05/2005 - 16:53 | Informe spam
"KL" Escribió el día mar 03 may
2005 04:35:26p:

Hola Rantamplan,

A ver, vayamos por partes.


1) Lo que falla es esto:
ruta_anno = "c:\Remoto\" + CStr(i)
Esto es porque estas intentando crear 2 niveles a la vez. En el otro
PC donde te funciona lo mas probable es que ya existiera la carpeta
c:\Remoto con anterioridad. Y de paso la funcion CStr es redundante y
no aporta valor (vaya! tambien es redundante la segunda parte de esta
frase)



Fale, yo tenía pensado crear el año a partir de el directorio principal
('c:\Remoto') y con el contador 'i' (para eso utilizaba el bucle :-D)
añadirle el año correspondiente.

2) No entiendo la finalidad de los bucles
For i 05 To 2010... Next i
y
For j=0 To 11... Next j
Si no has omitido nada en el codigo expuesto se puede prescindir
perfectamente de los bucles.



Con el contador 'i' controlaba la creación del directorio para el año y
con el contador 'j' controlo la creación del directorio para el mes.
Tu has suprimido dichos bucles con las instrucciones de asignacion:

ruta_anno = Ruta & DatePart("yyyy", Date)
ruta_mes = ruta_anno & "\" & meses(DatePart("m", Date))



Ahorrandote el tener que ejecutar los dos bucles, por lo que como bien
comentas son totalmente innecesarios. (No sé porqué pero siempre me busco
el camino más dificil para llegar a buen puerto! ;-)



Prueba esto:

Private Sub CommandButton2_Click()
Dim anno_actual, mes_actual, ruta_mes, ruta_anno
Dim meses As Variant
Dim i As Integer, j As Integer

meses = Array("Enero", "Feberero", "Marzo", "Abril", _
"Mayo", "Junio", "Julio", "Agosto", "Septiembre", _
"Octubre", "Noviembre", "Diciembre")

Ruta = "c:\Remoto\"
ruta_anno = Ruta & DatePart("yyyy", Date)
ruta_mes = ruta_anno & "\" & meses(DatePart("m", Date))

MsgBox Ruta
If Dir(Ruta) = "" Then MkDir Ruta
MsgBox ruta_anno
If Dir(ruta_anno) = "" Then MkDir ruta_anno
MsgBox ruta_mes
If Dir(ruta_mes) = "" Then MkDir ruta_mes
End Sub






Saludos,
KL






Exacto! este codigo si que funciona como yo quiero ;-)

Gracias a todos por las respuestas, ahora me toca enlazarlo todo y hacer
las pruebas oportunas.

Salu2!.

"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989
Respuesta Responder a este mensaje
#8 Rantamplan
03/05/2005 - 17:46 | Informe spam
"KL" Escribió el día mar 03 may
2005 04:42:39p:

...existe una solucion muy guapa para crear multiples neveles de
carpetas ofrecida por Dana Delouis aqui http://tinyurl.com/74sx9
pero funciona a partir del Office 2000 (por la funcion Split)

Saludos,
KL




El codigo de la tal 'Dana' me da error ya que se vé que hace falta alguna
DLL instalada que yo no tengo (uso office 2003 prof. con Win2k SP4) y me
salta error de ActiveX.
De todas maneras ese código lo tengo guardado para futuras consutas ;-)

Respecto a tu codigo, he cambiado la asignacion de 'ruta_mes' por esta:
ruta_mes = ruta_anno & "\" & meses(DatePart("m", Date)-1)

ya que me creaba el mes de junio en vez del de mayo ;-)

Tambien he añadido 'On Error Resume Next' porque si volvía a ejecutar el
procedimiento, me detectaba que ya existía la carpeta y me saltaba un
error.

con estas dos pequeñas modificaciones el codigo quedaria tal que asi:

Private Sub CommandButton2_Click()

On Error Resume Next
Dim anno_actual, mes_actual, ruta_mes, ruta_anno
Dim meses As Variant
Dim i As Integer, j As Integer

meses = Array("Enero", "Febrero", "Marzo", "Abril", _
"Mayo", "Junio", "Julio", "Agosto", "Septiembre", _
"Octubre", "Noviembre", "Diciembre")

Ruta = "c:\Remoto\"
ruta_anno = Ruta & DatePart("yyyy", Date)
ruta_mes = ruta_anno & "\" & meses(DatePart("m", Date)-1)

MsgBox Ruta
If Dir(Ruta) = "" Then MkDir Ruta
MsgBox ruta_anno
If Dir(ruta_anno) = "" Then MkDir ruta_anno
MsgBox ruta_mes
If Dir(ruta_mes) = "" Then MkDir ruta_mes

End Sub


Salu2!.

"los videojuegos no tienen ninguna influencia sobre los niños.
Quiero decir, si el Pac-Man hubiese influenciado a nuestra generación,
estaríamos todos corriendo en salas oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida