VBA一般

Enumの研究(1)

Enumの研究(1) コードの可読性を上げる一つの方法として、 Enumを適切に使う というものがある。 ずいぶん前からEnum自体は使っていたが、最近やっと適切な使い方が定まってきたように思うので、Enumについていろいろ実験したことを書き留めておく。 Enumの…

foobar2000のPlayback Statisticsを編集するマクロ(1)

foobar2000のPlayback Statisticsのデータを編集するマクロ えらい久しぶりに、foo_playcount.dllをアップデート(Verなんぼかわからん。2011年のヴァージョンみたい。)したら、どうも再生記録の保存方法が変わったようで、これまでの再生記録が全部リセッ…

インターフェース周りのち~んw現象

インターフェース周りのち~んw珍現象 前回 akashi-keirin.hatenablog.com のやり方は、別プロジェクト間でインターフェースを共有しようとしたのがそもそも間違いだったのかも知れん、と思い直して、やり方を変えてみた。 thom.hateblo.jp コチラを参考に…

ThisWorkbookモジュールにインターフェースを実装することはできるのか

ThisWorkbookモジュールにインターフェースを実装することはできるのか 前回 akashi-keirin.hatenablog.com ブックのThisWorkbookモジュールにメソッドを搭載したら、まるでブックのメソッドであるかのように呼び出すことができることを示した。 では、ThisW…

繰り返しを伴う処理をまとめる

フィールドコード総ナメ方式のプロシージャをまとめる 前回までの3回 akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com で紹介したFunctionを使って、選択範囲のフィールドコードを総当たりで処理するプロシージャ…

飛び地状態のセル範囲にも名前を付けることができる(Excel)

飛び地状態のセル範囲にも名前を付けることができる Excel使いこなしマンには常識だったのかも知れないが、便利だなと思ったので記しておく。 飛び地状態のセル範囲に名前を付けてみる まず、 こんな風に、投げやりに文字列を入れておく。 別に入れなくても…

配列の要素を入れ換えるFunction

配列の要素を入れ換えるFunction 配列の要素を入れ換えるFunctionを作ってみた。 仕様 とりあえず、引数として当該の配列、入れ換え対象のインデックス番号二つを受け取り、入れ換え済みの配列を返すようにする。今回は、Long型の配列に対応する。 コーディ…

Object型変数を積極的に使う

Object型変数を積極的に使う 今まで、Object型の変数を積極的に使うことはなかった。 VBAで作成したツール類も、内輪で使うものばかりなので、CreateObjectを自分から使うことはまずなかった。参照設定してNewばっかりだった。 今回、Object型変数を使ったら…

RangeオブジェクトのNameプロパティのち~んw現象(Excel)

RangeオブジェクトのNameプロパティに関するち~んw珍現象 とにかくご覧いただきたい。 ち~んw珍現象 A1セルに「ち~んw」と入力 まず、このようにA1セルに「ち~んw」と入力しておく。 イミディエイト・ウインドウで名前を定義 イミディエイト・ウイン…

選択範囲のルビを除去する(Word)

選択範囲のルビを除去する 青空文庫(HTML版)からWordに文章をコピペすると、 こんなふうに、むやみやたらとデカいルビが設定されていて、レイアウトがめちゃくちゃになる。 ルビのサイズを小さくすることも考えたが、ひとまず選択範囲のルビを除去する方向…

「写経」用教材を作成する(Word)

「写経」用教材(?)を作成する Wordの「原稿用紙設定」機能 『一太郎』では、「文書スタイル呼び出し」(?)という機能で、コクヨ社の原稿用紙の書式を呼び出すことができる。んで、印刷するときに「升目を印刷する」というチェックボックスにチェックを…

記号は黒字、文字は白字にするマクロ

記号を黒字、文字を白字にする 前回 akashi-keirin.hatenablog.com を用いて、記号は黒字に、文字は白字にするメソッドを作った。 コード コードは次の通り。 リスト1 標準モジュール Private Sub changeFontColor(ByVal targetFont As Font) '……(1)' If is…

ThisWorkbookモジュールの謎

ThisWorkbookモジュールの謎 タイトルはちょっと大げさです。 しかも、謎を解き明かす気などさらさらなく、豪快に投げっぱなしジャーマンです。 ThisWorkbookモジュールを改名する プロジェクト エクスプローラーで、ThisWorkbookモジュールを選択し、プロパ…

ThisWorkbookとは何者なのか

ThisWorkbookとは何者なのか 案外、初歩的なことがわかっていない、ということを痛感したので、後の戒めのためにも残しておくことにした。 「ThisWorkbook」を使うことは非常に多い。VBAの場合、コードが書かれてあるブックが他のブックを操作する場面という…

ポート名(?)付きのプリンタ名を返すFunction

ポート名(?)付きのプリンタ名を返すFunction 前回、 akashi-keirin.hatenablog.com 前々回 akashi-keirin.hatenablog.com の集大成。 コード プリンタの名前を渡したら、ポート名(?)付きのプリンタ名を返すFunctionを作ってみた。 前回同様、オブジェ…

プリンタの数を返すFunction

