VBA覚書

アクセス修飾子「Friend」とは?

アクセス修飾子「Friend」とは? 勘違いから、マヌケな記事を書いてしまった。 訂正記事を書くのがめんどくさいので(←コラ!)、バッサリ削除して書き直す。 アクセス修飾子「Friend」は、入門書の類にはまず出てこない。 名前が「Friend」なのに、友達がい…

テスト用メソッドもPrivete指定にする

テスト用メソッドもPrivete指定にする Privete指定でもVBE上で実行できる これは、考えてみたら当り前なんだけれど、全然気づいていなかった。 イミディエイト・ウインドウ上での実行 次のようなメソッド群を用意する。 リスト1 標準モジュール Private Sub…

コマンドボタンから呼び出すメソッドはPrivete指定で良い

Priveteメソッドでもコマンドボタンから呼び出すことができる 常識ですか? 私は存じ上げませんでしたので、今まで何でもかんでもPublic指定にしていた。 そのせいで、「マクロの登録」ウインドウなんかを開くと、 こんなひどい有様にw Privete指定のメソッ…

Rahmenクラスの修正

Rahmenクラスの修正 前回 akashi-keirin.hatenablog.com のRahmenクラスを修正した。 生まれ変わったRahmenクラス クラスモジュール Rahmen Option Explicit '///Attribute VB_PredeclaredId = True///' Public Enum NoodleSolidity nsYugeTooshi nsKonaOtos…

クラス変数っぽいものを実現してみる

クラス変数っぽいものを実現してみる Attribute VB_PredeclaredIdをTrueにしたクラスモジュールでちょっと実験をしてみた。 実験用クラス 実験用に、Rahmenクラスを作成。 infoment.hatenablog.com こちらの記事にインスパイヤされたでござる。 クラスモジュ…

自身のインスタンスを返すクラス

自分自身のインスタンスを返すクラス Attribute VB_PredeclaredId = False のとき クラスモジュールをデフォルトで使うときは、 Attribute VB_PredeclaredId = False である。 このとき、クラスのメソッドやプロパティは、インスタンス化した後でないと利用…

表の位置を右にずらす(Word)

表の横位置を変更する ドキュメント内の表の横位置を変える方法が判明したので、メモ代わりに記しておく。 RowsオブジェクトのLeftIndentプロパティを使う 表の位置なので、Tableオブジェクトのプロパティを触ればよいと思っていたが、違った。 左端にある表…

拡張子のないファイル

拡張子のないファイル 前回の akashi-keirin.hatenablog.com に、ことりちゅん (id:Kotori-ChunChun) 氏からコメントをいただいた。 曰く、 実用上困ることは滅多にないですが、拡張子のないファイルも存在するので、自作された方は要注意です。 と。 なるほ…

ファイルの拡張子を取得する

ファイルの拡張子を取得する 車輪の再発明 ファイル名の拡張子を取得したくて、次のようなコードを書いた。 ちなみに、マクロを書いたブックのあるフォルダ内のTargetFilesフォルダ内に、次のようにファイルがあるものとする。 リスト1 標準モジュール Publ…

Filter関数というものがある

Filter関数というものがある こないだ、オブジェクト・ブラウザをぐりぐりやっていたら、「クラス」欄にStringsというものを発見。 ただし、オブジェクト・ブラウザ上では、「クラス」としてではなく、「モジュール」として記載されている。 Stringsを選ぶと…

Enumの研究(1)

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

「Any型」の追放に成功した

Any型の追放に成功した akashi-keirin.hatenablog.com これの続報。 この記事には、id:imihito さんからコメントをいただいていた。 曰く、 記事の `Call MoveMemory(lpMemory, VarPtr(strText), lngSize)` に関しては`VatPtr`を`StrPtr`にするとどうなるで…

別ブックのThisWorkbookモジュールのメソッドを呼ぶ(Excel)

