VBA覚書

Environメソッドというものがある

Environメソッドというものがある Wordの〝標準テンプレート〟ファイル(Normal.dotm)を、VBAでゴニョゴニョしたい、ということがあったとする。 その場合、当然ながら標準テンプレートファイルのあるディレクトリのパスを取得する必要がある。 自分一人し…

【覚書】[Shell32.Shell].Namespaceメソッドの引数でハマった話

【覚書】Shell32.Shell.Namespaceメソッドの引数でハマった話 結論だけ手っ取り早く知りたい方はコチラ。 何があったのか 事の発端:Shell32.Shellオブジェクトを使うマクロ かつて、 akashi-keirin.hatenablog.com こんなネタを書いていた。 レイト・バイン…

カーソルが段落の先頭にあると正しい段落インデックスが取得できない(Word)

カーソルが段落の先頭にあると正しい段落インデックスが取得できない [Range].Startプロパティと[Range].[Paragraphs].Countプロパティを用いる方法 Rangeオブジェクトの終端がある段落インデックスを取得する方法は、かつて akashi-keirin.hatenablog…

RemovePersonalInformationプロパティというものがある(Word)

RemovePersonalInformationプロパティというものがある 結論だけ知りたければ、コチラをどうぞ。 前回の方法 文書の「作成者」とか「最終更新者」の情報を消す方法として、前回は、 akashi-keirin.hatenablog.com こういう方法を紹介した。 しかし、これもあ…

RemoveDocumentInformationメソッドというものがある(Word)

RemoveDocumentInformationメソッドというものがある RemoveDocumentInformationメソッド 知らなかった。 Documentクラスのメンバ一覧を「オブジェクト ブラウザー」様で見ていて見つけた。 有名なのだろうか……。 使ってみる 例によって、私がマイPCで文書を…

文書の「作成者」を書き換える(Word)

文書情報を書き換える BuiltInDocumentPropertiesプロパティ 私は、Microsoftアカウントを、実にふざけた名前で登録してしまっている。 だから、自宅のPCで作成したドキュメントをもとに、仕事で使うドキュメントを作成したときなんかには、「作成者」とか「…

CharacterUnitFirstLineIndentプロパティ、おまえだったのか……(Word)

CharacterUnitFirstLineIndentプロパティ、おまえだったのか。いつもくりをくれたのは。 ついさきほど、 akashi-keirin.hatenablog.com こんなことを書いたところだが、マルちゃん麺づくりばりにあっさり解決したので、報告。 CharacterUnitFirstLineIndent…

字下げインデントを解除できない?(Word)

字下げインデントを解除できない? 実に不可思議な現象に出くわしたのでメモ。 なお、未解決である。 字下げインデントを解除する方法 段落の字下げインデントを司っているのは、ParagraphFormatオブジェクトのFirstLineIndentプロパティ。 理屈の上では、コ…

Document.SaveAs2メソッドでドキュメントを量産する(Word)

[Document].SaveAs2メソッドでドキュメントを量産する(Word) 同じ内容のドキュメントを、名前だけ変えて量産したい。 準備 まず、元になるドキュメント(笑)を準備する。 こいつを、ファイル名を変えて別のフォルダに保存する。 フォルダ構成は、 こんな…

段落の末尾に文字列を追加する(Word)

段落の末尾に文字列を追加する(Word) 単なる個人的な覚え書き。 段落の末尾に文字列を追加するぐらい、簡単にできると思っていたが、意外に苦戦したので、記録として残しておく。 手っ取り早く結論だけ知りたい方はコチラ以降をどうぞ。 このようなドキュ…

VBAでRangeオブジェクトの場所に連番フィールドを挿入する(Word)

VBAでRangeオブジェクトの場所に連番フィールドを挿入する(Word) ちょっとした覚書。 Fields.Addメソッドでフィールド追加 文書内にフィールドを追加するには、Fields.Addメソッドを使う。(参考) Fields.Addメソッドには、引数が四つ。 Range Type Text …

【意味】Paragraphオブジェクトの謎挙動【不明】(Word)

【意味】Paragraphオブジェクトの謎挙動【不明】 WordのVBAで、ParagraphオブジェクトのRange.Textプロパティを書き換えたら、わけのわからないことが起こったので報告。 もとの文書 もとのWord文書は、 このとおり。何の変哲もない、至ってフツーのドキュメ…

VBAで文書にインライン画像を挿入する(Word)

VBAで文書に画像を挿入するときの注意 最近、Wordでマニュアルとか手順書の類を作成することがやたら増えた。 PDF配布を前提とすると、画像をふんだんに盛り込むことができるので、非常に良いのだが、当然画像の挿入が非常にめんどくさくなってくる。 そこで…

VBAで段落前後のスペースを操作する(Word)

VBAで段落前後のスペースを操作する(Word) 軽くハマったので報告。 何がしたかったか Googleフォームで集めたアンケート結果の自由記述の部分をWordに移して整形したかった。 ただずらずらと並べただけだと読みづらいので、一人分づつ記述の間にスペースを…

FileSystemObjectのCreateFolderメソッドで半角スペースで終わるフォルダ名のフォルダを作ったらヤバい

