VBA: Patrón de diapositivas asignar estilos de Word de PowerPoint

Seleccione idioma Seleccione idioma
Id. de artículo: 168768 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Resumen

Para conseguir un aspecto coherente para los documentos creados en Microsoft Office, es posible utilizar información de formato desde un programa de Office en otro programa de Office. La sección "Más información" de este artículo proporciona un ejemplo de Microsoft Visual Basic para aplicaciones macro (procedimiento Sub) que recupera los estilos de título desde Microsoft Word y les aplica al patrón de diapositivas en Microsoft PowerPoint.

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Qué hace la macro

La siguiente información de estilo se recupera desde Microsoft Word:
  • nombre de fuente
  • Negrita
  • Sombra
  • Subrayado
  • Cursiva
Se omite el otro formato, pero puede modificar esta macro para aplicar información de formato adicional si es necesario.

En la tabla siguiente se muestra cómo se asignan los estilos de Word al patrón de diapositivas en PowerPoint.

Word PowerPoint
Heading 1   Title of slide master (title placeholder)
Heading 2   First level indent (in the body placeholder)
Heading 3   Second level indent (in the body placeholder)
Heading 4   Third level indent (in the body placeholder)
Heading 5   Fourth level indent (in the body placeholder)
Heading 6   Fifth level indent (in the body placeholder)

Preparando para ejecutar la macro

Esta macro contiene código que coloque en un módulo y un módulo de clase. Coloque el procedimiento denominado "Main" en un módulo; colocar el resto del código en un módulo de clase denominado "WordObject." Para preparar esta macro para ejecutar, utilice los pasos siguientes:
  1. Inicie el Editor de Visual Basic:
    1. Inicie PowerPoint 97 y abra o cree una presentación.
    2. En el menú Herramientas , elija macro y haga clic en Editor de Visual Basic .
  2. Para insertar un módulo en un proyecto, haga clic en módulo en el menú Insertar .
  3. En el módulo que acaba de crear, escriba el código que comienza con:
    Sub Main()
    						
    y termina con:
    ' End of Main.
    End Sub
    						
  4. Para insertar un módulo de clase en el proyecto, haga clic en Módulo de clase en el menú Insertar .
  5. Cambie el nombre del módulo de clase a WordObject:
    1. En el Explorador de proyectos, abra la carpeta módulos de clase.

      Nota: Si el Explorador de proyectos está cerrado, haga clic en Explorador de proyectos en el menú Ver para abrirlo.
    2. Haga clic en el módulo de Class1 . Class1 es el nombre de predeterminado dado al crear un módulo de clase. Si crear otro nuevo módulo, se Class2 con nombre y, a continuación, Class3 y así sucesivamente.
    3. Vea la hoja de propiedades para el módulo de Class1. Si se cierra la ventana Propiedades, haga clic en Ventana Propiedades en el menú Ver .
    4. Resalte Class1 a la derecha de (nombre). Cambie el nombre a WordObject. (Utilice el mismo caso).
  6. En el módulo de clase que acaba de crear, escriba el código que comienza con:
    ' Start of WordObject class.
    						
    y termina con:
    ' End of WordObject class.
    						
  7. Agregue una referencia al modelo de objetos de Word:
    1. En el menú Herramientas (en el Editor de Visual Basic), haga clic en referencias .
    2. En la casilla de verificación "biblioteca de objetos de Microsoft Word 8.0" .
    3. Haga clic en Aceptar .
  8. Ejecutar la macro en PowerPoint:
    1. En el menú Herramientas , elija macro y, a continuación, haga clic en macros .
    2. Seleccione la macro denominada principal y haga clic en Ejecutar .

El código de macro

