2012/12/31

ACCESS VBA 覚書

ACCESS2000以後で、VBAコードをテキストで保存する方法

Microsoft Visual Basic for Applications Extensibility 5.3を参照設定

Sub ExportVBACodes()

    Dim VBACode As VBIDE.VBComponent

    For Each VBACode In Application.VBE.ActiveVBProject.VBComponents
        VBACode.Export (CurrentProject.Path & "\" & VBACode.Name & ".txt")
    Next VBACode

End Sub

イミディエイトウィンドウで、ExportVBACodesと打つ。That's it.
参考URL: こちらこちらこちら

こちらはVBScriptで、ドラッグアンドドロップでエクスポートできます。→リンク

vbacというツールはACCESS2007以後で動くツールで、エクスポートだけでなくインポートも出来る模様
リンク

SaveAsTextとLoadFromTextという隠しコマンドがあるようです。→リンク

リンク

ReportMLというXML方式がサポートされるのはACCESS2002以後

アクセスのコード管理には、ACCESS Developer ExtensionsとVisual Source Safeを使う方法がありましたが、ユーザーが思い思いにカスタマイズしているようなソフトウェアでそれをコントロールするのは容易ではありません。

みな同じ事を考えているようで、
こちらこちらに言及があります。
そしてこちら



MDBファイルのデコンパイル

MDBファイルが肥大化して、最適化しても小さくならないときにはデコンパイルを試すと良い。
こちら



ACCESSオブジェクトのプロパティ群は4層

ACCESSのオブジェクトのプロパティは、
 フォームそのもののプロパティ
 セクションのプロパティ
 コントロールのプロパティ
 条件付書式
の4層で考慮すれば、ほぼすべてを再現できます。
タブの扱いに癖がありますが、これはコントロール順のとおりに配置した後、
プロパティは降順で設定することできれいに解決します。



有用なTips
 http://www.lebans.com/formatbycriteria.htm
 http://www.tsware.jp/tips/tips_598.htm
 http://bougyuusonnin.seesaa.net/article/143188543.html



2012/12/23

アクセスのフォームやレポートを自在にカスタマイズする


マイクロソフトアクセスのフォームやレポートのコントロール群(ボタン、テキストボックス、タブ)などを細かく一つ一つ設定したり、背景色を変更するのは大変です。
それらを一気に変更できないかと思い、この2年ぐらい(の中の2ヶ月ぐらい)ぼちぼちプログラムを作っていました。もっとも大変なのはタブコントロールです。タブコントロールを作成する時には必ず子コントロールとしてページが二つ作成されてしまいます。これらをどう処理するかを悩みました。他にはひとつのコントロールのプロパティを変更すると他のコントロールに干渉する場合があり、それをどう避けるか。リードオンリープロパティの処理をどうするか。プロパティの中身がバイナリの場合どうするか。

まだ完全ではありませんが、このほど動くようになりましたのでご報告いたします。

<想定しているユーザー>
1)かなり大きなアクセスのプログラムを使用して業務を行なっているユーザー
2)コントロールのプロパティにかなり変更を加えているが、メジャーバージョンアップなどをするときに、そのプロパティの引継ぎが大変だと感じている人
3)アクセスプログラムのカスタマイズを業務としている人

<概要>
二つの部分に分かれています
1)追加したオブジェクト(テーブル・クエリ・レポート・フォーム・モジュール)を調査し、それを引き継ぐ部分
2)追加・削除・変更したコントロールを調査、そのプロパティを保存し、それを引き継ぐ部分

<動作要件>
素性のよいコンピューター。ACCESS2000以上。

<著作権について>
株式会社ダイナミクスのコードを流用した部分があるため、使用する場合には株式会社ダイナミクスの許可を得て欲しい。

<サポート>
内容をよく理解できている方からの質問は喜んでお受けします。

<命名>
電子カルテダイナミクスを壊しちゃう事があるので「Dynamite(ダイナマイト)」と命名していたところ、吉原先生から「Dynamate(ダイナメイト)」の方がフレンドリーでええんとちゃうん?という事で、そう変更されました。

<ダイナメイト(Dynamate)の使い方>

① カスタマイズしたクライアントを選択しましょう。[探す…]ボタンを押しましょう。

