VBAクラス・モジュール

ユーザーフォームはNewできるか

ユーザーフォームをNewしてみる ユーザーフォームって、クラスモジュールに似てね? クラスモジュールを使っていなかった頃はなんとも思ってなかったが、クラスモジュールをよく使うようになって、改めてユーザーフォームを使ってみると、結構共通点があった…

Excelのブックを複製するクラス

子ブックを生み出すクラス 元のブックを開いたままでコピーを作成する 元のブックのシートにデータを入力しては別名で保存して、同じ様式でデータの異なるたくさんのブックを作りたいというときがある。 Worksheetオブジェクトの場合なら、Copyメソッドがあ…

任意のワークシートを新規Excelブックとして出力するクラス

ワークシートを新規Excelブックとして出力するクラス ワークシートを新規Excekブックとして出力する 名簿なんかの一覧表をマクロで自動作成して、相手方にPDFで提供すると、しばしば 加工したいからExcelのままでくれ! と言われることがよくある。 大量(っ…

インタフェースを用いたポリモーフィズム

インタフェースを使ったポリモーフィズム コードの微修正 akashi-keirin.hatenablog.com 前回のコードをちょっと書き換えてみた。 擬似コンストラクタのinitメソッドをまとめてみただけですが。 リスト1 インタフェース IMusicPlayer Option Explicit 'Fiel…

VBAでインタフェースを使ってみた

インタフェースを用いたポリモーフィズムをやってみた 立山秀利さんが著書の中で使っていた音楽プレーヤのたとえが私にとっては一番分かりやすかったので、それをVBAでやってみる。 方針としては、 「RecordPlayer」クラス、「CDPlayer」クラス、「MP3Player…

フォルダを作成するクラス

フォルダ作成クラス 任意のディレクトリに任意の名前のフォルダを作る 新規フォルダを作るときは、MkDir関数を使う。 まあ、それはそれでいいのだが、何かこう、作りっぱなし感があって気持ち悪い。 せっかくなので、FileSystemObjectの練習も兼ねて、 フォ…

漢字テストメーカーを作ってみた

漢字テストメーカーを作ってみた プロシージャの構成 問題データ抽出用プロシージャ Private Sub extractQuestions 乱数発生・ナンバリング用プロシージャ Private Sub setRandomNumber 抽出問題並べ替えプロシージャ Private Sub sortExtractedQuestions テ…

Wordの表の各セルの文字列を利用しやすくする(2)

クラスのプロパティに二次元配列を持たせてみる 表の内容をそのまま配列にする 「表」ということは、二次元配列と同じ形なんである。 そこで、 クラスのプロパティを二次元配列にする ことを試みた。 クラスの改造 まず、前回記事のリスト1のうち、フィール…

Wordの表の各セルの文字列を利用しやすくする

Wordの表の中の文字列を取得するクラス WordTableOperatorクラス クラスモジュールを挿入して、オブジェクト名を「WordTableOperator」にした。 とりあえず、次のようなコードを書いた。 リスト1 Option Explicit 'フィールド' Private wordApp_ As Word.Ap…

データ抽出用クラスを作る

データ抽出用のクラス AdvancedFilterメソッドを気軽に使う あんまり役に立たないと思うけど、ちょっと作ってみた。 準備として、 データ抽出元のシートを用意。 こんなふうに抽出条件設定用の表を作り、 セル範囲に名前を付けておく。 ちなみに、抽出条件は…

名簿作りマクロ(4)

名簿作りマクロ メインコードの組立 過去記事 akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com 作成するプロシージャ まず、転記処理の流れを整理しておこう。 【プロシージャ1a】「戦法別」シートへの転記開始用…

名簿作りマクロ(2)

文字列をコード番号に置き換えて取得する 前回 akashi-keirin.hatenablog.com のつづき。 VLOOKUPのちょっと邪道な(?)使い方 一覧表の中の文字列をコード番号に変換するのには、VLOOKUPを使うというのが一般的だと思う。 ただ、私は、一覧表にずらずらとV…

名簿作りマクロ(1)

人物データを元に名簿を作成するマクロ 配置転換で行った先で見たもの 新年度の配置転換で、新しい部署に行くことになった。んで、早速名簿作りをしないといけなくなった。 だいたいこんな感じのものが出てきたと思ってください。 どうやら、 こんな元データ…

小さなクラスを作る(7)~セルの列符号が簡単に取得できるラッパークラス

列符号取得が可能なRangeオブジェクトのラッパークラス きっかけ 「列番号はColumプロパティで簡単に取得できるのに、列符号って取り出しにくいよなー」と思って、コチラを参考にXDF列までに対応した自作関数を作ったのがそもそもの始まり。 他のよく使う機…

写しPDF作成マクロ~(4)

クラスを組み合わせる 使用したクラス FileNameGetterクラス FolderCreatorクラス ErrorCatcherクラス DocPDFConverterクラス それぞれのクラスの詳細については、リンク先をどうぞ。 標準モジュールのコード Option Explicit Public Type myFolder fdPath A…

クラスをクラスのフィールドにする

クラスをクラスのフィールドにする クラスを丸ごとクラスのフィールドにしたらいいんじゃないか、と今さらながらに気がついた。Javaの本でさんざん目にしていたことなんだけど。 フィールド用のクラス 「GambleRacer」というクラスを作った。 クラスモジュー…

小さなクラスを作る(6)~WordドキュメントをPDFに変換する

WordドキュメントをPDFに変換して保存する 仕様 Wordドキュメント そのWordドキュメントがあるフォルダパス ファイル名 以上3つをフィールドとして持つ。 メソッドは今のところ一つだけ。 WordドキュメントをPDFにして指定のフォルダに保存する 元のWordド…

小さなクラスを作る(5)~エラーキャッチをするクラス

エラーキャッチをするクラスを作る そんなことをする意味があるのかどうかはともかく、エラー時にメッセージを表示させるという処理もよく使うので、作ってみた。まあ、何でもかんでもクラスを作っていったら、そのうちコツがつかめるだろうということで勘弁…

小さなクラスを作る(4)~フォルダ作成クラス

きっかけ 写しハンコつきPDFを作るマクロのコードを見直していると、メインの「写しPDFを作るクラス」が結構複雑なクラスになっていることが分かった。ざっと挙げると、 元のWordドキュメントに画像があるかどうかチェック ハンコ用の画像ファイルが実在する…

写しPDF作成マクロ~(2)

ファイル選択用のクラスを作る 指定した拡張子のファイルを選択させる 今回のマクロでは、写し作成元のWordファイル、ハンコ用のpngファイル、と、ファイル形式を限定して取得したい。そうすると、ファイル選択ダイアログでユーザにファイル選択を迫る際に、…

写しPDF作成マクロ~(1)

書類が「写し」であることを示すために、「写」ハンコを押して送ったり、職場内で回覧したり、ということがある。 まあ、職場内で回覧する分にはハンコを押すだけの話なので何ということはないのだが、「写し」であることを明示した上でメールで送る、という…

私がクラスモジュールを使い始めたきっかけ

きっかけ そもそもは、自分に降りかかる火の粉を、少しでも楽に振り落としたいからだった。 thom(id:t-hom)さんが、コチラで言及してくださったが、私はあくまでも素人に過ぎないのに、職場ではそれって、プログラマの仕事じゃね?的なことをさせられてしま…

Thunderbirdメール自動作成マクロを改良した

準備 セルに名前をつける。 こんな具合に「ThunderBirdPath」と名前をつけた。 標準モジュールのコード Sub getThunderbirdPath() Set flp = New FilePicker '……(1) With flp .showFilePicker ("Thunderbirdの実行ファイルを指定せよ(ショートカットでも良…

Select / Activateメソッドの極小ハマり

状況 ワークシート こんな風にシートを準備して、 それぞれのシートはこんな風にカレンダーにした。 クラスモジュールのコード 「オブジェクト名」は「DaySelector」にしている。 Option Explicit 'フィールド Private startCell_ As Range Private endCell_…

ファイルのフルパスを簡単に取得する

はじめに メール自動作成マクロ(その1/その2/その3/その4)では、添付ファイルをセットするために表の中に添付ファイルのフルパスを入力しておく必要があった。 しかし、「添付ファイルのフルパスの入力なんてめんどくせーよな!」と誰しも思う。だ…

メール自動作成用のクラスを作る~(4)……そして伝説へ(うそ)

LotusNotesメールを作る LotusNotes版も作った。……ていうか、前から使っていたやつを移植しただけですが。 早速、コードの紹介から。このとき作ったクラスに追記する。 メソッドのコード Public Sub createLotusNotesMail() On Error Resume Next Err.Clear …

メール自動作成用のクラスを作る~(3)

Thunderbirdでメールを自動作成するメソッドを作成。 まずはコードをご覧に入れよう。 あ、その前に、標準モジュールの宣言セクションに、 Public Const THUNDERBIRD_PATH As String = "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" こいつ…

メール自動作成用のクラスを作る~(2)

先に断っときます。今回はカンバンに偽りあり。 「……クラスを作る」とか題名で言ってますが、クラスは作りません。ただ、前回作ったクラスを活用するためのコードを作るんだから、あながち嘘でもない。そんなわけで、そこんとこヨロシク。 前回作ったクラス…

メール自動作成マクロ用のクラスを作る

Excelから、VBAでLotusNotesやThunderbirdのメールを作るマクロ。 メンテナンスしやすくて拡張性のあるものにしたいと思って試行錯誤中。「これでうまく行くんじゃね?」というところまで漕ぎ着けたので、うpしておく。 なるべく〈オブジェクト指向〉っぽく…

データ転記マクロ~その3

前回のマクロをさらに書き換える。 今度は、無駄にクラスモジュールを使うよ。 クラスモジュールを挿入して、オブジェクト名を「GambleRacer」にした。 クラスモジュールには下記のコードを書く。 Option Explicit 'フィールド '……(1) Private rcID_ As Long…