Sub Main()

   Const strMacroName = "Get Word Styles"

   Dim oWord As New WordObject
   Dim lResult As Long

   With oWord

      ' Check if a document is open in Word.
      If .IsDocOpen = False Then

         ' Prompt the user to open a document if no document is open.
         lResult = MsgBox("No document is open in Word. Would you " _
            & "like to open a document?", vbOKCancel + vbExclamation, _
            strMacroName)

         ' Check if the user clicked OK.
         If lResult = vbOK Then
            .OpenDocPrompt
         Else
            ' The user clicked Cancel. Free resources, and end the macro
            .FreeWord
            End
         End If

      End If

      ' Get the Heading 1 styles and apply them to the slide master
      ' title.
      .GetStyles 1

   End With

   ' Apply the Heading 1 styles to title in the slide master.
   With ActivePresentation.SlideMaster.Shapes.Title.TextFrame.TextRange
      .Font.Name = oWord.Fontname
      .Font.Bold = oWord.Bold
      .Font.Shadow = oWord.Shadow
      .Font.Underline = oWord.Underline
      .Font.Italic = oWord.Italic
   End With

   ' Loop through and apply all the Word heading styles to the body
   ' placeholder.
   Dim x As Long
   For x = 2 To 6

      ' Getting Heading 2 styles
      oWord.GetStyles x

      ' Apply heading to styles (retrieved from Word) to the first line
      ' in the placeholder.
      With ActivePresentation.SlideMaster.Shapes.Placeholders(ppPlaceholderBody).TextFrame
         .TextRange.Lines(x - 1).Font.Name = oWord.Fontname
         .TextRange.Lines(x - 1).Font.Bold = oWord.Bold
         .TextRange.Lines(x - 1).Font.Shadow = oWord.Shadow
         .TextRange.Lines(x - 1).Font.Underline = oWord.Underline
         .TextRange.Lines(x - 1).Font.Italic = oWord.Italic
      End With

   Next x

   ' Check if Word was started by the macro.
   If oWord.WasStarted = False Then
      MsgBox "Successfully imported heading styles from Word." _
         , vbInformation, strMacroName
   End If

' End of Main.
End Sub
				
código de clase WordObject:
' Start of WordObject class.

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
   (ByVal lpClassName As String, _
   ByVal lpWindowName As Long) As Long

Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" _
   (ByVal hwnd As Long, _
   ByVal lpText As String, _
   ByVal lpCaption As String, _
   ByVal wType As Long) As Long

Private Const MB_YESNO = &H4&
Private Const MB_QUESTION = &H20&
Private Const IDYES = 6

' Add all private variables here.

' This member holds an object reference to Word. If an object reference
' was not set, this value will be set to Nothing.
Private m_oWordRef As Object

' This variable is set to FALSE if GetObject was used to obtain
' an object reference or if a Word reference could not be obtained.
' This variable is set to TRUE if CreateObject was used to obtain
' an object reference.
Private m_bStarted As Boolean

' This holds the font name for a heading style.
Private m_strFontName As String

' This holds the bold information for a font.
Private m_lBold As Long

' This holds the italic information.
Private m_lItalic As Long

' This holds the underline information.
Private m_lUnderline As Long

' This holds the shadow information.
Private m_lShadow As Long

Private Sub Class_Initialize()

   ' This function initializes all members of the class to
   ' their default values.
   InitMembers

   ' Used to trap GetObject if it fails.
   On Error Resume Next
   Err.Clear

   ' Attempt to get a reference to the Word object.
   Set m_oWordRef = GetObject(, "Word.Application.8")

   ' Check if error occurred during GetObject.
   If Err.Number <> 0 Then

      ' Clear the error object.
      Err.Clear

       ' Attempt to get a reference to the Word object.
      Set m_oWordRef = CreateObject("Word.Application.8")

      ' Check if error occurred when calling CreateObject.
      If Err.Number <> 0 Then
         Set m_oWordRef = Nothing
         m_bStarted = False
      Else

         ' CreateObject obtained a Word object reference.
         m_bStarted = True
      End If

   End If

End Sub