② まっさらクライアントを選択しましょう。下の[探す…]ボタンを押しましょう。
[↑まずは比較↓]ボタンを押してみましょう。左下のサブフォームに、カスタマイズにより追加されたオブジェクト(テーブルやクエリ、フォームやレポートなど)が読み込まれるはずです。
必要な物を[読込して保存]しておきましょう。
④ このテーブルに手動でクエリ名を追加したりすることもできます。カスタマイズの際に、クエリ名は変更しないことが多いからです。オブジェクトの差分について良く理解している方はこの説明ですぐにわかるはずです。わからない方にはこのソフトの理解は無理です。諦めて下さい。
⑤ 右下のサブフォームには、コントロール(タブやボタン)をカスタマイズしているフォームやレポートの名前を入れます。インポートするものについてはチェックボックスに印を入れましょう。レポートについてはまだ出来ていません。どなたかサンプルを下さい。
[インポートして分析]ボタンを押してみましょう。しばらく時間がかかりますが、右の領域に指定したオブジェクト(フォームやレポート)のプロパティについてかなり詳細に分析を行います。(すべてではありません)


① ここで、[差分を分析]ボタンを押してみましょう。次の画面に移動します。

オブジェクトの調査画面というのが出てきます。ここでさらにカスタマイズしたければ、各フォームやレポートを確認して下さい。このまま解析する場合には[①カスタマイズ/インポートしたFormとReportの情報収集]というボタンを押しましょう。もう一度カスタマイズしてやり直す時には、[カスタマイズ/インポートしたFormとReportの消去:]というボタンをダブルクリックしてからまた[①~]ボタン
を押しましょう。
② 右のボタン群を押してみて下さい。
③ するとクエリが表示されます。追加されたり変更されるコントロールの概要がわかります。

