2017-01-17 7 views
0

Мне нужно сделать две презентации с теми же слайдами, фоны и все, кроме текста: один на немецком и один на английском. Поэтому у меня есть две отдельные презентации, которые я всегда должен обновлять одновременно, иначе одна языковая версия будет устаревшей, и я часто забываю, что я изменил.VBA для Microsoft PowerPoint для распознавания и скрытия текстовых полей на немецком языке

Я сделал собственное шоу со всеми слайдами, скопированными в одну презентацию PowerPoint, и это работает достаточно хорошо, но я все равно должен менять два одинаковых слайда каждый раз, когда я делаю редактирование на одном языке.

Поэтому я пытаюсь написать макрос, который распознает все текстовые поля в презентации с немецким текстом в них и спрячет их во время показа, и наоборот. Затем каждый макрос будет связан с гиперссылкой на слайде заголовка под названием «английский» или «немецкий», который при нажатии будет скрывать текстовые поля на других языках, одновременно оставляя все изображения и форматируя их. В идеале макрос скроет все ящики на одном языке и снова отобразит все поля на другом языке на одном и том же шаге, чтобы презентация всегда была полезной, и у меня нет пользователя, который открывает PPT без текста потому что все они будут скрыты ...

Для этого у меня есть два текстовых поля, содержащих текст на обоих языках на одном слайде, поэтому я хотел бы скрыть текстовые поля.

Я могу получить все текстовые поля скрытыми, но не текстовыми полями на определенном языке (иначе, все поля, независимо от их языка редактирования, будут скрыты, а не какие-либо конкретные).

PS - текстовые поля не нуждаются в ссылке здесь ... он может просто ссылаться на форму. Я старался избегать того, что Картинки будут скрыты, а текстовые поля будут лучшим способом ссылки на то, что я хотел.

Есть ли лучший способ?

Я действительно не знаю, как ссылаться на язык в VBA, я нашел этот сайт случайно и подумал, что у кого-то может быть быстрый трюк, который поможет мне справиться с этой проблемой. Код у меня есть, который будет сливаться из текстовых полей, но не сливаться конкретными языковыми урны выглядят следующим образом:

Sub GermanTextBoxFinder() 
    Dim SlideToCheck As Slide 
    Dim ShapeIndex As Integer 
     ' Visit each slide 
    For Each SlideToCheck In ActivePresentation.Slides 
     ' On each slide, count down through the shapes 
    For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1 
     ' If the shape IS a text box and DOES have German text 
    If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And _ 
    MsoLanguageID.msoLanguageIDGerman _ 
Then 
    ' Toggle visibility of German Textboxes 
    SlideToCheck.Shapes(ShapeIndex).Visible = msoFalse 
End If 
Next 
Next 

End Sub 

ответ

0

Почему вы не назвать фигуры с текстом на немецком языке то, что определяет их? Например. используйте префикс «txtGER» для текстов на немецком языке и «txtENG» для англоязычных. Тогда вы могли бы использовать что-то вроде следующего:

If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And _ 
    Left(SlideToCheck.Shapes(ShapeIndex).Name, 6) = "txtGER" Then 
    ' Toggle visibility of German Textboxes 
    SlideToCheck.Shapes(ShapeIndex).Visible = msoFalse 
Else 
    SlideToCheck.Shapes(ShapeIndex).Visible = msoTrue 
End If 

(смотрите this q+a для получения информации о том, как переименовать формы).

0

Это спрячет текстовые поля/формы с текстом, который содержит либо английский, либо французский. Вы можете изменить HideFrench, чтобы скрыть немецкий язык ... Intellisense предоставит правильные константы.

Sub HideEnglish() 
    Dim oSl As Slide 
    Dim oSh As Shape 

    For Each oSl In ActivePresentation.Slides 
     For Each oSh In oSl.Shapes 
      If oSh.HasTextFrame Then 
       If oSh.TextFrame.HasText Then 
        If oSh.TextFrame.TextRange.LanguageID = msoLanguageIDEnglishUS Then 
         oSh.Visible = False 
        Else 
         oSh.Visible = True 
        End If 

       End If 
      End If 
     Next 
    Next 
End Sub 

Sub HideFrench() 
    Dim oSl As Slide 
    Dim oSh As Shape 

    For Each oSl In ActivePresentation.Slides 
     For Each oSh In oSl.Shapes 
      If oSh.HasTextFrame Then 
       If oSh.TextFrame.HasText Then 
        If oSh.TextFrame.TextRange.LanguageID = msoLanguageIDFrench Then 
         oSh.Visible = False 
        Else 
         oSh.Visible = True 
        End If 

       End If 
      End If 
     Next 
    Next 
End Sub 
+0

Спасибо, Стив! Это прекрасно работает. Что-то, о чем я не думал раньше, однако, заключается в том, что когда я делаю кнопку действия на слайде заголовка (например, «немецкий» (ссылка, чтобы скрыть английский макрос)) с гиперссылкой для запуска макроса, она также скроет, что Кнопка действия, означающая, что пользователь не может щелкнуть ее снова, чтобы отобразить текстовые поля, не запуская макрос другим способом. Как я могу написать исключение, чтобы исключить скрытие слайда заголовка? Или, в частности, ссылку на поле Действие не скрывать? – vandey08

+0

В верхней части головы у меня будет функция HideEnglish также изменить текст кнопки действия на «Как вы говорите, HIDE GERMAN auf Deutsch», и подпрограмма HideGerman изменит его на «Hide English», –