Private Sub Class_Terminate()

   Dim lResult As Long
   Dim hwnd As Long

   ' Check if Word was started by the macro.
   ' If Word was started by the macro, quit Word, and
   ' set the Word object reference to Nothing.
   If m_bStarted = True Then

      ' Get a handle to the main window of Word.
      hwnd = FindWindow("OpusApp", 0&)

      Dim strCaption As String
      strCaption = "Word was started by this macro. Would you " _
         & "like to close Word?"

      ' Ask the user if they would like to close Word.
      lResult = MessageBox(hwnd, strCaption, "Get Word Styles", _
         MB_YESNO + MB_QUESTION)

      ' Check if the user clicked Yes.
      If lResult = IDYES Then

         ' Quit Microsoft Word.
         m_oWordRef.Quit
      End If

   End If

   ' No matter what, set the Word object reference to
   ' Nothing.
   Set m_oWordRef = Nothing

End Sub

' This subroutine initializes all member variables in
' the class.
Private Sub InitMembers()

   Set m_oWordRef = Nothing
   m_bStarted = False

   ' This initializes all members that relate to styles.
   InitHeadingMembers
End Sub

Private Sub InitHeadingMembers()

   ' Initializes the members related to the heading style.
   m_strFontName = ""
   m_lBold = -1
   m_lItalic = -1
   m_lUnderline = -1
   m_lShadow = -1

End Sub

' Call this member to trigger the class construction.
Public Sub Create()

End Sub

Public Function IsDocOpen() As Boolean

   ' Check if any documents are open in Word.
   ' The macro grabs the styles from the active
   ' document, so a document must be open.
   If m_oWordRef.Documents.Count = 0 Then
      IsDocOpen = False
   Else
      IsDocOpen = True
   End If

End Function

Public Sub OpenDocPrompt()

   Dim lAnswer As Long

   ' Check if Word is visible.
   If m_oWordRef.Visible = False Then
      m_oWordRef.Visible = True
   End If

   ' Give focus to Word.
   m_oWordRef.Activate

   ' Display the Open dialog box in Word.
   lAnswer = m_oWordRef.Dialogs(wdDialogFileOpen).Show

   ' If they click Cancel, close the macro.
   If lAnswer <> -1 Then
      Class_Terminate
      End
   End If

End Sub

Public Sub FreeWord()
   Class_Terminate
End Sub

Public Sub GetStyles(lStyleNumber As Long)

   Dim lStyle As Long

   ' Determine which heading to obtain.
   Select Case lStyleNumber

      ' Heading 1
      Case 1
         lStyle = wdStyleHeading1

      ' Heading 2
      Case 2
         lStyle = wdStyleHeading2

      ' Heading 3
      Case 3
         lStyle = wdStyleHeading3

      ' Heading 4
      Case 4
         lStyle = wdStyleHeading4

      ' Heading 5
      Case 5
         lStyle = wdStyleHeading5

      ' Heading 6
      Case 6
         lStyle = wdStyleHeading5

      Case Else
         lStyle = wdStyleHeading1

   End Select

   ' Populate the style variables.
   With m_oWordRef.ActiveDocument.Styles(lStyle).Font
      m_strFontName = .Name
      m_lBold = .Bold
      m_lShadow = .Shadow
      m_lItalic = .Italic
      m_lUnderline = .Underline
   End With

End Sub

' Returns the m_strFontName member value
Public Property Get Fontname() As String
   Fontname = m_strFontName
End Property

' Returns the m_lBold member value.
Public Property Get Bold() As Long
   Bold = m_lBold
End Property

' Returns the m_lShadow member value.
Public Property Get Shadow() As Long
   Shadow = m_lShadow
End Property

' Returns the m_lItalic member value.
Public Property Get Italic() As Long
   Italic = m_lItalic
End Property

' Returns the m_lUnderline member value.
Public Property Get Underline() As Long
   Underline = m_lUnderline
End Property

' Returns whether Word was started by the macro or not.
Public Property Get WasStarted() As Boolean
   WasStarted = m_bStarted
End Property

' End of WordObject class.
				

Referencias

Para obtener información adicional acerca de cómo utilizar el código de ejemplo de este artículo, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
173707OFF97: Cómo ejecutar código de ejemplo de artículos de Knowledge Base

Propiedades

Id. de artículo: 168768 - Última revisión: sábado, 01 de febrero de 2014 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft PowerPoint 97 Standard Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kbcode kbdtacode kbhowto kbinterop kbprogramming KB168768 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 168768

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com