2020-01-01から1年間の記事一覧

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プロパ…

範囲内でのセルの相対位置を求める

セルの範囲内での相対位置を求める 特定のセルが、指定範囲内の上から何番目にあるのかを求める必要があったので作った。 「指定範囲」は1列、「特定のセル」は1個限定。 セルの相対位置を返すFunction とりあえず、指定範囲を上から順に当たっていって、…

VBAでWordドキュメントに行番号を振る

VBAでWordドキュメントに行番号を振る 最近、〈脱・パワポ運動〉の一環として、説明用資料の類をWordで作成するようにしています。 パワポで作るいわゆる「ポンチ絵」のわかりにくさ/非効率を解消するのが目的です。 Wordで作成したドキュメントの「参照指…

Rangeオブジェクトの終端があるParagraphオブジェクトのインデックス番号を返すFunction(Word)

Rangeオブジェクトの終端があるParagraphオブジェクトのインデックス番号を返すFunction 更新頻度ガタ落ちですが、またしてもWordVBAネタです。 まずはコードを お急ぎの方は、コードをコピッペして使ってください。 リスト1 Public Function getParagraphI…

参照元に参照先の通し行番号を書き込む(2)

参照元に参照先の通し行番号を書き込む(2) たとえば、 みたいなドキュメントがあるとする。 参照指示性を高めるために、全ての行に通しで行番号を振っている。 これは、芦田宏直氏のアイディアで、詳しいことは氏の著書『シラバス論』(2019 晶文社)をご覧…

行高を適切に(?)調整する(Excel)

行高を適切に(?)調整する(Excel) 印刷時に行が切れてしまわないようにする方法を考えた。 考え方 フォントには、固有の行高がある。単位はポイント。で、Excelの行の高さ([Range].RowHeightプロパティの値)も単位はポイント。だから、次のような考え方…

表の中でのセルの位置を特定する(Word)

表の中でのセルの位置を特定する(Word) Excelの表に比べて、Wordの表は勝手に改竄されることが今まで少なかったので、完全に油断していた。 Wordで集めた大量のドキュメント。ファイル名の付け方がバラバラなので、整理が大変。そこで、ドキュメント内に記入…

参照元に参照先の通し行番号を書き込む(1)

参照元に参照先の通し行番号を書き込む(1) Wordの本文中で、参照箇所を明示したいときがある。段落番号とか見出しだったら、「相互参照」機能を使って文中に挿入できて、変更にも追随してくれるから良いのだが、通し行番号だけは、どうにもやり方がわからな…

通しの行番号を取得するFunction(Word)

通しの行番号を取得するFunction(Word) 前回 akashi-keirin.hatenablog.com の続き。 文書全体を通じての通しの行位置を取得するFunctionを作った 考え方 [Range].Informationプロパティを参照すれば、Rangeオブジェクトのあるページ位置(Information(wdAct…

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

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

動的リストの作成

動的リストの作成 前にいたことがある職場に今いる知人から相談を受けた。 秘伝のマクロが動かなくなって困っているらしい。 人助けのつもりでそのExcelを送ってもらって中を見てみた。 あー、確かにこんなのあったなー。おれは改造して使っていたけど。 簡…

Wordドキュメントに特定のキーワードが含まれているかどうかを判定する(Word)

Wordドキュメントに特定のキーワードが含まれているかどうかを判定する 困ったこと めちゃくちゃめんどくさい調べ物をして作ったWordドキュメントが、フラッシュメモリから消えていた。 今使っている安物のフラッシュメモリは、変なところで買ったやつで、し…

名簿作成マクロのスタイル(1)

名簿作成マクロのスタイル(1) Excelで名簿を扱うことが多い私。 これまで数多くの名簿を作成してきたなかで、最近だいぶスタイルが固まってきたので、一旦まとめておくことにした。 この先また考え方が変わるかも知れないが。 シートの役割に関するものはシ…

「ネオ写経」のすすめ

「ネオ写経」のすすめ 新型コロナウイルス対応で外出の自粛が求められる中、みなさまいかがお過ごしでしょうか。 ろくにテレワーク環境も整っていないのに、「とにかくテレワークだ!」的に導入されてしまった事業所も、それなりにあると思います。 個人的に…

FormattedTextプロパティの怪

FormattedTextプロパティの怪 『Writing Word Macros』という本を買った。 FormattedTextプロパティ Rangeオブジェクトのところを読んでいたら、FormattedTextというプロパティについて書いてあった。 へえ。そんなものがあったのか。 で、『Word 2013 devel…

Tableオブジェクトの怪(Word)

Tableオブジェクトの怪(Word) 実に気色悪い現象に出くわしたので報告。 表の余分な行を削除する たとえば、Wordでドキュメント内の表にデータを差し込むようなとき、 このように、使用しない行が生ずることがある。 宛先によってデータの数が異なるとき、テ…

改行マークの怪(Word)

改行マークの怪 前回 akashi-keirin.hatenablog.com の続き。 改行マークの正体とは? まず、 このようなドキュメント(笑)を用意し、画像のように改行マークを選択状態にしておく。 そして、イミディエイトに ?Asc(Selection.Range.Text) と入力して[Enter…

改行・改段落の怪(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ドキュメント化する作業にハマっている。今すぐ役に立つわけではないけれど、後で利用するときに楽かな、と思っ…

段落冒頭の半角スペースを除去する(Word)

各段落冒頭の半角スペースを取り除く Webで公開されている議事録の類をWordドキュメント化することが割と増えた。 しばらく待っているとPDFで正式な議事録が出される場合もあるが、割と時間がかかる上、PDFだと記載内容をコピッペする際に割とめんどくさい。…

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("阿修羅原"…

WordのRangeオブジェクトの謎挙動

WordのRangeオブジェクトの謎挙動 完全にわけがわからなくなってしまった。 Find.Executeメソッドで特定の文字列の箇所をRangeオブジェクトとして取得する 次のようなメソッドを作成し、現在のカーソル位置の直近にある指定した文字列の場所をRangeオブジェ…

Custom Event 入門

Custom Eventに挑戦 存在は知っていたけど、実はやったことなかった。 『VBA Developer's Handbook Second Edition』の説明が実にわかりやすかったので、ちょっとやってみようと思った。 まあ、単なる覚書です。 手順 今回は、三つのクラスモジュールを用い…

キーワードをカッコで括るマクロ(Word)

キーワードをカッコで括るマクロ Wordドキュメントの中に出てくるキーワードをカッコで括るマクロ。 キーワードの部分を取得する まずは、キーワードの部分を取得しなければならない。Rangeオブジェクトとして取得すれば、あとは[Range].Textプロパティを書…

Wordドキュメント上で指定した段落以外の段落を折り畳む

Wordドキュメント上で指定した段落以外の段落を折り畳む 段落を折り畳むことができる 知らなかった。 Wordの標準機能にあった。 百聞は一見に如かず。次をご覧いただきたい。 「百聞は一見に如かず」と偉そうに言った割にはわかりにくい画像ですまないw 見…