FileSystemObjectでフォルダを作るときに気をつけた方がいいこと ちょっと恐怖体験をしたので報告。 フォルダ名の最後の文字が半角スペースになるようなフォルダを作る Scripting.FileSystemObjectオブジェクトの、CreateFolderメソッドを使ってフォルダを作…

【速報】シェイプを選択しているとVBEでショートカットキーが使えなくなる

【速報】シェイプを選択しているとVBEでショートカットキーが使えなくなる ちょっとした覚書。常識だったらすまん。 Wordの編集画面でシェイプを選択しているとVBEでショートカットキーが使えない もう標題の通り。 このような、 Wordに貼り付けた画像に、枠…

印刷マクロでちょっとハマる(Word)

印刷マクロでちょっとハマる(Word) フォルダ内にたくさんあるWordドキュメントの先頭ページだけを印刷する必要があって(どんな「必要」やねん。)、 ちょろっとマクロ書いて片付けるか! と意気込んで始めたにもかかわらず、ちょっとハマったので、報告。…

段落単位で置換できる(Word)

段落単位で置換できる Wordで、特定の範囲だけ置換したかった。 目次 標準機能による置換 Find.Executeメソッドによる置換 段落単位でFind.Executeメソッドを使う おわりに 標準機能による置換 普通、置換はこうする。 画像中に示した、「《 》」でくくられ…

Wordの表の中の文字列

Wordの表の中の文字列 けったいな現象が起こったので報告。 表の中の文字列 Wordドキュメント上に、次のような表を作成する。 で、次のコードで表の左上端セルの文字列を取り出してみる。 リスト1 標準モジュール Private Sub test() Dim tbl As Table Set …

VBEのフォントを変えたらバグった話

VBEのフォントを変えたらバグった話 フォントを変えたらVBEがバグった VBEのフォントを、Ricty Diminished Discordに変えたら、VBEがおかしくなった。 [ツール]→[オプション]→[エディターの設定]の順にクリックすると、「応答なし」になって、Excelが…

Callbackメソッドを追加する

Callbackメソッドを追加する 前回 akashi-keirin.hatenablog.com 作成したDekosukeクラス。 そのイベントリスナ用ImmWndCallbackクラスに、新たなメソッドを追加してみる。 目次 こんなことができます インターフェースIDekosukeCallbackの変更 ImmWndCallba…

Custom EventをCallbackに変える

Custom EventをCallbackに変える クラスモジュールを用いて作ったオブジェクトには、イベントを持たせることができる。 akashi-keirin.hatenablog.com 今回は、このCustom Eventと同様のことを、別のやり方でやってみる。 Custom Eventの場合は、Event、Rais…

Worksheetを継承したクラスを作る(8)

ラップしたオブジェクトのイベントを検知する めっちゃ久しぶりに akashi-keirin.hatenablog.com の続き。 ちょっと何言ってるかわからないかも知れないので説明する。 たとえば、WorksheetオブジェクトをラップしたPoweredSheetという自作クラスがあるとす…

WMIのWin32_Printerクラス

WMIのWin32_Printerクラス VBAでプリンタまわりを操作したいなあと思って、あれこれ調べていると、「WMI(Windows Management Instrumentation)」というものを使うという道があることがわかった。 そうしょっちゅう使うわけでもないが、覚書として記してお…

自作クラスのデフォルトメンバに関する大発見 その2

自作クラスのデフォルトメンバに関する発見 その2 このとき akashi-keirin.hatenablog.com から10箇月の時を経て、またまた世紀の大発見をしたので、紹介します。 あのときの方法 詳しくはコチラを読んでいただきたいが、早い話が、 インスタンスを突っ込ん…

VBAでプリンタを変更する

プリンタの切り替え VBAで、使用中のプリンタを切り替える方法。 目次 かつての考え方 こんな方法があったのか おわりに かつての考え方 Application.ActivePrinterプロパティで切り替える VBAでプリンタを切り替えるには、Application.ActivePrinterプロパ…

各ページの行数を取得する(Word)

各ページの行数を取得する(Word) Wordドキュメントの、各ページの行数を調べる方法を編み出した(笑)ので、覚書として記しておく。 カーソルのあるページの総行数を取得する [Document].Bookmarks.Item("\Page")の返り値 BookmarksコレクションのItemメソッ…

改行・改段落の怪(Word)

改行・改段落の怪 前回 akashi-keirin.hatenablog.com の続き。 前回のリスト1を再掲する。 前回のリスト1 'テキストの置換' Private Sub replaceText(ByVal str1 As String, _ With Selection.Find Call .ClearFormatting Call .Replacement.ClearFormatt…

VBAによる置換の怪(Word)

VBAによる置換の怪 ちょっと変な現象に出くわしたので報告。 無駄な改段落マークを削除する 最近、Webページ上で公開されている議事録の類をWordドキュメント化する作業にハマっている。今すぐ役に立つわけではないけれど、後で利用するときに楽かな、と思っ…

Custom Collection Classのすすめ(1)

Custom Collection Classのすすめ(1) PersonクラスとPersonsクラス ちょっと次のコードをご覧いただきたい。 リスト1 Private Sub test01() Dim proWrestlers As Persons Set proWrestlers = New Persons With proWrestlers Call .Add Call .Add("阿修羅原"…