Jak mogę zmienić język wszystkich slajdów w Powerpoincie na raz?
Chcę zmienić język proofingu wszystkich slajdów w Powerpoincie. Próbowałem ustawić język poprzez menu Preferencje językowe, ale to tylko zmienia język dla nowych Powerpointów.
Chcę zmienić język proofingu wszystkich slajdów w Powerpoincie. Próbowałem ustawić język poprzez menu Preferencje językowe, ale to tylko zmienia język dla nowych Powerpointów.
Aby łatwo zmienić język entire PowerPoint'a, otwórz zakładkę View i wybierz Outline view.
Teraz naciśnij
Podobnie, gdy masz już wszystko wybrane, możesz zmieniać inne rzeczy, takie jak czcionki, kolory itp. Chociaż oczywiście w wielu przypadkach lepiej jest to zrobić zmieniając slide-master, prezentacja, która miała wiele edytorów może mieć wiele “twardych” zestawów formatowania, które odbiegają od podstawowego master'a i muszą być zresetowane, aby były spójne. Można również zresetować poszczególne slajdy do stylu master, ale może to spowodować przesunięcie się uchwytów, co może być niepożądane w niektórych sytuacjach.
Jak dla mnie - PowerPoint restart był potrzebny. Prawdopodobnie dlatego, że ja również zmieniłem Editing Language :
Używając Powerpoint 2010 otworzyłem menu Zarys -
Zaznaczyłem cały tekst (Ctrl+A), otworzyłem menu językowe i ustawiłem język proofingu
I to zadziałało!
Menu językowe znajduje się na zakładce Taśma recenzji (po zakładce Pokaz slajdów i nie jest widoczne na zrzucie ekranu).
Istniejące odpowiedzi działają na tekst, który jest obecny w zarysie. Niestety w moim przypadku nie objęło to znaczącej części tekstu, w tym rycin, tabel itp.
To makro rozwiązało dla mnie problem :
Sub ChangeProofingLanguageToEnglish()
Dim j, k, m, scount, fcount, gcount As Integer
scount = ActivePresentation.Slides.Count
For j = 1 To scount
fcount = ActivePresentation.Slides(j).Shapes.Count
For k = 1 To fcount
If ActivePresentation.Slides(j).Shapes(k).HasTextFrame Then
ActivePresentation.Slides(j).Shapes(k) _
.TextFrame.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
If ActivePresentation.Slides(j).Shapes(k).Type = msoGroup Then
gcount = ActivePresentation.Slides(j).Shapes(k).GroupItems.Count
For m = 1 To gcount
If ActivePresentation.Slides(j).Shapes(k).GroupItems.Item(m).HasTextFrame Then
ActivePresentation.Slides(j).Shapes(k).GroupItems.Item(m) _
.TextFrame.TextRange.LanguageID = msoLanguageIDEnglishUS
End If
Next m
End If
Next k
Next j
End Sub
Użyty w powyższym makrze “msoLanguageIDEnglishUS” może być zastąpiony przez dowolny język. Pełna lista języków znajduje się w ten artykuł
(Uznanie dla Ganesha Kumara, który zamieścił oryginalne makro tutaj . Dodałem wsparcie dla pierwszego poziomu grupowania kształtów. Aby jeszcze bardziej ją ulepszyć, makro może być rekurencyjne w poszukiwaniu grup, które zawierają inne grupy, itp.)
Poprawiłem na odpowiedź Inigo aby dostarczyć rekurencyjną wersję, która zmienia wszystkie elementy na pożądany język.
Ta wersja będzie rekurencyjnie badać każdy kształt, który jest typem grupy. Niektóre eksperymenty sugerują, że msoGroup
i msoSmartArt
są typami grupowymi - możesz je dodać do tej listy, jeśli znajdziesz inne typy kształtów, które mogą zawierać obiekty tekstowe.
Sub ChangeProofingLanguageToEnglish()
Dim j As Long, k As Long
Dim languageID As MsoLanguageID
'Set this to your preferred language
languageID = msoLanguageIDEnglishUK
For j = 1 To ActivePresentation.Slides.Count
For k = 1 To ActivePresentation.Slides(j).Shapes.Count
ChangeAllSubShapes ActivePresentation.Slides(j).Shapes(k), _
languageID
Next k
Next j
End Sub
Sub ChangeAllSubShapes(targetShape As shape, languageID As MsoLanguageID)
Dim i As Long
If targetShape.HasTextFrame Then
targetShape.TextFrame.TextRange.languageID = languageID
End If
Select Case targetShape.Type
Case msoGroup, msoSmartArt
For i = 1 To targetShape.GroupItems.Count
ChangeAllSubShapes targetShape.GroupItems.Item(i), languageID
Next i
End Select
End Sub
Bazując na odpowiedziach Inigo, Duncana, Marii i DomDeva, to działa dla kształtów, tabel, grup, SmartArt, teraz i w przyszłości:
Sub ChangeProofingLanguageToFrench()
Dim j, k As Integer
Dim languageID As MsoLanguageID
'Set this to your preferred language
languageID = msoLanguageIDFrench
'Loop all the slides in the document, and change the language
For j = 1 To ActivePresentation.Slides.Count
For k = 1 To ActivePresentation.Slides(j).Shapes.Count
ChangeAllSubShapes ActivePresentation.Slides(j).Shapes(k), languageID
Next k
Next j
'Loop all the master slides, and change the language
For j = 1 To ActivePresentation.SlideMaster.CustomLayouts.Count
For k = 1 To ActivePresentation.SlideMaster.CustomLayouts(j).Shapes.Count
ChangeAllSubShapes ActivePresentation.SlideMaster.CustomLayouts(j).Shapes(k), languageID
Next k
Next j
'Change the default presentation language, so that all new slides respect the new language
ActivePresentation.DefaultLanguageID = languageID
End Sub
Sub ChangeAllSubShapes(targetShape As Shape, languageID As MsoLanguageID)
Dim i As Integer, r As Integer, c As Integer
If targetShape.HasTextFrame Then
targetShape.TextFrame.TextRange.languageID = languageID
End If
If targetShape.HasTable Then
For r = 1 To targetShape.Table.Rows.Count
For c = 1 To targetShape.Table.Columns.Count
targetShape.Table.Cell(r, c).Shape.TextFrame.TextRange.languageID = languageID
Next
Next
End If
Select Case targetShape.Type
Case msoGroup, msoSmartArt
For i = 1 To targetShape.GroupItems.Count
ChangeAllSubShapes targetShape.GroupItems.Item(i), languageID
Next i
End Select
End Sub
Wersja Duncana działa dobrze we wszystkim oprócz stołów. Znalazłem inny kod, który zdaje się również działać z tabelami: https://stackoverflow.com/questions/4735765/powerpoint-2007-set-language-on-tables-charts-etc-that-contains-text
Public Sub changeLanguage() On Error Resume Next Dim gi As GroupShapes '<-this was added. used below 'lang = "English" lang = "Norwegian" 'Determine language selected If lang = "English" Then lang = msoLanguageIDEnglishUK ElseIf lang = "Norwegian" Then lang = msoLanguageIDNorwegianBokmol End If 'Set default language in application ActivePresentation.DefaultLanguageID = lang 'Set language in each textbox in each slide For Each oSlide In ActivePresentation.Slides Dim oShape As Shape For Each oShape In oSlide.Shapes 'Check first if it is a table If oShape.HasTable Then For r = 1 To oShape.Table.Rows.Count For c = 1 To oShape.Table.Columns.Count oShape.Table.Cell(r, c).Shape.TextFrame.TextRange.LanguageID = lang Next Next Else Set gi = oShape.GroupItems 'Check if it is a group of shapes If Not gi Is Nothing Then If oShape.GroupItems.Count > 0 Then For i = 0 To oShape.GroupItems.Count - 1 oShape.GroupItems(i).TextFrame.TextRange.LanguageID = lang Next End If 'it's none of the above, it's just a simple shape, change the language ID Else oShape.TextFrame.TextRange.LanguageID = lang End If End If Next Next End Sub
Oprócz odpowiedzi udzielonej przez Mastergalen oraz komentarzy dotyczących nowo wpisywanego tekstu:
Jeśli zauważysz, że język ten będzie się automatycznie zmieniał przy każdym rozpoczęciu wpisywania nowego tekstu (co jest bardzo irytujące), musisz zmienić obecny język domyślny dla PowerPointa:
Windows Taskbar
(tak, właściwie nie w PowerPoincie), sprawdź czy Language bar
jest widoczne, Control Panel > Region and Language > Keyboards and Languages
. Kliknij na Change keybords...
, przełącz na zakładkę Language bar
i zaznacz opcję Docked in the taskbar
. (to jest z Win7, więc może być nieco inaczej w innych wersjach). Language bar
na pasku zadań, kliknij na kod języka i przełącz na EN (jeśli chcesz obecnie używać angielskiego w PowerPoint). Od teraz cały nowy tekst w programie PowerPoint będzie w wybranym języku :-) Zrobiłem dla siebie dodatek w 2014 roku, który nadal działa dobrze w PowerPoint 2016. https://github.com/wobba/officeaddin/releases/tag/v1.0.1
Skanuje on w poszukiwaniu używanych języków i pozwala na zmianę wszystkich jednocześnie, zapętlając się.