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.

3 comentarios:

  1. Muchas gracias por tu aportación amigo. Hay forma de condicionar el color del texto según el valor (numérico)?

    Muchas gracias!

    ResponderEliminar
    Respuestas
    1. Hola
      bastaría aplicar un Formato condicional (con el operador requerido) cambiando el formato de color de la fuente.
      Slds

      Eliminar
  2. Hola, muchísimas gracias por la aportación.

    Una duda,cómo se podría hacer el cambio imagen por imagen? Es decir, al ejecutar la macro en excel mando una gráfica como imagen a PPT pero el problema es que cada vez que ejecute la macro la imagen se va colocando encima y lo que me gustaría es que eliminase la anterior que hubiese en esa posición y colocase la nueva.

    Muchas gracias!

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.