AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1719032
Accepted
MyICQ
MyICQ
Asked: 2022-05-03 03:51:17 +0800 CST2022-05-03 03:51:17 +0800 CST 2022-05-03 03:51:17 +0800 CST

Os slides do PowerPoint (formas) não parecem herdar o texto alternativo do mestre

  • 772

Eu gostaria de substituir um elemento em meus slides do PowerPoint para ter uma noção das variáveis ​​de propriedade do documento. Eu tenho a macro no lugar, e funciona.

Mas não entendo por que slides criados e baseados em um mestre não possuem texto alternativo. O mestre tem texto alternativo. Isso me torna incapaz de fazer um loop sobre as propriedades.

Eu perdi uma configuração em algum lugar?


Modelo mestre:

vista do modelo mestre mostrando texto alternativo

Slide baseado neste layout mestre:

visualização do slide com base no mestre, sem texto alternativo

microsoft-powerpoint vba
  • 3 3 respostas
  • 120 Views

3 respostas

  • Voted
  1. Best Answer
    Steve Rindsberg
    2022-05-04T07:16:06+08:002022-05-04T07:16:06+08:00

    Na maioria dos casos, não haverá vários marcadores de posição mestre/layout de um determinado tipo (por exemplo, Título, Subtítulo, etc.) para que você possa combinar o tipo de marcador de uma forma de slide com o tipo de marcador de posição do layout do slide. Veja alguns exemplos de VBA:

    Option Explicit
    
    Sub TestThis()
    
        Dim osl As Slide
        Dim osh As Shape
        Dim sTemp As String
        
        For Each osl In ActivePresentation.Slides
            For Each osh In osl.Shapes
               sTemp = MasterAltText(osh)
               If Len(sTemp) > 0 Then
                    MsgBox sTemp
               End If
            Next
        Next
    End Sub
    
    Function MasterAltText(osh As Shape) As String
    
        Dim osl As Slide
        Dim oMasterShape As Shape
        Dim oLayout As CustomLayout
        
        ' Is this actually a placeholder?
        If Not osh.Type = msoPlaceholder Then
            MasterAltText = ""
        End If
        
        Set osl = osh.Parent
        Set oLayout = osl.CustomLayout
        
        For Each oMasterShape In oLayout.Shapes
            If oMasterShape.Type = msoPlaceholder Then
                If oMasterShape.PlaceholderFormat.Type _
                  = osh.PlaceholderFormat.Type Then
                    MasterAltText = oMasterShape.AlternativeText
                    Exit Function
                End If
            End If
        Next
    
        MasterAltText = ""
    
    End Function
    
    • 1
  2. MyICQ
    2022-05-04T00:46:30+08:002022-05-04T00:46:30+08:00

    Eu me aprofundei um pouco neste, e tenho que concluir que ver os slides mestres como "modelo" para cada slide está realmente quebrado.

    Aparentemente , nenhuma das propriedades para tags ou texto alternativo definido em espaços reservados/quadros de texto em slides mestres são transportados para o slide baseado no mestre. Portanto, pensar que um código VBA pode fazer um loop sobre as formas com base na tag não é possível - a menos que as propriedades sejam definidas em cada slide.

    Um hack que encontrei é usar as propriedades font e position. Dessa forma, é bastante simples destacar uma forma.

    Algo junto

        For Each processPage In Application.ActivePresentation.Slides
           For Each shapeobj In processPage.Shapes
               If shapeobj.TextFrame.TextRange.Font.Italic <> 0 Then
                   ' found some shape with ITALIC text
                   ' do things to it
               End If
     
               ' check against a const with section position
               '  Global Const sectiontop as Double = 27.95
               ' 
               If Round(shapeobj.TextFrame2.TextRange.BoundTop, 2) = sectiontop Then
                   ' found shape based on position
                   ' do things to it
               End If
            Next  ' shap
        Next 'slide
    
    
    • 0
  3. MyICQ
    2022-05-04T15:01:56+08:002022-05-04T15:01:56+08:00

    Esta é a solução que funciona para mim, inspirada em Steve Rindsberg.

    Eu faço um loop sobre as formas no layout mestre associado ao slide e, em seguida, construo um dicionário de texto alternativo, com base em algumas impressões digitais da forma. Usando a impressão digital (exemplo: tamanho da fonte, alinhamento, cor da fonte...) eu posso contornar esse texto alternativo e as tags não são transferidas do mestre para os slides.

    Observei que isso só funciona com espaços reservados. As caixas de texto colocadas no slide mestre nem existem no contexto do slide, então o método aqui só funciona se o usuário não mexer na formatação.

    ''
    ''  inspired by
    ''  https://superuser.com/questions/1719032/powerpoint-slides-shapes-dont-seem-to-inherit-alternative-text-from-master/1719213#1719213
    ''
    Sub updateSlide()
    
    
        Dim osl As Slide
        Dim d As Dictionary   ' need reference to MS scripting library
        
        Dim osh As Shape
        Dim sTemp As String
        Dim mykey As String
        
        Set d = Nothing
        
        ' Set d = New Dictionary
        
        ' loop over every slide
        For Each osl In ActivePresentation.Slides
            '
            ' make a dictionary of customtexts in the master
            '
            Set d = makedictionary(osl.CustomLayout)
        
            ' loop over shapes
            ' and find using properties like size / font...
            For Each osh In osl.Shapes
                  mykey = makeKEY(osh)
                  
                  ' if found, do something with this shape.
                  If Len(d(mykey)) > 0 Then
                    If ActivePresentation.SectionProperties.Count < 1 Then
                       osh.TextFrame.TextRange.Text = "  -  "
                    Else
                       ' can also replace with other presentation data.
                       ' 
                       osh.TextFrame.TextRange.Text = ActivePresentation.SectionProperties.Name(osl.sectionIndex)
                    End If
                  End If
            Next 'shapes
        Next 'slide
    End Sub
    
    
    
    ''
    ''  make a fingerprint of a shape
    ''
    Function makeKEY(oShape As Shape) As String
        ' return some variables from this one
        ' independent of position !
        ' this is like a "fingerprint" of the shape.
        With oShape.TextFrame.TextRange
            ' choose something that is UNIQUE to the shape
            makeKEY = .Font.Name & .ParagraphFormat.Alignment & .Font.Color & .Font.Italic
        End With
    End Function
    
    
    ''
    ''  make a dictionary of shapes with an alternative text.
    ''  so we don't have to loop the same objects many times.
    ''
    
    Function makedictionary(masterslide As CustomLayout) As Dictionary
        ' make a new dict
        Dim d As Dictionary
        Set d = New Dictionary
        Dim mSh As Shape
        
        For Each mSh In masterslide.Shapes
                If Len(mSh.AlternativeText) > 0 Then
                   mykey = makeKEY(mSh)
                   d(mykey) = mSh.AlternativeText
                End If
        Next
        
        Set makedictionary = d
        Set d = Nothing
    
    End Function
    
    
    
    • 0

relate perguntas

  • Ao importar uma planilha para o Access, como você impede que o Excel atribua automaticamente um tipo de campo de dados?

  • VBA para colocar várias colunas com duas linhas no Excel em suas próprias linhas

  • Copie planilhas diferentes de pastas de trabalho diferentes vba

  • Contar o número de linhas que correspondem a vários critérios

  • VBA para renomear planilha com base no nome do arquivo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve