このページでは、ちょっと変わったマクロを取り上げています。中には実用的なものもあるかな?(笑)
以下のマクロはHTML文書ではなくDOSのテキストファイルにあります。環境によっては正しく表示できないかもしれません。ごめんなさい。また、基本的にExcel95以外の環境では動作しません。間違いもあるかもしれません。これらのマクロは自由に使用、改変することができます。ただし、原文のままでの複製物の配布、転載は禁止します。原文のままでのアプリケーションへの組み込みは、以下の条件を充たせば、許可いたします。
1. マクロコードの機能の直接的な利用を目的としていること。
2. アプリケーションの配布先が特定できること。
GetOpenFilename では、ファイルが 1 つもないフォルダを選択することができません。そこで、ちょっと不自然な操作なのですが、キャンセルボタンでも選択できるようにしてみました。
Excel97 では HTML ファイルをテキストデータのままで開くことができなくなってしまいました。しょうがないので VBA のファイル入出力機能で 1 行ずつ読み込むようにしてみました。
VBAのファイル入出力を使ってテキストファイルを65536行毎に分割します。
VBAのファイル入出力を使ってテキストファイルを1つにまとめます。
Openステートメントでファイルのロックを試します。
「形式を選択して貼り付け」の「加算」を使って高速に集計します。[データ]-[統合]でも同様の処理は可能です。
任意のフォルダの任意のファイル名の一覧をワークシートに作成するサンプルです。Windows用です。
ワークシートの表をテキストデータに変換します。パソコン通信などで表のサンプルを書くときに使います。
フォントの指定もありません。これだけ低機能なものも珍しい?(笑)
この手のマクロもいろいろありますが、これは1行目のデータの表示形式を使って各セル値を編集します。
CSVファイルを開いて、任意のセル位置へコピーします。
ダイアログボックスで選択したファイルのフルパスを、アクティブセルやモジュールシートへ入力するマクロです。
ShellExecute APIを使用して、フォルダのウィンドウを開きます。
以前、作業状態ファイルの不都合の話があったときに作ったものです。使ったことはありません。
サブフォルダの中も検索して、HTMLファイルの一覧のページを作成します。
以前、このソフトを使っていました。最初、VBAで書きましたが、予想通り遅いので、あとでDelphiで書き直しました。
PPM のバイナリ形式で保存します。PPM は UNIX などで使われるシンプルなビットマップ形式です… Windows の PPM 関係のツールでしか動作確認していませんが。都合により、メッセージが英語です。
マクロで長い時間のかかる処理をするときに、プロセスの優先順位を上げておくと性能が向上することがあるそうです。
mciSendString を使って AVI ファイルを再生します。一応、Close を忘れずに。
SendMail メソッドではメッセージ本文を入れることができません。RoutingSlip オブジェクトを使えば可能です。MAPI を直接利用するのも、1 つの方法です。
シート見出しのスクロールボタンとツールバーも右クリックしてみました。
ダイアログボックスの代わりにツールバーコントロールから取得してみました。Excel97ではVBAのオブジェクトになっているので、WindowsAPIを使う必要はありません。
ネットワークの共有名の指定がChDir関数ではできないのだそうです。
ところで環境変数の最大サイズはいくつなんでしょう? アプリのセットアップ等で領域全体のサイズはよく設定しましたよね。
ExcelのマクロでOSの再起動まで行うのは不向きかなあと思い、解像度の変更だけにしました。CDS_TESTと0の違いとか、あまり良くわかっていませんが。
Excel VBA FAQにも同様のコードがあります。タイムアウトとユーザ操作禁止の機能を付けました。
_lread() _lwrite()を使ってみました。
おなじみのフォルダ選択ダイアログボックスです。ダイアログシートやユーザーフォームから実行する場合はウィンドウハンドルの指定を変更します。
WindowsAPIを使っているのは特殊フォルダのパスの取得の部分で、ショートカットの作成には使用していません。どうやっているかというと・・・DDEとファイルコピー。(笑)
クリップボードのビットマップまたはメタファイルから Picture オブジェクトを作成するクラスです。
オートシェイプなどをImageコントロールにコピー貼り付けします。この上の CClipPicture クラスを使います。Picture プロパティに Ctrl-v をするのと同じですが、VBA で実行する方法を知らないもので…
グラフを UserForm に動的に表示するために作りました。ファイルに保存して読み込んでも良いですし、ダイアログシートを使って良ければその方が簡単ですけどね。
メタファイルの削除をしないように修正しました。Picture オブジェクトが削除するようですので。
画像ファイルの作成をするわけではありません。クリップボードの内容をファイルへ出力するだけです。WMFファイルにもいくつかフォーマットがありますが、ファイルヘッダを付加したタイプを作成します。Excel95でもExcel97でもワークシートに挿入できます。
画像ファイルの作成をするわけではありません。クリップボードの内容をファイルへ出力するだけです。24bitフルカラーの画像は単純に8bitに変換します。
スプラッシュウィンドウのような感じで画面中央に一時的にビットマップを表示します。
Delphi2のVariant型のヘルプを読んで作りました。
Excel97ではMSFormsのDataObjectオブジェクトを使ってできます。この関数では、ちょっとしつこいくらいにエラーチェックをしています。ところで、マイクロソフトサポート情報にAccess用のサンプルがありますが、あのコードはかなりわけがわからないものです。サポート情報の品質を示す好例?
Windows3.1用です。Windows95でしかテストしていません。(笑)
書いてはみたものの使わないコードの良い例です。(苦笑) ダイアログボックスの中央表示や再描画のサンプルです。中断機能付き版も書いてみましたが、これも使いません・・・
ダイアログシートもユーザーフォームも使わずにやってみました。ちょっと手抜き。
Access97専用です。レポートやフォームのプレビューウィンドウのページ番号を Windows API を使って取得し、そのページだけ印刷します。強引な方法ですので、不具合はあるかもしれません。
ワークシートに ActiveX コントロールを作成すると、参照設定ダイアログボックスで設定を解除できなくなってしまうようなので、書いてみました。(苦笑)
本当に使用中のものは解除できません。VBA のコード中だけで使用しているものは解除できるようですが、当然、コードは動作しなくなります。不要なものだけを解除するようにご注意ください。
また妙なものを・・・という感じでしょうか。(笑)
モジュールをテキストファイルへ出力して、そのファイルを対象に置換を行って、また読み込みます。これは本当にExcel5.0/95専用です。期待通りの結果が得られるかどうかわかりませんので、必ずバックアップを取っておいてください。
ファイルにマクロウィルスが含まれていないかチェックするマクロです。Excel5.0/95用です。
[ファイル]-[開く]を独自マクロに置き換えます。Excel5.0/95用です。
重複がなく、昇順に並ぶ配列を作成することができます。少量データ向きです。
SendKeysとWindowsAPIを使っています。範囲が広いとちょっと遅いです。あると、つい使ってしまいます。(笑)
Delphi1が出た頃、こういうサンプルコードがありました。UserFormを自動作成している部分の方が面白いかも。コードの入力はちょっと苦しい。(笑)
手軽なのでよく使う方法です。「n行おきに選択するマクロ」でもこの方法を使っています。
モジュールシートをテキストファイルへ保存して、それを処理します。
Excelを2つ起動して、SendKeysで処理します。(こんな処理は、ばかばかしいものかと思いきや、実際に仕事で使って成果をあげることもあるようです。)所用時間は約10分。君子危うきに近寄らず。(笑)
罫線を使ったあみだくじです。
バグ再現コードはたくさんありますが、その中でも罪の少ないものです。でも、ハングアップしても知りません・・・