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

#1 Fernando Arroyo
03/05/2005 - 14:36 | Informe spam
Yo creo que el problema puede ser que no le estás diciendo a la función Dir que se trata de directorios, pero no sé el motivo de que el código te funcione en Excel 97 pero no en 2003. A mí el siguiente código me funciona en Excel 2003:

Sub prueba()
Dim n As Integer, i As Byte

For n = 2005 To 2010
If Dir("C:emoto\" & CStr(n), vbDirectory) = "" Then MkDir ("C:emoto\" & CStr(n))
For i = 1 To 12
If Dir("C:emoto\" & CStr(n) & "\" & Format(DateSerial(1, i, 1), "mmmm"), vbDirectory) = "" Then MkDir ("C:emoto\" & CStr(n) & "\" & Format(DateSerial(1, i, 1), "mmmm"))
Next i
Next n
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel



"Rantamplan" escribió en el mensaje 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
#2 Luis Garcia
03/05/2005 - 15:17 | Informe spam
Hola:

Para Rantamplan: has verificado que cuando lo pruebas en el EX2003,
existe la carpeta C:\Remoto?

En todos los casos, estais dando por supuesto que existe el directorio
C:\Remoto... si este no existe, no funcionara ni en EX97 ni en EX2003.


Saludos

"Fernando Arroyo" escribió en el mensaje
news:
Yo creo que el problema puede ser que no le estás diciendo a la función Dir
que se trata de directorios, pero no sé el motivo de que el código te
funcione en Excel 97 pero no en 2003. A mí el siguiente código me funciona
en Excel 2003:

Sub prueba()
Dim n As Integer, i As Byte

For n = 2005 To 2010
If Dir("C:emoto\" & CStr(n), vbDirectory) = "" Then MkDir
("C:emoto\" & CStr(n))
For i = 1 To 12
If Dir("C:emoto\" & CStr(n) & "\" & Format(DateSerial(1, i,
1), "mmmm"), vbDirectory) = "" Then MkDir ("C:emoto\" & CStr(n) & "\" &
Format(DateSerial(1, i, 1), "mmmm"))
Next i
Next n
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel



"Rantamplan" escribió en el mensaje
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
#3 Rantamplan
03/05/2005 - 16:04 | Informe spam
"Luis Garcia" Escribió el día mar 03 may 2005
03:17:01p:

Hola:

Para Rantamplan: has verificado que cuando lo pruebas en el EX2003,
existe la carpeta C:\Remoto?

En todos los casos, estais dando por supuesto que existe el directorio
C:\Remoto... si este no existe, no funcionara ni en EX97 ni en EX2003.


Saludos

"Fernando Arroyo" escribió en el
mensaje news:
Yo creo que el problema puede ser que no le estás diciendo a la
función Dir que se trata de directorios, pero no sé el motivo de que
el código te funcione en Excel 97 pero no en 2003. A mí el siguiente
código me funciona en Excel 2003:

Sub prueba()
Dim n As Integer, i As Byte

For n = 2005 To 2010
If Dir("C:emoto\" & CStr(n), vbDirectory) = "" Then MkDir
("C:emoto\" & CStr(n))
For i = 1 To 12
If Dir("C:emoto\" & CStr(n) & "\" & Format(DateSerial(1,
i,
1), "mmmm"), vbDirectory) = "" Then MkDir ("C:emoto\" & CStr(n) &
"\" & Format(DateSerial(1, i, 1), "mmmm"))
Next i
Next n
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel



"Rantamplan" escribió en el mensaje
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







Buenas,
con el codigo de Fernando me sigue apareciendo el mismo error (no
encuentra la ruta). Lo que pretendo es que si no existe 'c:emoto' que
lo cree y si ya existe que pase a comprobar los subdirectorios de dentro
de 'remoto' y así sucesivamente.
El tema es que todas las noches se tiene que archivar el libro abierto
dentro de la carpeta de su mes correspondiente que a su vez estará dentro
de su año correspondiente de forma automatica.
La estructura seria la siguiente:

C:\Remoto
\2005
\Enero
\Febrero
...
\Mayo
...
\2006
\Enero
\Febrero
... etc etc

Esto mismo me lo hace con el codigo que he puesto en un software que
llama a Excel97 a una hora concreta y ejecuta dicho codigo, guardando el
libro en su ruta concreta.

Lo que no entiendo es que tanto en mi codigo como en el de Fernando se
espcifica que si no existe c:\Remoto (Dir ("C:\Remoto") que lo cree
(MkDir("C:Remoto")) y no funciona! :-( siempre aparece el mensajito de
marras diciendo que no encuentro la ruta.

A ver si entre todos le sacamos punta ;-)

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
#4 Fernando Arroyo
03/05/2005 - 16:26 | Informe spam
"Rantamplan" escribió en el mensaje news:
"Luis Garcia" Escribió el día mar 03 may 2005
03:17:01p:

Hola:

Para Rantamplan: has verificado que cuando lo pruebas en el EX2003,
existe la carpeta C:\Remoto?

En todos los casos, estais dando por supuesto que existe el directorio
C:\Remoto... si este no existe, no funcionara ni en EX97 ni en EX2003.


Saludos




Buenas,
con el codigo de Fernando me sigue apareciendo el mismo error (no
encuentra la ruta). Lo que pretendo es que si no existe 'c:emoto' que
lo cree y si ya existe que pase a comprobar los subdirectorios de dentro
de 'remoto' y así sucesivamente.
El tema es que todas las noches se tiene que archivar el libro abierto
dentro de la carpeta de su mes correspondiente que a su vez estará dentro
de su año correspondiente de forma automatica.
La estructura seria la siguiente:

C:\Remoto
\2005
\Enero
\Febrero
...
\Mayo
...
\2006
\Enero
\Febrero
... etc etc

Esto mismo me lo hace con el codigo que he puesto en un software que
llama a Excel97 a una hora concreta y ejecuta dicho codigo, guardando el
libro en su ruta concreta.

Lo que no entiendo es que tanto en mi codigo como en el de Fernando se
espcifica que si no existe c:\Remoto (Dir ("C:\Remoto") que lo cree
(MkDir("C:Remoto")) y no funciona! :-( siempre aparece el mensajito de
marras diciendo que no encuentro la ruta.

A ver si entre todos le sacamos punta ;-)

Salu2!.





Yo pensaba que el directorio Remoto estaba creado siempre, de antemano. Si no es así, es lógico que se produzca un error al intentar crear directamente C:\Remoto\2005 (por ejemplo).

Lo primero que tendrías que hacer es crear C:\Remoto si no existe, y luego seguir con el resto. En el código que puse antes, tan sólo habría que añadir la instrucción:

If Dir("C:emoto", vbDirectory) = "" Then MkDir "C:emoto"

antes del bucle For n ... Next n
Un saludo.


Fernando Arroyo
MS MVP - Excel

"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
#5 KL
03/05/2005 - 16:35 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida