質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

241閲覧

Excel VBA の新しいフォントパターンの作成

yu1447

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2024/07/19 14:23

編集2024/07/19 14:26

実現したいこと

Excel VBAからパワーポイントファイルの日本語文字用のフォントを変更したい

発生している問題・分からないこと

Excel VBAからパワポファイルを新規作成し、
スライドマスターの新しいテーマのフォントを変更したい。

しかし、以下のコードを実行したところ、
英数字用のフォントは指定のフォントに変更されますが、
日本語文字用のフォントが指定のフォントに変更されません。

ExcelとPowerPointはOffice 365を使用しています。

英数字と日本語共に変更できるようにしたいのですが、
どなたか解決方法をご存知の方がいらっしゃいましたらご教示のほどお願いいたします。

該当のソースコード

VBA

1Option Explicit 2 3Sub パワポファイル作成() 4 5Dim ppApp as PowerPoint.Application 6Dim ppPresentation as PowerPoint.Presentation 7 8Set ppApp = CreateObject("PowerPoint.Application") 9Set ppPresentation = ppApp.Presentation.Add 10 11ppPresentaion.SlideMaster.Theme.ThemeFontScheme.MajorFont(msoThemeLatin) = "Meiryo UI" 12ppPresentaion.SlideMaster.Theme.ThemeFontScheme.MinorFont(msoThemeLatin) = "Meiryo UI" 13ppPresentaion.SlideMaster.Theme.ThemeFontScheme.MajorFont(msoThemeEastAsian) = "Meiryo UI" 14ppPresentaion.SlideMaster.Theme.ThemeFontScheme.MinorFont(msoThemeEastAsian) = "Meiryo UI" 15 16End Sub

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

自分なりにコードについて調べてみましたが、うまく動作させる方法は分かっていません。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2024/07/20 03:17

> 日本語文字用のフォントが指定のフォントに変更されません。 コードは実行可能だがその実行結果はコード実行前と変わっていない、という事でしょうか?
yu1447

2024/07/20 04:27

meg_さん コードはエラーなどなく実行できており、 英数字のフォントは変わるのですが、日本語のフォントは変わらない状態です。
guest

回答1

0

ベストアンサー

Excel VBAからパワポファイルを新規作成し、
スライドマスターの新しいテーマのフォントを変更

英数字と日本語共に変更できるようにしたい

vba

1Sub CreateNewPresentation() 2 3 Dim pptApp As Object 'PowerPoint.Application 4 5 On Error Resume Next 6 '起動中の PowerPoint アプリケーションのインスタンスを参照 7 Set pptApp = GetObject(, "PowerPoint.Application") 8 '起動しているインスタンスが見つからない場合 9 If Err.Number <> 0 Then 10 Err.Clear 11 On Error GoTo 0 12 'PowerPoint アプリケーションの新規インスタンスを生成して参照 13 Set pptApp = CreateObject("PowerPoint.Application") 14 Application.Visible = True 15 End If 16 On Error GoTo 0 17 18 Dim pptPresentation As Object 'PowerPoint.Presentation 19 20 'PowerPoint プレゼンテーションを新規作成 21 Set pptPresentation = pptApp.Presentations.Add 22 23 'プレゼンテーションの既定の言語を日本語に設定 24 pptPresentation.DefaultLanguageID = msoLanguageIDJapanese 25 26 Dim strThemeXmlFilePath As String 27 28 '独自のテーマフォント設定を定義した XML ファイルを生成する処理を実行し、生成されたファイルの絶対パスを取得する 29 strThemeXmlFilePath = CreateThemeFontSchema(FontSchemaName:="ユーザー定義のテーマフォント1", _ 30 MajorFontNameLatin:="Meiryo UI", _ 31 MinorFontNameLatin:="Meiryo UI", _ 32 MajorFontNameEA:="Meiryo UI", _ 33 MinorFontNameEA:="Meiryo UI") 34 35 'XML ファイルの生成に成功した場合 36 If strThemeXmlFilePath <> "" Then 37 'XML ファイルを読み込み、スライドマスターのテーマフォント設定に適用する 38 pptPresentation.SlideMaster.Theme.ThemeFontScheme.Load strThemeXmlFilePath 39 End If 40 41 'スライドマスター表示(サムネイル付き)モードに切り替える 42 pptApp.ActiveWindow.ViewType = 12 'ppViewMasterThumbnails 43 44 Set pptPresentation = Nothing 45 Set pptApp = Nothing 46 47End Sub 48 49'独自のテーマフォント設定を定義した XML ファイルを生成するユーザー定義関数 50Private Function CreateThemeFontSchema(ByVal FontSchemaName As String, _ 51 ByVal MajorFontNameLatin As String, _ 52 ByVal MinorFontNameLatin As String, _ 53 ByVal MajorFontNameEA As String, _ 54 ByVal MinorFontNameEA As String) As String 55On Error GoTo Err_CreateThemeFontSchema 56 57 Dim strXMLPath As String 58 59 '出力先ファイルパスの生成 60 strXMLPath = Environ("AppData") & _ 61 "\Microsoft\Templates\Document Themes\Theme Fonts\" & _ 62 FontSchemaName & ".xml" 63 64 Dim domDoc As Object 'MSXML2.DOMDocument 65 Dim domNodeDeclare As Object 'MSXML2.IXMLDOMProcessingInstruction 66 Dim domNodeFontScheme As Object 'MSXML2.IXMLDOMNode 67 Dim domNodeMajorFont As Object 'MSXML2.IXMLDOMNode 68 Dim domNodeMinorFont As Object 'MSXML2.IXMLDOMNode 69 Dim domAttribute As Object 'MSXML2.IXMLDOMAttribute 70 Dim domElement As Object 'MSXML2.IXMLDOMElement 71 72 'XML ドキュメントの作成 73 Set domDoc = CreateObject("MSXML2.DOMDocument") 74 75 With domDoc 76 77 '宣言部ノードの追加 78 Set domNodeDeclare = .createProcessingInstruction("xml", _ 79 "version=""1.0"" encoding=""UTF-8"" standalone=""yes""") 80 .appendChild domNodeDeclare 81 82 'フォント定義ノードの追加 83 Set domNodeFontScheme = .appendChild(.createElement("a:fontScheme")) 84 85 Set domAttribute = .createAttribute("xmlns:a") 86 domAttribute.Value = "http://schemas.openxmlformats.org/drawingml/2006/main" 87 domNodeFontScheme.Attributes.setNamedItem domAttribute 88 89 Set domAttribute = .createAttribute("name") 90 domAttribute.Value = FontSchemaName 91 domNodeFontScheme.Attributes.setNamedItem domAttribute 92 93 '見出しフォントの設定 94 Set domNodeMajorFont = domNodeFontScheme.appendChild(.createElement("a:majorFont")) 95 96 'ラテン語(英数字) 97 Set domElement = domNodeMajorFont.appendChild(.createElement("a:latin")) 98 Set domAttribute = .createAttribute("typeface") 99 domAttribute.Value = MajorFontNameLatin 100 domElement.Attributes.setNamedItem domAttribute 101 102 '東アジア言語(日本語) 103 Set domElement = domNodeMajorFont.appendChild(.createElement("a:ea")) 104 Set domAttribute = .createAttribute("typeface") 105 domAttribute.Value = MajorFontNameEA 106 domElement.Attributes.setNamedItem domAttribute 107 108 '複合スクリプト言語 109 Set domElement = domNodeMajorFont.appendChild(.createElement("a:cs")) 110 Set domAttribute = .createAttribute("typeface") 111 domAttribute.Value = "" 112 domElement.Attributes.setNamedItem domAttribute 113 114 '本文フォント要素の設定 115 Set domNodeMinorFont = domNodeFontScheme.appendChild(.createElement("a:minorFont")) 116 117 'ラテン語(英数字) 118 Set domElement = domNodeMinorFont.appendChild(.createElement("a:latin")) 119 Set domAttribute = .createAttribute("typeface") 120 domAttribute.Value = MinorFontNameLatin 121 domElement.Attributes.setNamedItem domAttribute 122 123 '東アジア言語(日本語) 124 Set domElement = domNodeMinorFont.appendChild(.createElement("a:ea")) 125 Set domAttribute = .createAttribute("typeface") 126 domAttribute.Value = MinorFontNameEA 127 domElement.Attributes.setNamedItem domAttribute 128 129 '複合スクリプト言語 130 Set domElement = domNodeMinorFont.appendChild(.createElement("a:cs")) 131 Set domAttribute = .createAttribute("typeface") 132 domAttribute.Value = "" 133 domElement.Attributes.setNamedItem domAttribute 134 135 'XML ファイルとして保存 136 .Save strXMLPath 137 138 End With 139 140 'XML ファイルの絶対パスを戻り値として返す 141 CreateThemeFontSchema = strXMLPath 142 143Exit_CreateThemeFontSchema: 144 145 Set domAttribute = Nothing 146 Set domElement = Nothing 147 Set domNodeMinorFont = Nothing 148 Set domNodeMajorFont = Nothing 149 Set domNodeFontScheme = Nothing 150 Set domDoc = Nothing 151 152 Exit Function 153 154Err_CreateThemeFontSchema: 155 156 Dim strErrMsg As String 157 158 strErrMsg = Err.Number & ": " & Err.Description 159 Debug.Print strErrMsg 160 161 MsgBox strErrMsg, vbCritical, "実行時エラー (CreateThemeFontSchema)" 162 163 Resume Exit_CreateThemeFontSchema 164End Function

投稿2024/07/22 07:29

sk.exe

総合スコア894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu1447

2024/07/24 13:07

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問