別ブックのThisWorkbookモジュールのメソッドを呼ぶ 前回 akashi-keirin.hatenablog.com 別ブックのシートモジュールのメソッドを呼ぶ実験をした。 では、別ブックのThisWorkbookモジュールのメソッドはどうなのだろうか。 コードの追加 まず、ち~んw1号.…

別ブックのシートモジュールのメソッドを呼ぶ(Excel)

別ブックのシートモジュールに書いたメソッドを呼ぶ シート独自の処理など、シートモジュールに書いておくのは、「コードの整理」という観点からは非常に便利。 では、シートモジュールに書いた処理を、他のブック(プロジェクト)から呼び出すことはできる…

Worksheet.UsedRangeに関する衝撃の事実(大袈裟)

Worksheet.UsedRangeプロパティに関する衝撃の事実(大袈裟) はけたさんの一言 Twitterで、はけたさんが、 こんなことをおっしゃっていたので、実験してみた。 UsedRangeとは何なのか まず、 akashi-keirin.hatenablog.com このときに使用した このシートの…

配列を配列の要素にする

配列の配列を作ってみる 配列の要素を配列にすることはできるのか。 やってみた。 準備 Split関数をラップしたFunctionを作って、簡単にString型の配列を作れるようにした。 リスト1 標準モジュール Private Function setArray( _ ByVal spaceSeparatedWord…

列挙体の要素列挙時に「:」による改行が使えた

列挙体の要素列挙時に「:」による改行が使えた 前回の akashi-keirin.hatenablog.com に、id:imihito さんからコメントをいただいた。 曰く、 「: hgAho: hgBaka: hgKasu」 のように先頭に「:」を付ければ大丈夫 と。 ぬわにぃ~~~~!!(昭和風) という…

列挙体の要素列挙時に「:」による改行は使えない

列挙体の要素の列挙に「:」による改行は使えない もう題名以外に書くことがない。 列挙体の要素列挙時の改行 普通は、 こんなふうに、列挙体の要素の列挙をするときは、改行を用いる。 ただ、要素数が多いと異様にタテ長になってしまうのが南天のど飴難点。 …

UndoRecordオブジェクトというものがある(Word)

UndoRecordオブジェクトというものがある 前回の akashi-keirin.hatenablog.com に、id:imihito さんからコメントをいただいた。 曰く、 また、Undoの履歴は、以下のようにするとひとまとめに出来たはずです ```vb Application.UndoRecord.StartCustomRecord…

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

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

Object型変数を積極的に使う

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

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

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

全角ダブルクォーテーションの取り扱いはめんどくさい

全角のダブルクォーテーション 全角のダブルクォーテーションを文字列として扱うのに苦労したので、覚書的に記しておく。 普通に文字列として書いてみる 次のように書いてみる。 str = "“" この状態で、[Enter]をふわっと押してみる。すると、 おわかりだろ…

SentencesコレクションとCharactersコレクション(Word)

SentencesコレクションとCharactersコレクション SentencesコレクションとCharactersコレクションって、ちょっと変わっているよな、というだけの話。 Sentencesコレクションの要素はSentenceオブジェクトに非ず たとえば、コード・ウインドウ上で、 Dim targ…

インターフェイスに汚染されたWorksheetオブジェクトの末路

インターフェイスに汚染されたWorksheetオブジェクトの末路 前回 akashi-keirin.hatenablog.com インターフェイスを実装したせいでおかしくなってしまったWorksheetオブジェクトから、インターフェイスを取り外したらどうなるのか。 一枚の画像に語らせたい…

シートモジュールにインターフェイスを実装するのはやめた方がいい

シートモジュールへのインターフェイスの実装はやめた方がいいかも知れない 以前、 akashi-keirin.hatenablog.com で、シートモジュールにもインターフェイスを実装することができる、ということを示した。 んで、そのときに使ったブックを今日久しぶりに開…

ThisWorkbookとは何者なのか

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

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

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

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

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

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

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