Renombrar ficheros ,tiff mediante código

07/03/2009 - 01:35 por javier.ranchal | Informe spam
Hola a todos:

En mi empresa nos ha surgido la necesidad de renombrar muchos
ficheros .tif, sustituyendo el nombre genérico que aparece por el
valor de las celdas de la primera columna de un fichero de Excel, por
lo que me creé una macro en VBA que resolviera la papeleta

En un principio todo parecía correcto, pero cuando probamos en detalle
con los usuarios, me he encontrado que sólo renombra correctamente los
ficheros cuyo nombre original es texto, mientras que si el nombre
original es un número, el programa entra una vez más en el bucle.

Estoy desesperado, no entiendo por qué actúa así, por lo que os
adjunto el código para ver si alguien pudiera echarme una mano.



Sub prueba4() ' Modificación del nombre de un fichero en una carpeta
Dim miruta As String
Dim minombre As String
Dim contador As Integer

miruta = "c:\prueba\*.tif" ' Carpeta donde estan
almacenados los ficheros .tif
minombre = Dir(miruta, vbArchive) ' capturo el primer archivo .tif
contador = 0

Do While minombre <> ""
Name "c:\prueba\" & minombre As "c:\prueba\" & ActiveCell.Value &
".tif" ' renombro el fichero al valor de la celda activa
contador = contador + 1
ActiveCell.Offset(1, 0).Select ' Me desplazo a la celda de
abajo
minombre = Dir ' Capturo el siguiente
fichero .tif
Loop

MsgBox contador ' Cuando ya no hay más
ficheros, miro cuantos se han renombrado.

End Sub



El código lo tengo insertado en un fichero cuya primera columna
contendría los valores que sería el nuevo nombre del fichero (ese
nombre es lo de menos, por ejemplo podrían ser las letras del
abecedario).

Si observáis, el código recoge el nombre del primer fichero contenido
en la carpeta prueba que tiene extensión .tif, y al entrar en el
bucle, sustituye el nombre original del fichero por el valor de la
celda activa, seguidamente se desplaza una celda abajo y pasa a
renombrar el segundo fichero .tif de la carpeta, y así sucesivamente.

Pues bién, si os creáis un pequeño fichero y probáis el código con
tres o cuatro imágenes .tif, observaréis que, si el nombre original de
esos ficheros .tif es texto, las veces que el programa entra en el
bucle son correctas, mientras que si el nombre original de los
ficheros es númerico (como ocurre en mi empresa), el programa entrará
una vez más de las necesarias en el bucle y, en consecuencia lo
renombrará mal.

Y por más que lo miro, reviso, pruebo, no entiendo por qué c... se
comporta así.

Por favor, si alguien pudiera ayudarme le estaría muy agradecido..

Un saludo y muchas gracias por anticipado.
 

Leer las respuestas

#1 Héctor Miguel
07/03/2009 - 05:13 | Informe spam
hola, javier !

En mi empresa nos ha surgido la necesidad de renombrar muchos ficheros .tif
sustituyendo el nombre genérico que aparece por el valor de las celdas de la primera columna de un fichero de Excel
por lo que me cree una macro en VBA que resolviera la papeleta

En un principio todo parecia correcto, pero cuando probamos en detalle con los usuarios
me he encontrado que solo renombra correctamente los ficheros cuyo nombre original es texto
mientras que si el nombre original es un numero, el programa entra una vez mas en el bucle.

Estoy desesperado, no entiendo por que actua asi, por lo que os adjunto el codigo para ver si alguien pudiera echarme una mano.



1) te sugiero que hagas una prueba +/- como pides: "con tres o cuatro imagenes .tif"
donde dos (o mas) de esas imagenes tengan un nombre "numerico", y pruebes el codigo que expones (PERO...)
haz una ligera variante (provisional) y...
-> donde usas la instruccion: Name "origen" As "destino"
-> cambiala por otra del tipo: Debug.Print minombre

lo anterior solo para comprobar si el bucle entra en la "redundancia ciclica" que comentas -???-

2) si de esta forma el bucle no presenta las repeticiones que mencionas, sera necesario que encuentres una manera diferente
ya que de la forma que usas este bucle (realmente) no tienes control sobre cual archivo (renombrado) ya se habia procesado
ni la seguridad de que el orden en que se encuentran los *.tif se corresponda con los nombres en las celdas que recorre

es probable que esta forma de bucle y cambios de nombre "al vuelo" pudiera tener otro tipo de "repercusiones" -???-
haz la prueba con el punto 1, y si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el codigo expuesto y resto del mensaje __
Sub prueba4() ' Modificacion del nombre de un fichero en una carpeta
Dim miruta As String
Dim minombre As String
Dim contador As Integer
miruta = "c:\prueba\*.tif" ' Carpeta donde estan almacenados los ficheros .tif
minombre = Dir(miruta, vbArchive) ' capturo el primer archivo .tif
contador = 0
Do While minombre <> ""
Name "c:\prueba\" & minombre As "c:\prueba\" & ActiveCell.Value & ".tif" ' renombro el fichero al valor de la celda activa
contador = contador + 1
ActiveCell.Offset(1, 0).Select ' Me desplazo a la celda de abajo
minombre = Dir ' Capturo el siguiente fichero .tif
Loop
MsgBox contador ' Cuando ya no hay mas ficheros, miro cuantos se han renombrado.
End Sub

El codigo lo tengo insertado en un fichero cuya primera columna contendria los valores
que seria el nuevo nombre del fichero (ese nombre es lo de menos, por ejemplo podrían ser las letras del abecedario).

Si observais, el codigo recoge el nombre del primer fichero contenido en la carpeta prueba que tiene extension .tif
y al entrar en el bucle, sustituye el nombre original del fichero por el valor de la celda activa
seguidamente se desplaza una celda abajo y pasa a renombrar el segundo fichero .tif de la carpeta, y asi sucesivamente.

Pues bien, si os creais un pequeno fichero y probais el codigo con tres o cuatro imagenes .tif
observareis que, si el nombre original de esos ficheros .tif es texto las veces que el programa entra en el bucle son correctas
mientras que si el nombre original de los ficheros es numerico (como ocurre en mi empresa)
el programa entrara una vez mas de las necesarias en el bucle y, en consecuencia lo renombrara mal.

Y por mas que lo miro, reviso, pruebo, no entiendo por que c... se comporta asi.

Por favor, si alguien pudiera ayudarme le estaria muy agradecido..

Un saludo y muchas gracias por anticipado.

Preguntas similares