2017-03-01から1ヶ月間の記事一覧

画像をクリックしたら画像のあるセルに現在時刻を書き込むマクロ

クリックされた図形のあるセルを取得する 前置き 「画像をクリックしたら、その画像のあるセルに現在時刻を書き込むようなことってできない?」と言われたのでやったことがあった。 Excelで勤怠管理の一覧表を作って、出勤時と退勤時にその日の欄にある画像…

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

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

フォルダ構成を別のフォルダにコピーするマクロ(3)

一覧表のデータを元にフォルダ構成を移植する いよいよ今回のマクロも完成。 今回は、前回のマクロで作成したフォルダの一覧表を元に、別のフォルダにフォルダ構成を再現する処理を書いていく。 処理の下準備 リスト1-1 Sub moveFolderStructure() Dim objSh…

フォルダ構成を別のフォルダにコピーするマクロ(2)

指定したフォルダ内のフォルダ構造をワークシートに書き出す 標準モジュールの宣言セクション リスト1-1 Option Explicit Dim fldPicker As FolderPicker おなじみ、変数宣言の強制と、FolderPickerクラスのインスタンス用の変数宣言。FolderPickerクラスに…

フォルダ構成を別のフォルダにコピーするマクロ(1)

全てのサブフォルダのパスを書き出す 「再帰呼び出し」を使ったコード フォルダの中にフォルダがあって、そのフォルダの中にまたフォルダがあって……というような場合に、全てのフォルダのパスを取得するためには、メソッドの「再帰呼び出し」というものを使…

Word 差込印刷のレコードごとにファイルを生成するマクロ

Wordの差込印刷でレコードごとにファイルを保存 普段、仕事で差込印刷をよく使うんだが、「レコードごとに別々のファイルにしてくんねーかなー」と思っていた。 以前は、 一旦、PDFにする 1ページづつバラす それぞれにファイル名をつける というおっそろし…

写し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作成マクロ~(3)―ページ先頭位置を割り出して画像を追加する―

Wordドキュメントに画像を貼り付ける 今回作成するマクロでは、Wordドキュメントにpng画像を貼り付ける必要がある。しかも、その処理をExcelから行う、という無駄にややこしい仕様w とりあえず、今回は Wordドキュメントの各ページの先頭中央にpng画像を貼…

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

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

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

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

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

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

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

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

VBAでは、メソッドのオーバーロードができなかった

やってみた。 準備 標準モジュールのコード Private Sub makeUserSick() '……(1) MsgBox " _________" & vbCrLf & _ " / \ " & vbCrLf & _ "/ /・\ /・\ \" & vbCrLf & _ "|  ̄ ̄  ̄ | ち~んw" & vbCrLf & _ "| (_人_) |" & vbCrLf & _…

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

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

Wordから転記した表で小ハマリ……

前にコチラで紹介した、Wordの表からExcelの表にデータを転記するマクロなんですが、またしても軽くハマったので、覚書も兼ねて上げておく。 第1段階 Wordのこんな表から、 Excelのこんな表にデータをマクロで転記した。 使用したコード Option Explicit Su…

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

はじめに メール自動作成マクロ(その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…

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

前回の転記用マクロを書き換えてみる。 元のコードを下に再掲。ただし、余計なコメントは除去。コメント入りがご所望ならコチラをどうぞ。 Sub sendDataVer1() Dim folderPath As String folderPath = ThisWorkbook.Path Dim objSheet As Worksheet Set objS…

データ転記マクロ

VBA初心者向けブログみたいなタイトルなのに、全然初心者向けじゃなかったので、ちょっと初心者の頃を思い出して書く。 私がVBAにハマるきっかけになったマクロです。 こんな個票のデータを、 こんな集約表に転記していく、という作業です。 集約用のExcelフ…

VBA・マクロに関する私の考え

最近、自分には一文の得にもならない、純粋に他人のためのマクロを作らされることが多くなって、改めて思うんですが、やっぱり、マクロなんて自分のためにのみ作るもんだよな!ってことですよ。 ウチの上司は、純粋に「単純作業をマクロ化することは良きこと…

私のVBAとの出会い

もともと、私がVBAを覚えたのは、「ExcelでWordの差込印刷みたいなことってできないんだろうか」とggったことがきっかけだ。 一応、番号を入力したらそれに対応して内容が変化するように数式が埋め込まれていたんだけど、それが全部手作業だった。全てプリン…

小さなクラスを作る(3)~ファイルを選択させる

ファイルを選択させるやつも作ってみた。 例によってクラスモジュールを挿入。オブジェクト名はFilePickerにした。 クラスモジュールのコードは下記の通り。 Option Explicit 'フィールド Private gotFileFullPath_ As String Private isCancelled_ As Boole…