④ OnClickイベントが、[EventProcedure]となっているコントロールには注意が必要です。追加されたオブジェクトはこのままでは動作しません。必ず、関数呼び出しをする必要があります。(場所を移動するだけ、と言ったカスタマイズの場合には[Event procedure]のままでもちろん構いません。関数は通常、標準モジュールの中にPublic Function hogehoge()… End Functionとして定義します。画面内にあるSET_DG_1C(1) というのはこの関数です。標準モジュール内に作ったユーザーの独自関数は、その標準モジュールをインポート/エクスポートすることによって動作します。ACCESS2007移行、Develper Extensionsは標準機能ですが、ACCESS2000形式のファイルでは動作しませんので、Visual Source Safeを使ったコードのやり取りは出来ません。したがって、独自関数を収めた標準モジュールを自分で作って下さい。
⑤ 終了したら[閉じる]ボタンを押して下さい。


① 細かく指定したい場合には、次の画面で行いましょう。

[カスタマイズの準備]ボタンを押しましょう。これにより4つのテーブルが作成されます。T_BUTTON_ADD T_BUTTON_DELETE T_BUTTON_PROPERTY T_BUTTON_PROPERTY_ADD です。

③ それぞれのテーブルの意味は、分かる人にはわかると思うのですが、これが削除/作成されるコントロールのデータと、変更されるプロパティのデータの最終型となります。ここでさらに細かく手動でプロパティを変更することができますし、最初からこのテーブルを作成して、無からデザインされたフォームを作ることも可能です。
④ 他人にカスタマイズしたものを譲りたい場合にはここまで作業しておけばOKです。(動作確認は念入りにしてください)
⑤ 多くのエラーは、きちんと動作確認をしていなクライアントで作業を行う事により生じます。また追加していたテーブルへのリンクはエラーのもとになる場合があります。
⑥ 準備ができたら[カスタマイズ]ボタンを押してしばらく待ちましょう。メモリが足りないと、右のメッセージが表示されますが、「はい」と答えて進みましょう。

⑦ そして[エクスポート]ボタンを押しましょう。


① エクスポートするオブジェクトをここで最終的に選びましょう。

[差替えオブジェクトの更新]ボタンを押しましょう。
[Export]チェックボックスをオンにしましょう。
④ すべて準備ができたら[差替ダイナへ]ボタンを押して次に進みま
しょう。
⑤ この部分には株式会社ダイナミクスの差替ダイナを使わせていただきました。ありがとうございました。使い方は同じです。

⑥ うまくいったらおめでとうございます。エラーが起きたらログを見ましょう。

以上のプログラムについて、使用をしてみたい方は当方までご連絡をお願い申しあげます。基本的には株式会社ダイナミクスのアクティブユーザー、積極的にメーリングリストに参加されているサポート業者さんをまずは優先いたします。皆様に役立つツールになりますように。

2012/12/19

医療と儀式

医療は茶道のように儀式的で有る方が、患者は安心するかもしれない。



数年前学生実習で来院したM6(医学部六年)の学生が院長の行なっている内視鏡を見て、「一種の宗教儀式のようだ」と形容しました。

確かにすべての検査で、足の運びから持ち方。ルブリケート(潤滑剤)を塗る方法からすべて、全く同じリズムで行われるさまは、儀式と言って差し支えないかもしれません。
ある日は、すべての検査が1分の狂いもなく同じ時間で終了しており感心したものです。



一流の定義が、質が高い事のみならず均質である事だとすれば、「様式」は大変に重要な事かもしれません。

私の最大の特徴が、「変化に強い」「例外に強い」であるのですが、反面自由すぎる事が欠点です。特に検査においては様式美には程遠いもので、毎日反省ばかりです。スポーツにおいてもある程度のレベルに到達すると、癖を無くし、無駄を省いてタイムを伸ばすという事を良く行います。均一な検査は患者に安心をもたらすでしょう。達人の検査ほどワン・パターンで簡単そうに見えるのは当然かもしれません。

自由と様式は相反する価値では決してないと思います。茶道を学んだ事がないのでわからないのですが、突き詰めていけば、いつかは高みに到達することが出来るのでしょうか。



これを集団で行うことができた時に、その医療機関は一流だと言われるのでしょう。
注射一本、採血の方法のような細かい方法まで、医療従事者間で意思統一が行われ、均一な医療が提供された時、患者は戸惑いがなくなり安心するのでしょう。

2012/12/16

不必要な受診について

from Google Analytics
インターネットのサイトの管理をするときには色々な項目があります。
訪れる人の年齢、性別、使用しているOS、どこのサイトから来たか、リターン率、平均滞在時間、直帰率、新規訪問の割合などがわかります。

医療を良くするにはこういう手法を使うべきだった、と思います。何十年も前からデータはあったのですから。

直帰率が高いのも問題だし、リターン率が異常に高いのも問題だと思いますが、医療データには「診断」や「死亡」などの情報がひも付けされているのが大きく異なりまして、解析を専門にする方にはブルーオーシャンが広がっているような世界だろうと思います。

「この患者さんはかかりつけの医院にもう一度行けば問題は解決しただろうな」と感じることは多いです。不必要な受診を考えた時、「ある医療機関に受診して、納得出来ないからとすぐに別の医療機関へ」という図式が、「直帰率」と似ていたものでこういう事を考えました。

当ブログの直帰率は大変に高いようですが、ごく一部、過去の記事から面白そうなものを見つける能力に長けた方がおられて感心いたします。決して無駄な事は書いていないと思いますので日々の生活にお役立ていただければ幸いです。左の検索窓にふだん疑問に思っていたことを入力しますと、解決する場合もございます。

2012/12/04

胃底腺ポリープへの先入観と実際

胃底腺ポリープは男性:女性が1:3とされていた。しかしそれは過去の話らしい。
1989年の報告で、胃底腺ポリープの出現頻度は1.9%、男女比は1対3.3と女性に多く、半数は単発例である、とあります。この論文は多く引用されていますが、良性疾患であるゆえに注目されず、頻度に関する報告が少ないのが現状です。下2つはいずれも会議録で、背景に偏りはあるものの概ね30-40%の出現率である、とされています。
 今回は、胃底腺ポリープの頻度についての当院の現状をご報告しますが、背景粘膜を同時に記述することの重要性や頻度に影響するバイアスについても考察いたします。
当院院長は東京大学医学部附属病院分院時代から日本で最も長きにわたり内視鏡をしている一人です。その検査の特徴ですが、①意識化鎮静を使う、②データが電子化されている、③背景粘膜の評価に木村・竹本分類を使う、④HPの有無は見ればわかる、⑤徹底的に洗浄して検査する(ウォータープリーズ)、などです。
胃底腺ポリープのような良性疾患の頻度に影響するバイアスにはどのようなものがあるでしょう。まず①術者の意識、背景がC-1だからと行って安心せずに丹念に見ること。②後ほど述べますが使用機器の差。③撮影枚数。④洗浄をするかどうか。⑤色素を使って観察するかどうか。患者側のバイアスとしては、地域差、年齢、⑤PPI使用量、後ほど述べますが⑥セルフセレクションバイアスなどが考えられます。
 全患者での頻度を、薄い折れ線で男女別に示しました。2000年当時男性が5.3%、女性が13.5%と、確かに女性が2.5倍ほどになっています。しかし2012年では16.3%、23.4%と1.4倍に過ぎません。2000年以前から胃底腺ポリープの背景粘膜には萎縮がないと論文に報告があります。そこで木村分類で萎縮なしに相当するC-0、C-1での出現頻度を濃い色で示しました。
(注:私と父がC-0、C-1と記述することは、ピロリ菌陰性であるという事とほぼ同義です。つまりピロリ菌陰性の場合の出現頻度と考えてください)
すると2000年時点で15.1%、33.5%と2.2倍の差があるのですが、2012年時点では48.3%、57.1%と、わずか1.2倍の差でしかないのです。もはや女性に多いとは言えなくなってしまった。この変化をどう説明したら良いのでしょう。
 ここに当院での使用機器を重ねあわせてみましょう。すると240シリーズのスコープを使い始めた時、そして260シリーズのスコープを使い始めた時に出現頻度が上昇することがわかります。
 年齢や撮影枚数はどうでしょう。年齢はそれほど変動がありません。撮影枚数は2003年にフィルム(20枚の制限があった)をやめてから右上がりですので関係するかもしれません。
 初めて内視鏡を受けた人と、当院で受けるのが二回目以上の人を比較するとどうでしょう。確かに再診の患者では胃底腺ポリープがやや多いのですが、それでもやはり男女の頻度の差が少なくなってきたという傾向は変わりません。
 色素の使用はどうでしょう。これは残念ながら差はでません。
  PPI使用との関連はあるのでしょうか。「維持療法の必要のある難治性逆流性食道炎」でPPIを投与されている症例を見てみますと、なるほど胃底腺ポリープが多くなっているのがわかります。まだ症例が少ないために全体に影響するほどではない。ただ男性の比率がさらに女性に迫っているのは興味深いと思います。
セルフセレクションバイアスとは、患者が自らの意志で来てしまうバイアスのことです。我々は、背景粘膜がC-0やC-1であれば、HPがいれば別ですが、基本的にフォローは必要なく胃底腺ポリープはむしろ安心して欲しい所見ですと繰り返し説明します。しかしポリープ、と言われている患者はリピーターが倍になる、というデータが出ています。これは先程の、再診患者で胃底腺ポリープが多くなるという事実の原因となります。
以上をまとめるとこうなります。
男性の比率が増えた理由はFGPの出現頻度全体が上昇したことが最も大きな理由で、半数に見つかる現在では男女差はそれほど大きくはない。男性の胃底腺ポリープは小さくて女性よりは従来見つけづらかったのではないか。あるいはそれは背景の襞、粘液、色調などの影響だったかもしれません。しかし機器の進歩やその他の工夫でその差が縮まったと考えれば矛盾しません。一方、PPIは全体に影響をおよぼすほどではないが注目すべきであり、またセルフセレクションバイアスも注目すべきだと思います。

さて、男女比が変化したと言いましたが、男女差が常に10%と捉えることもできます。エストロジェン感受性のあるポリープは大きく、見つかり易かったのではないか、と思うのです。この仮説を証明するにはエストロジェンレセプターの証明をすればいいのです。
いずれにせよ、現代では胃底腺ポリープは女性に多い、と言えなくなってしまったことは事実です。従来の先入観は変えねばならないかもしれないのです。

別の話になりますが、私は従来から医師のクオリティ・コントロールの重要性についてしばしば言及してきました。日本において世界に最も遅れている分野です。
胃底腺ポリープの診断とその頻度は背景粘膜の記述とともに術者の熟練度、到達度、安定度を見る良い指標です。一般的に、良性疾患は軽視されますが実は全く逆で、検査のクオリティ・コントロールをするには最適です。胃底腺ポリープの出現頻度を、診断した医師ごとに解析することによって、その医師の質を正しく判定できる可能性があるのです。胃底腺ポリープはもっと注目されるべき所見なのです。

また粘膜をきちんと洗い、胃底腺ポリープまでもきちんと診断しようという努力は、胃癌の見落としを少なくすることにつながると考えます。
先入観を捨て、きちんと胃底腺ポリープを診断することが大切だという事を今一度強調して終了いたします。