jueves, 12 de octubre de 2017

VBA: Reemplazar en PowerPoint desde Excel.

Hoy, en respuesta a la cuestión lanzada por un lector, respecto a la manera de reemplazar textos, palabras o caracteres en una diapositiva de PowerPoint desde Excel, aprenderemos algunos métodos sencillos.

Partimos de la siguiente diapositiva (en una Presentación ya creada), con unos objetos insertados.
En concreto me interesa trabajar sobre el Cuadro de texto...

VBA: Reemplazar en PowerPoint desde Excel.


Como se observa tenemos el mismo texto escrito en dos objetos... sin embargo, en todo momento trabajaremos única y exclusivamente sobre el cuadro de texto (llamado 'CuadroTexto1').

Insertamos nuestra macro en un módulo estándar de nuestro proyecto de VB dentro de nuestro Libro de trabajo de Excel.

Sub ReemplazarDatoExcelaPPT()
Dim oPPT As Object, oPrsn As Object, oSlide As Object
Dim oShape1 As Object
Dim ficheroPPT As String

'La ruta completa de la presentación de PPT
ficheroPPT = "E:\excelforo\Excel_a_PPt.pptx"

'Definimos el objeto de trabajo PowerPoint
On Error Resume Next
Set oPPT = GetObject(, "PowerPoint.Application")
'controlamos posibles errores
If Err.Number <> 0 Then
    'y creamos el objeto, i.e., la presentación
    Set oPPT = CreateObject("PowerPoint.Application")
End If
Err.Clear
On Error GoTo 0
'hacemos visble la aplicación (voluntario.. pero recomendable)
oPPT.Visible = True

'Abriremos nuestra presentación
Set oPrsn = oPPT.Presentations.Open(ficheroPPT)
'accedemos a la primera diapositiva...
Set oSlide = oPrsn.Slides(1)
'...y nos centramos en las autoformas, cuadros de texto, etc
'(es importante tener controlado el destino previamente!!!)
Set oShape1 = oSlide.Shapes("CuadroTexto 1")

'nos centramos en la segunda palabra contenida en el cuadro de texto
Set rngTexto1 = oShape1.TextFrame.TextRange.Words(Start:=2, Length:=1)
'indicamos por que debemos cambiar esa palabra
rngTexto1.Text = "Palabra_Cambiada "

'otra posibilidad es cambiar caracteres...
'por ejemplo, cambiamos los 5 primeros caracters
Set rngTexto2 = oShape1.TextFrame.TextRange.Characters(Start:=1, Length:=5)
'indicamos por que debemos cambiar esa palabra
rngTexto2.Text = "Cambio Excel "

'y otra posibilidad mas empleadno Reemplazar...
'por ejemplo, cambiamos el texto 'PPT' por 'PowerPoint'
Set rngTexto3 = oShape1.TextFrame.TextRange.Replace(findwhat:="PPT", replacewhat:="PowerPoint")

'guardamos y cerramos la aplicación (PPT)
'oPPPrsn.Save
'oPPPrsn.Close
'oPPApp.Quit

'y liberamos memoria
Set oPPT = Nothing
Set oPrsn = Nothing
Set oSlide = Nothing
Set oShape1 = Nothing
Set rngTexto1 = Nothing: Set rngTexto2 = Nothing: Set rngTexto3 = Nothing
End Sub



Al ejecutar la macro comprobamos cómo solo se ve afectado el contenido del cuadro de texto, y de acuerdo a nuestras tres instrucciones.
Los métodos a emplear, de entre los tres descritos, dependerá de la precisión que necesitemos... o de la información previa sobre la ubicación/localización de los textos a cambiar.


El resultado:

VBA: Reemplazar en PowerPoint desde Excel.

No hay comentarios:

Publicar un comentario