LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-02-09

作ったもの

  • 高校教員の私が、授業プリント作成時に使えるwordマクロ有効テンプレート(dotm)を作りました。
  • 簡単なマクロを書きました。
  • ダウンロードはこちら

授業プリントの準備でめんどくさいこと

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

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

書いたマクロ

  • 正直、大したことは書いてないです。コメントの通り、フォルダがなければ出力先フォルダを作成して、PDFとhtmlを作成して保存するだけです。
  • このコードを、ショートカットキーから実行できるようにしておきます。
  • htmlに変換すると、ワードの表示形式がweb形式になるので、それを明示的に戻しています。
  • ファイルから拡張子を除くコードは、こちらをそのまま持ってきました。
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といいます、高校で物理を教えています。
  • 校務支援のソフト作成を細々とやっています。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0