Copiar un string en el portapapeles mediante VBA

Necesito copiar un string en el portapapeles para después poder cambiar el nombre de una carpeta y copiar en su lugar el nombre que hay en el portapapeles.

Ahora mismo estoy usando esto:

    Dim ObjetoClipboard As MSForms.DataObject
    Set ObjetoClipboard = New MSForms.DataObject
    ObjetoClipboard. Clear 'esto borra el portapapeles
    ObjetoClipboard. SetText ReplaceBadCharacters(FileName), 1 ' esto carga el portapapeles con el contenido de la variable strArea.
    ObjetoClipboard. PutInClipboard

Y no me funciona con algunos nombres.

2 respuestas

Respuesta
1

Diego: Si normalmente funciona, imagino que no reemplaza algunos caracteres no aceptados.

Comienza por tomar nota de los "Nombres que no funcionan", y mira si contienen algún carácter "extraño". Mira si ese carácter está en los que hay en Replace... y si no está lo añades.

Si no fuera eso, ya miraremos con más atención y tiempo. Saludos >> JT

Muchas gracias por responder.

Precisamente por eso.

A ver, lo que hago es revisar los nombres de las carpetas y los archivos, y les paso la función ReplaceBadCharacters para renombrar dicho archivo o carpeta. Sin embargo, hay archivos y carpetas que no se dejan renombrar, por lo que tengo que hacerlo a mano. Entonces tengo puesto para que me salte un MsgBox con cada archivo y copie en el portapapeles el nombre limpio, así que no debería dar problemas.

https://www.dropbox.com/s/rijxgh8pdayjc3t/mdlLimpiarTitulos.bas?dl=0 

Ya te digo, me lo hace perfectamente, sin embargo, se atora con uno que no tienes caracteres raros: Canales de Youtube, que yo mismo escribí a mano y no me metí nada raro.

Diego: Mañana con más tiempo lo miro y te comento. Un saludo >> JTJ

Ok. Gracias.

Cuando lo mires mañana, a ver si puede ser porque hay que borrar el portapapeles.

Hola, Jacinto. Eduardo como ha pasado un post sobre cómo hacerlo a través de la API y ese sí que no me da ningún fallo. Muchas gracias.

Perfecto Diego: Por las respuestas que veo de Eduardo (un saludo) es un gran maestro, y me alegra que tu problema lo hayas podido solucionar. Saludos >> JTJ.

Respuesta
1

Estuve probando y esta línea no está borrando el portapapeles:

ObjetoClipboard. Clear 

¿Y cómo puedo borrar el portapapeles? 

Adicione una procedimiento, algo como:

Sub borrar()

Dim Clipboard As MSForms.DataObject
Set Clipboard = New MSForms.DataObject
Clipboard.SetText ""
Clipboard.PutInClipboard

End Sub

No obstante, pruebe en su código adicionando las líneas resaltadas:

Dim ObjetoClipboard As MSForms.DataObject
Set ObjetoClipboard = New MSForms.DataObject
ObjetoClipboard. SetText "" 'esto borra el portapapeles
ObjetoClipboard. PutInClipboard
ObjetoClipboard. SetText ReplaceBadCharacters(FileName), 1 ' esto carga el portapapeles con el contenido de la variable strArea.
ObjetoClipboard. PutInClipboard

Una recomendación, el objeto MSForms. DataObject es muy antiguo y en las nuevas versiones de Access puede fallar, en los posible utilice mejor las API.

Muchas gracias.

¿Y como sería mediante la API?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas