wordファイルをhtml,pdfに変換するワードマクロテンプレート

## 作ったもの
* 高校教員の私が、授業プリント作成時に使えるwordマクロ有効テンプレート(dotm)を作りました。
* 簡単なマクロを書きました。
* ダウンロードは[こちら](https://drive.google.com/drive/folders/1wW-H83-znyqto2lH1hOR5VeZRaJGSGbz)。


## 授業プリントの準備でめんどくさいこと
* 授業プリントの通し番号がずれる！
    * 「やっぱプリントNo.8の前にもう1回演習プリントやっておくかー」なんてことがよくあります。そうすると、授業プリントの通し番号を振りなおさなければなりません。めんどくさくてやってられない！
    * けど、試験範囲を生徒に示すときなど、通し番号のずれというのは意外とストレスになる...
    * 授業プリントのファイル名だけ変えれば、勝手にプリント内部の番号とかが変更されないかなあ...
* 授業プリントをPDFに変換するのがめんどくさい！
    * 自宅学習用に、PDFをGoogle Classroom等で共有することが増えています。
    * ワードで作成したデータをPDFに直して、所定フォルダに保存して、アップロードして...という手順は、意外とめんどくさいものです。途中で通し番号がずれた日にはこっちまで変えなきゃなりません。
    * 何とか、ワードの保存時に同時に指定の場所にPDFを出力したい...
* PDFをスマホの画面上で見ると、文字が小さい！
    * 当たり前ですが、授業で使うプリントをスマホの画面で見るのは小さすぎます。
    * せっかくデータで作っているのだから、htmlに変換してデバイスにあった幅で見れるようにできればいいなあ...

***という思いがあったので、ワードマクロを作成しました。***

## 書いたマクロ
* 正直、大したことは書いてないです。コメントの通り、フォルダがなければ出力先フォルダを作成して、PDFとhtmlを作成して保存するだけです。
* このコードを、ショートカットキーから実行できるようにしておきます。
* htmlに変換すると、ワードの表示形式がweb形式になるので、それを明示的に戻しています。
* ファイルから拡張子を除くコードは、[こちら](https://blog.goo.ne.jp/kowaza583/e/036823e093fd48350230e9d4f32f3076)をそのまま持ってきました。

``` vb
Sub htmlに出力する()
    fn = ActiveDocument.Path & "\" & ActiveDocument.Name
    pdffn = GetFNameFromFStr(ActiveDocument.Name) & ".pdf"
    htmlfn = GetFNameFromFStr(ActiveDocument.Name) & ".html"

    ChangeFileOpenDirectory ActiveDocument.Path

    Documents(fn).Save

    pdfDir = ActiveDocument.Path & "\PDFs"
    htmlDir = ActiveDocument.Path & "\HTMLs"
    
    
    ' wordと同じ場所にフォルダがなければ作る
    If Dir(pdfDir, vbDirectory) = "" Then
        MkDir pdfDir
    End If
    If Dir(htmlDir, vbDirectory) = "" Then
        MkDir htmlDir
    End If


    'pdf出力
    ActiveDocument.ExportAsFixedFormat _
        OutputFileName:=pdfDir & "\" & pdffn, _
        ExportFormat:=wdExportFormatPDF

    'htmlとして名前を付けて保存
    ActiveDocument.SaveAs2 FileName:=htmlDir & "\" & htmlfn, FileFormat:=wdFormatFilteredHTML, _
        LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=0
    
    '元のフォルダをひらいてhtmlを閉じる
    Documents.Open fn
    Documents(htmlfn).Close
    
    '表示形式をもとに戻す
    If ActiveWindow.View.SplitSpecial = wdPaneNone Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    Else
        ActiveWindow.View.Type = wdPrintView
    End If
    
    MsgBox "htmlデータを保存しました。"
End Sub

Function GetFNameFromFStr(ukeFileName As String) As String
'ファイル名から拡張子を除いた文字列を取得する

Dim sFileStr As String
Dim lFindPoint As Long
Dim lStrLen As Long

'文字列の右端から"."を検索し、左端からの位置を取得する
lFindPoint = InStrRev(ukeFileName, ".")

'拡張子を除いたファイル名の取得
sFileStr = Left(ukeFileName, lFindPoint - 1)

GetFNameFromFStr = sFileStr

End Function
```

## 最後に
* pdfフォルダごとclassroomにアップロード、htmlフォルダごとレンタルサーバーのFTPにもりっと転送さえ定期的に行えば、授業資料公開がサクッとできます。
* 私はそもそものワードファイルをGoogleドライブに置いているので、作成されたPDFsフォルダの公開URLを生徒に伝えています。あとは、自動でファイルが追加されていくので、特にアップロード等をしなくてもファイル共有ができます。
* 正直、ワードマクロなんかよりも、***ワードのスタイル機能をしっかり整えることの方が大事***だということに気づいた。
* 図形は、ずれます。まあ、ご愛嬌ってことで...

## 作者
* [phys-ken](https://phys-ken.github.io/phys-ken/)といいます、高校で物理を教えています。
* 校務支援のソフト作成を細々とやっています。