VBA覚書

改行・改段落の怪(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("阿修羅原"…

Custom Event 入門

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

選択部分のフィールドコードだけを表示させる(Word)

選択範囲のフィールドコードを表示させる キーボード上での[Shift] + [ F9 ](半角モード)をVBAで実現する方法。 これまで、[Window].[View].ShowFieldCodesプロパティのオンオフ(True/False)切り替えしか知らなかった。 ちょこちょこっと調べてみたら、…

安心の実行結果(Word)

安心の実行結果 先日、 akashi-keirin.hatenablog.com このような、衝撃的な実行結果についてお伝えした。 今回は、安心の実行結果である。 フォントサイズは0.5の倍数のみ? 今まであまり気にしたことはなかったのだが、ルビのフィールドコードをいじくって…

ルビが施された部分のフォント情報を取得する(Word)

ルビが設定された部分のフォント情報を取得する 選択箇所のフォント情報を取得するときには、Selection.Fontオブジェクトにアクセスすればよい。たとえば、 Selection.Font.Name とすれば、カーソル位置のフォント名が取得できる。 ……はずだ。 ルビが設定さ…

衝撃の実行結果(Word)

衝撃の実行結果 最近、WordのVBAでのルビ操作にハマっている。 [Range].PhoneticGuideメソッドでルビを振るのだが、あまり細かい調整ができず、さりとてルビを振った後Field.Code.Textプロパティの値をVBAで書き換えると、 ドキュメントを開きなおしたときに…

マクロでルビ振りをするときの注意(Word)

マクロでルビ振りをするときの注意(Word) Word VBA のバグを発見したので、ここで盛大に晒しますw [Range].PhoneticGuideメソッドでルビを振る まず、次のようなドキュメント(笑)を用意する。 選択部分を見たらわかるように、フォントは「MS 明朝」。 …

Selection.MoveRightメソッド(Word)の挙動に注意

[Selection].MoveRightメソッドの挙動に注意 [Selection].MoveRightメソッド([Selection].MoveLeftメソッド)を使用していて軽くハマったので、記しておく。 [Selection].MoveRightメソッド [Selection].MoveRightメソッドというのは、Wordでドキュメント…

Find.Executeメソッドのハマりを回避する(Word)

Find.Executeメソッドのハマりを回避する(Word) 前回 akashi-keirin.hatenablog.com お知らせしたように、Selection.Collapseメソッドが(仕方がないにせよ)カーソルが末尾にあるときに悲しい挙動をしてしまうせいで、Find.ExecuteメソッドをDo ~ Loopで回…

Selection.Collapseメソッドの挙動に注意(Word)

Selection.Collapseメソッドの挙動に注意 前回 akashi-keirin.hatenablog.com 紹介した、次のハイライト箇所を取得するgetNextHighLightメソッド。 検索箇所を取得した後、Selection.Collapseメソッドを用いて、選択箇所を後方に向けて潰すようにしている。 …

配列もCollectionも使わないデータ構造(Stack)

配列もCollectionも使わないデータ構造 久しぶりに 『VBA Developer's Handbook』を読んだ。 「Chapter 6」の「Creating Dynamic Data Structures Using Class Modules」のところに、実に面白いことが書いてあったので、やってみた。 Stackを二つのクラスモ…

Shift_JIS と UTF-8 に悩まされた話

文字コードェ…… Foobar2000のプレイリストファイルは、拡張子が「.m3u8」というけったいなもの。こいつをエディタで開くと、 こんなふうに、登録した楽曲データのフルパスを書き込んでいるだけだった。 ただ、うっとうしいのがドライブ名がジカ書きなところ…

Friendスコープの謎

Friendスコープの謎 クラスモジュールなどのオブジェクトモジュールでは、プロパティやメソッドのアクセス修飾子としてFriendを使うことができる。 ごく一部の人の間で有名な事実である。(ごく一部の人の間で有名であることを「有名」と言うのかどうかは知…

Worksheet.Columnsプロパティの引数?

Worksheet.Columnsプロパティの引数とは? [Worksheet].Columnsプロパティの引数なんて、てっきりIndex As Variantだと思っていたのだが、みんな大好き『Office デベロッパー センター』のWorksheet.Columns property (Excel)の項には引数に関する記載がない…

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

CircleInvalidというメソッドがある 知ってました? 私は知りませんでした。 大絶賛シリーズPoweredSheetプロジェクトに取り組んでいるときに発見。 WorksheetクラスのメソッドにCircleInvalidというメソッドがあったのだった。 名前だけ見ても何をするメソ…

VBAでwavを鳴らしたら珍現象が起きた話

VBAでwavを鳴らしたらち~んw珍現象が起きた 解決方法を知っている人がいたら、教えろ教えてください。 KitchenTimerクラス 前に、 akashi-keirin.hatenablog.com こういうものを作ったら、職場で割とウケたので、「残り時間を表示するカウントダウンタイマ…

ユーザが選択したファイル名を取得する(4)

ユーザが選択したファイル名を取得する 前回までの三回 akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com で、ユーザにファイルを選ばせるところまでたどり着いた。 いよいよ、選択させたファイルのフルパスを取得…

ユーザが選択したファイル名を取得する(3)

ユーザが選択したファイル名を取得する 前々回 akashi-keirin.hatenablog.com 前回 akashi-keirin.hatenablog.com の続き。 ファイルフィルタを設定する フォルダ選択と違って、ファイルには「種類」というものがあるので、いつもいつも「すべてのファイル」…

ユーザが選択したファイル名を取得する(2)

ユーザが選択したファイル名を取得する 前回 akashi-keirin.hatenablog.com の続きです。 ダイアログボックスのタイトルを設定する これはメッチャ簡単。Filedialog.Titleプロパティを設定すれば良い。 リスト1 Private Sub test() Dim fpDialog As FileDia…

ユーザが選択したファイル名を取得する(1)

ユーザが選択したファイルのパスを取得する Application.FileDialogオブジェクトを使います。 FileDialogオブジェクトとは おなじみ、Office デベロッパー センターのFileDialog Objectの項には、 Remarks Use the FileDialog property to return a FileDial…

FileSystemObjectによるファイル取り出しの順序

FileSystemObjectによるファイル取り出しの順序 おなじみ、OFFICE TANAKAのコチラのページによると、「Dir関数が返すファイルの順番」は、 ディスクのフォーマットによって異なります。最近主流のNTFSでフォーマットされているディスクでは、ファイルが保存…

引数二つのProperty

引数二つのProperty 前回 akashi-keirin.hatenablog.com 作成したCaptionBoxクラス。 テキストボックスの塗りつぶし色と透過性という基本的なセッティングをするのに、たとえば With captBox.Fill .ForeColor.RGB = vbBlack .Transparency = 0.4 End With と…

目障りなエラーチェックマークを除去する

目障りなエラーチェックマークを除去する 状況 セルに数字を文字列で書き込んだ場合、 このように実に目障りなことになる。 セルの左隅の緑色のスピードくじを一掃したい。 スピードくじを一掃するメソッド おなじみMicrosoft DocsのRange.Errors propertyの…

Enumの謎挙動

Enumの謎挙動 前々から気になっていたこと。 小ネタです。 誤入力防止のための記法 変数名などの誤入力に気づきやすくするために、パスカル記法やキャメル記法を使っている人はかなり多いと思う。 VBAの場合、変数名を、たとえばtooYoungToDieと宣言しておけ…

Enumの名前の重なり

Enumの名前の重なり VBAでEnumを使い始めの頃、その当時はPublicとPrivateの使い分けがいい加減だったこともあり、ずいぶん名前の重なりに苦労した。 そこで、最近は列挙体名、要素名それぞれにシンプルなルールに基づいて接頭辞を付け、極力重複が発生しな…

Len関数の返り値

Len関数の返り値 Len関数に文字列ではなく数値を渡してしまい、意図しない値が返っていたために小ハマりしてしまったので、反省も込めて覚え書き的に記しておく。 Len関数に数値を渡すとどうなるか たとえば、次のようなコードの場合。 Dim hoge As Long hog…

Worksheet.PageSetup.FitToPagesTall/Wideの設定はリアルタイムで反映されない

[Worksheet].PageSetup.FitToPagesTall/Wideの設定はリアルタイムで反映されない 知ってました? 私はこのことに気づかなかったせいで、お盆の期間だというのにドハマりして残業してしまいました。 状況 次のようなシートがあるとする。 四隅のち~んwを一…

FileSystemObjectを用いてテキストファイルを読み込む

FileSystemObjectを用いてテキストファイルを読み込む 〈FileSystemObject使い宣言〉をしていた(いつ?!)にもかかわらず、 akashi-keirin.hatenablog.com このときは、テキストファイルの読み込みにFileSystemObjectを利用していなかった。 深く反省して…