プリンタの数を調べるFunction Application.ActivePrinterにプリンタ名をセットしたくても、プリンタ名の後ろにくっついている「on NeXX:」の部分がわからないとセットできない。 同じプリンタに接続していても、端末ごとに「NeXX:」の部分が異なるので困る…

プリンタが存在するかどうかを判定するFunction

プリンタが存在するかを調べるFunction 軽量PDFを作成するためには、ExportAsFixedFormatメソッドを用いていたのでは限界があるので、 akashi-keirin.hatenablog.com このときのように、プリンタにJUST PDFなどの、PDF出力用プリンタを選択する。 その場合、…

「フォームコントロールのボタンオブジェクトのEnabledプロパティって、意味ないんじゃね?」問題

「フォームコントロールのボタンオブジェクトのEnabledプロパティって、意味ないんじゃね?」問題 前回 akashi-keirin.hatenablog.com の続き。 ボタンのEnabledプロパティをFalseにしてみる イミディエイト・ウインドウに activesheet.buttons(1).enabled =…

セル範囲が格子状になっているか判定するFunction(Excel)

セル範囲が格子状になっているか判定するFunction いわゆる「Excel方眼紙」との戦いの一環。 セル結合とかガンガンズンズングイグイかまして作った表が、格子状になっているか判定する必要に迫られたのだった。 かつて誰かが作ったツールに不具合があって、…

[Range].MergeAreaプロパティの返り値の謎(Excel)

[Range].MergeAreaプロパティの返り値の謎 単にRangeオブジェクトのことがよく分かっていないだけかも知れないが、恥を承知で書く。 MergeAreaプロパティの返り値 こんなシートがあったとする。 J1セルとJ2セルが結合されている。 したがって、J1セル…

ファイル名に接頭辞・接尾辞を附加するFunction

ファイル名に接頭辞・接尾辞を附加するFunction ファイル名変換ツールを自作したときに、ついでに作った。 ファイル名に接頭辞を付けるFunction これは簡単。単純に先頭に文字列を追加するだけ。 リスト1 標準モジュール Public Function getPrefixedFileNa…

ファイルのコピーを作成する(FileSystemObjectオブジェクトのCopyFileメソッド)

ファイルのコピーを作成する FileSystemObjectオブジェクトを用いる。 ファイルのコピーを作成するFunction FileSysetmObjectオブジェクトのCopyFileメソッドをラップする。 参照設定でMicrosoft Scripting Runtimeにチェックを入れておく。 リスト1 標準モ…

ファイル名をチェックするFunction

不正なファイル名を検出するFunction 作ってみた。 コード コードは次の通り。 リスト1 標準モジュール Public Function hasProhibitedCharacter( _ ByVal fileName As String) As Boolean '……(1)' hasProhibitedCharacter = True '……(2)' Dim ar As Varian…

シートモジュールとインターフェイス

シートモジュールにインターフェイスを実装する 単なる実験。 インターフェイスを作成する クラスモジュールを挿入して、次のコードを書く。 オブジェクト名はIA1ValueShowableとする。 ちなみに、Instancingプロパティの値を「PublicNotCreatable」にしてい…

「オブジェクト型の定数」的なものを設定する

オブジェクト型の定数 定数は便利な仕組みだが、オブジェクト型の定数は指定できないっぽい。 Range型の定数を定義しようとしてみる 標準モジュールの宣言セクションに、次のように書いてみる。 で、[Enter]を押してみると、 こんな風に、コンパイルエラーっ…

Propertyを使って配列定数っぽいものを実現する

列挙体とPropertyを組みあわせて配列定数っぽくする 前回 akashi-keirin.hatenablog.com のつづき。 Propertyに配列をセットする Propertyプロシージャ内でArray関数を用いて、Propertyに配列を持たせるようにした。 標準モジュール Option Explicit Private…

配列は定数にはならない

配列を定数にすることはできるのか 配列は定数にできるのだろうか。 やってみた 標準モジュールの宣言セクションに、次のように書いてみた。 リスト1 標準モジュールの宣言セクション Option Explicit Private Const CONST_ARRAY As Variant = Array("アホ"…

Workbook.LinkSourcesメソッド(Excel)

Workbook.LinkSourcesメソッド 何気なくggっていたら、WorkbookオブジェクトのLinkSourcesメソッドというものを見つけた。 MicrosoftのOffice VBA Reference:Workbook.LinkSources Method (Excel) のページによると、 Returns an array of links in the wor…

名前、定数、列挙体(Excel)

名前、定数、列挙体 ちょっと、PINK FLOYDっぽいタイトルだったのでつい……。 名前、定数、列挙体に同じ文字列を使ってみる ワークシートのA1、A2、A3セルに、それぞれ「aho」、「baka」、「kasu」と名前をつけておく。 んで、次のように定数と列挙体を…

SheetモジュールにPropertyを設置する(Excel)

ワークシートにPropertyを新設する Propertyプロシージャを使う Propertyプロシージャというと、クラスモジュールで使うという印象だが(私だけ?)、標準モジュールだろうが、フォームモジュールだろうが、シートモジュールだろうが、何ならThisWorkbookモ…