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

ThisWorkbookモジュールの謎

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

ThisWorkbookとは何者なのか

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

プリンタ名を返すProperty

プリンタ名を取得するProperty 前回 akashi-keirin.hatenablog.com の続き。 前回までに作成したInstalledPrinterクラスにPropertyを追加する。 追加するPropertyは、printerName(ByVal printerIndex As Long)とし、引数にインデックスを渡したら、該当する…

ポート名(?)付きのプリンタ名を返す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 =…

フォームコントロールのボタンオブジェクトをVBAで捕まえる

フォームコントロールのボタンを捕まえる マクロを呼び出すためのボタンをシート上に設置することがよくある。 シート上に設置したボタンをVBAで取得するにはどうすればよいのだろうか。 Nameプロパティを取得してみる ボタンの上で右クリックすると、 この…

クラスのPrivateメソッドもイミディエイトで実行できる

クラスのPrivateメソッドもイミディエイトで実行できる 再び超小ネタ。 クラスモジュールの準備 クラスモジュールを作る。 リスト1 クラスモジュール 'オブジェクト名は"HiddenBooks"' Private Function isHiddenBook( _ ByVal targetBook As Workbook) As …

個人用マクロブックはアドインに非ず

個人用マクロブックはアドインに非ず 「当り前だろバカ!」と思ったらスルー推奨。 IsAddinプロパティ イミディエイト・ウインドウに ?Workbooks("PERSONAL.XLSB").IsAddin と打ち込んで[Enter]をポチッ。すると、 Falseが返るのであった。 Windows.Countプ…

非表示ブックの数を返すFunction(Excel)

非表示Bookの数を返すFunction アドインとか、個人用マクロブックみたいな、ブックを開いたら裏で勝手に開いているブックの数と、オモテで正々堂々と開いているブックの数を別々に取得する必要があったので作ってみた。 考えかた Application.Workbooksコレ…

Split関数の裏技

Split関数の裏技 このとき、 akashi-keirin.hatenablog.com thom (id:t-hom) さんに教えてもらった。 Split関数の第2引数は省略できる 完全に思い込みで必須だと思っていた。 なるほど、Office VBA Reference の Split Function の項によると、 Syntax Spli…

セル範囲が格子状になっているか判定する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にアクセスできない?

Sheetオブジェクトの自作Propertyが呼び出せない? Sheetオブジェクトをぶち込んだ変数からアクセスできない 前回の akashi-keirin.hatenablog.com で作成したPropertyに、Sheetオブジェクトをぶち込んだ変数からアクセスしようとしたらできなかった。 リス…

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

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

Rangeプロパティの引数に定数・変数を使う(Excel)

Rangeプロパティの引数 通常、Rangeプロパティの引数と言えば、 [親オブジェクト].Range("A1") のように、セルの番地を指定する。 しかしながら、このやり方だと、マジックナンバー的になってしまって、不便だなあと思っていた。 セルに名前を付ける、という…

ブックを閉じて別フォルダに移動する(Excel)

Excelブックを移動する この時期、あちこちから集めたデータ(笑)を集約するという作業が頻発する。 この手の業務は、VBAを使って瞬殺する私にとっては痛くも痒くもない。しかしながら、職場全体で見ると、この手のアホみたいな作業に膨大な時間を費やすと…

君は[Ctrl]+[J]というショートカットキーを知っていたか(VBE)

[Ctrl]+[J]というショートカットキー [Ctrl]+[J]の働き Twitterで、thom (id:t-hom) さんが教えてくださった。曰く、 識別子はCtrl+Jで入力候補でる と。 え? そ、そうなんすか??? というわけでちょっとやってみた。 変数名の入力中に[Ctrl]+[J] こん…

カーソルを任意の位置に置く(Word)

カーソルを任意の位置に置く たぶんWord2010のバグだと思うのだけれど、均等割付を施したところに差込フィールドがあると、差し込まれた後に字幅がおかしくなる。 職場のPCでしか遭遇しない症状なので、画像でお見せできないんだけれど、データが差し込まれ…

Wordの「スタイル」をVBAで操作する(3) (Word)

「標準」スタイルのフォントを変更するメソッド 前回 akashi-keirin.hatenablog.com のつづき。 一発で「標準」スタイルのフォント設定を変更することができるようなマクロを作ってみる。 リスト1 標準モジュール '///標準スタイルのフォントを設定する' Pu…