作ったもの
- 高校教員の私が、授業プリント作成時に使える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といいます、高校で物理を教えています。
- 校務支援のソフト作成を細々とやっています。