ぺがの覚え書き (読めば必ず為になる?^^;このページを見つけたあなた、ラッキー!)

2020/06/08 更新
 

Access 一般 サブフォームをRequeryしても、追加したはずのレコードが即座に反映されない場合。

サブフォームのレコードセットが『スナップショット』になっている場合、『ダイナセット』へ変更することで、改善する。

Access 一般 「名前の自動修正 」は、絶対使うな

『 ツール 』 ⇒ 『 オプション 』 ⇒ (全般) ⇒ (名前の自動修正) のチェックを全てはずして下さい。
機能が不十分なため、様々な弊害があります。例えば、リンク状態が正常でないテーブルを元にしているクエリーを編集しようとすると、クエリーの要素名がかってに修正され、手の付けられない状態になります。起動速度が極端に遅くなり、最悪、破損を起こします。

Access VBA 名前には日本語や記号を使用しない

クエリーやフォームなどのオブジェクト名、変数名には、日本語、’()’などの記号は使用しないほうが無難です。Accessが完全にサポートしていないので、不明なエラーが発生する場合があります。特に自作の日本語名関数は、モジュール内だけでは正常に動作しますが、クエリー内で使用した場合、頻繁に誤動作します。クエリーに関係する関数は必ず半角英数を使用すること。

Access VBA 変数タイプが確定できないときは、タイプを指定しない

変数を定義する場合、Dim a As Integerのようにタイプを指定しますが、数値や文字、日付やNULLなど代入値にどんなタイプが入るか不明な場合は、Dim a のようにタイプを省略しても構いません。省略した場合はVariant型(16バイト)になります。但し、As Recordset等のオブジェクト変数の場合は、省略するとエラーになります。

Access VBA レポートオープン時の パターン

On Error Resume Next
DoCmd.OpenReport "
レポート1"

VBA
でレポートを開く場合、上記のように、On Error Resume Next 文を付けないとエラーで処理がストップするケースがあります。例えば、印刷中ダイアログでキャンセルボタンを選択したときやレポートの「空データ時」にCancel = Trueと記述した場合です。キャンセルボタンや、レポートが空になる場面はそうそうないのですが、もし発生した場合は実行時エラーとなり処理がストップしますので、On Error Resume Nextを記述して回避しましょう。

Access 一般 フォームのちらつきを無くする

フォームに単独ラベルが存在すると、マウスポインターが通過したときに、画面がちらつきます。
これを解消するには、以下の2つ方法を使ってください。

1、ラベルを単独にしない…テキストボックスつきのラベルを使う。
2、ラベルの前面に透明なボタンや透明なボックスを設置する。

Access VBA CPUのタスクを一時OSに渡す

VBAで長い時間のかかるループ処理をしている間は、CPUが独占状態になり、他のアプリケーションの動作やOSの処理を妨げます。
その結果、Windowの再表示がSTOPしたり、マウス操作がもたつくことがあります。
その場合、ループ内に「
DoEvents」を入れることで、処理をOSへ一時的に開放し、これらの状況を改善します。
ただし、OSへ処理を一時開放する時間がかかるので、ループ自体の処理時間は多少増えます。

Access VBA 編集中のレコードを強制的に確定、保存する

フォーム等で項目を編集している間は、他のレコードへカーソルが移動するまで編集中の値は確定しませんが、「Me.Refresh」を実行することで、強制的に編集中の値を確定し、レコードを保存することができます。

Access VBA Findfirstを使うときの注意

Dim db As Database
Dim tb As Recordset
Set db = CurrentDb
Set tb = db.OpenRecordset("ABC")
tb.FindFirst "[ID]=" & SEITOID
If tb.NoMatch Then
・・・

上記は、FindFirstでよく見かけるパターンですが、注意点があります。
OpenRecordset
で開くレコードセットがダイナセットでないとエラーが起きること。開くレコードセットがクエリーである場合や、外部リンクテーブルである場合は、自動的にダイナセットとしてオープンしますが、ただのテーブルの場合は、テーブルセットとして開きます。エラー回避のため、
Set tb = db.OpenRecordset("ABC" , dbOpenDynaset)
のように明記しなければ動作しない場合もあります。FindFirstのときはdbOpenDynasetと明記!
 

Access VBA MsgBoxを使うときは タイトルまで。デフォルトボタンもユーザーを考えて・・・

MsgBox "処理を実行します。"
この例は、メッセージボックスを表示するものですが、メッセージボックスのタイトルバーに”Microdoft Office Access”と表示されてしまいます。
ちょっとかっこ悪いです。タイトルパラメータを省略したせいです。ですから、タイトルパラメータまできちんと記述しましょう。
MsgBox "処理を実行します。" , , "<<確認>>"

また、第二パラメータには、ボタンのタイプを書きますが、2つ以上のボタンを使うときは、デフォルトボタン(初期カーソルがあるボタン)を指定することができます。PCに不慣れなユーザーがあやまってENTERキーを押しても意図した操作ができるよう、第2ボタンをデフォルトにするなどの対策も有効です。
MsgBox "処理を実行します。" , vbOKCancel + vbDefaultButton2 , "<<確認>>"

Access VBA NULL 値に注意(判定)

IF文で思いがけないエラーに見舞われました。比較の際、変数の値がNullだったのです。
If (A>0) then ・・・ という文で、変数Aの値がNULLだった場合、比較演算の結果は「True」でも「False」でもなく、「NULL」になり、エラーが発生します。
比較時、変数にNULLが入る可能性がある場面では、Nz関数を使うか、IsNull関数を使ってエラーが起きないように対処しておきましょう。
   
(ちなみに値がEmptyの場合はエラーが起きないようです。)

Access VBA ERRORを有効に使う

確実になんらかのエラーが起きることが事前にわかっている場合、On Error 命令を使いましょう。
On Error Resume Next
 、On Error Goto ・・・ 、On Error Goto 0 などなど。ただし、デバッグ中はコメントにするクセも必要です。

Access VBA VBAエディターを一発起動

Alt F11 です。     慣れてくると、Ctrl + C ぐらい使います ^ ^ ;

Access VBA デバッグには、Stop Debug.Print MsgBoxを有効に使う

変数の値やプログラムの動きを知るために、適度な場所にStopDebug.Print 等をいれましょう。
Stop
した場合、各変数の値は保持されていて、VBAエディタ上で、式等をマウスポイントすると値が表示されます。

Access 一般 処理を強制中断させる

Break」キーでVBAの処理が一時中断します。無限ループにおちいった時など、あわてずに、「Break」キーを押してみてください。
また、この状態でも、各変数の値は保持されていますので、デバッグに使うことができます。

Access VBA かなり速度アップ(レコードセット)

Set tb = db.OpenRecordset("ABC", dbOpenForwardOnly)

上記のようにレコードセットを開くときに、dbOpenForwardOnlyモードを指定することで、処理速度が格段に速くなる。ただし、レコードの値を書き換える処理やレコードの追加、削除、FindFirst等で検索する場合は使用できません。レコードセットをdo until loop等で繰り返す処理で値を参照するだけのような処理にはかなり有効な手段。速度的には2倍以上速くなる。

Access VBA かなり速度アップ(クエリー)

複雑な抽出条件を含んだクエリーは実行時間がかなりかかる。

 ⇒ 

 

上の例では、2秒以上かかる処理が一瞬にして実行されるようになった。ケースバイケースのため、クエリー自体が遅い場合は、別な書き方での実行時間を試してみることで、改善が見込める。

Access VBA まあまあ速度アップ(画面描画STOP)

Application.Echo False
Accessの画面書き換えを停止します。停止中は、画面描画に対する処理がバイパスされるため、VBAやクエリー処理が高速で動作します。また、画面がチラつくのを抑えることができます。ループ処理で時間がかかりそうな場面ではかなり有効な手段です。
Application.Echo True
で最新の画面を描画するとともに、画面書き換えをするようになります。

ただし!この処理自体で画面が一度フラッシングします。使用しないほうがちらつかない場合もあるので要確認!

Access VBA ちょっびっとだけ速度アップ( レコードセットの参照を減らす)

= Year(tb!生年月日)
= Month(tb!生年月日)
= Day(tb!生年月日)

レコードのフィールド値を読み出すのには、多少時間がかかります。上記例では、無駄に同じフィールドを3回読み出しているので、1回にすませることによって速度アップを図っています。いったん変数へ値を退避しているぶん遅くなりそうですが、変数へのアクセスはほぼ瞬時におこなわれるため、結果速度がアップします。

A = tb!生年月日
= Year(A)
= Month(A)
= Day(A)
 

Access VBA メチャメチャ速度アップ(配列変数への読み込み)

レコードセットを開く⇒検索する⇒値の参照⇒レコードセットを閉じる のような処理がループするような場面では、思いがけずに重い処理になる場合がよくあります。原因は、レコードセットを開く処理自体にかなりの時間を要するからです。遅くて問題になりそうな場合は、思い切って、一度だけレコードセット全体を配列変数に読みこんでしまう方法が有効です。

Dim T(): Dim I
Set tb = db.OpenRecordset("ABC")
If Not tb.EOF Then Exit Sub
tb.MoveLast: ReDim T(tb.RecordCount)
I = 0: Do Until tb.EOF
    T(I) = tb!
学籍: I = I + 1
tb.MoveNext: Loop : tb.Close
          :
 
(このあとに配列変数を利用して処理)

配列変数に読み込んでしまうことで、レコードセットを開く操作は1度だけになります。この処理のあと、配列変数を参照するループ処理を行っても、変数アクセスの時間は一瞬で行われますのでかなりのスピードアップになります。
     

Access VBA かなり速度アップ(DLookUpDMaxDSum・・・関数は一時的に使用)

DLookup等のデータベース関数は、処理に多少時間がかかります。上記理由と同じで、内部でレコードセットが開かれているからです。数々の方法の中で、データベース関数は一番速度が遅いので、単発で利用する以外は、なるべく使用しないようにしましょう。特にループやクエリーの中での使用は、速度が極端に遅くなりますので、注意が必要です。

Access VBA 微妙に速度アップ(IIFよりIF

判定がひとつだけの場合はいいのですが、複数の場合は、IIF関数よりもIFステータスの方が速度が速いです。

B = IIf(A < 0, "-", IIf(A = 0, "0", IIf(A > 0, "+")))

上記よりも下記の方が速い。ただし、その速度差はごくわずかなので、多くのループ処理内にある場合等に注意したほうがよい。

If A < 0 Then
B = "-"
ElseIf A = 0 Then
B = "0"
Else
B = "+"
End If

Access 一般 速度アップ(クエリーで出来るものはクエリーで)

レコードを全て削除する場面や、全てのレコードのあるフィールド値を変更する場面では、レコードセットを開いて、Do Loopの繰り返しをするよりも、クエリーで行った方が速いです。全レコード件数が増えてくると、その違いが顕著に現れます。削除クエリーや更新クエリーは、クエリーデザイン時に、クエリーメニューの中で選択して作成します。クエリーを作成せずに、VBAで削除クエリーを実行するには、次のような書き方をします。

CurrentProject.Connection.Execute "Delete From mt生徒"    または、
DoCmd.RunSQL "Delete From mt
生徒"     この方法で警告ダイアログを表示させたくない場合は、前と後に DoCmd.SetWarnings False を入れる

Access VBA 変数による選択クエリー

クエリーの抽出条件は固定値だけではなく関数も使うことができます。関数はパブリック関数として標準モジュール内に記述する必要があります。さらに、関数内でパブリックな変数を参照するように記述すれば、フォーム等から自由に抽出条件を設定したクエリーを実行することが可能になります。尚、クエリーに記述するときは、関数形式(いわゆる「=」から書き始め、「( )」で終わる)で記述しないといけません。

Public Function yomi()
    yomi = "*
やまだ*"
End Function
Public Function nen()
    nen = GAKUNEN
End Function

Access 一般 LIKE変数による選択クエリー

上記の例であったように、関数を抽出条件に利用する場合、LIKE文と併用することができます。Like文は「*」「?」のようなワイルドカードを使用することが出来ます。上の例では、よみがな内に「やまだ」が存在するレコードが抽出されます。

Access 一般 分からないことが出てきたら・・・インターネットで検索・質問

モーグネット      Access Club  VBA道具箱

Access VBA 呼び出し元を利用する

レポートに線を書く場合外のモジュールに記述するとReports!レポート名.Line (0,0)-(100,100)のようにいちいちレポート名を明記しなければなりませんがこれでは汎用性が無くなるうえに、命令も長くなってしまいます。
CodeContextObject
は、コードを実行しているオブジェクト(呼び出し元のフォームやリポート)を示します。これを標準モジュールに利用することでレポートやフォーム操作で汎用性の高いコードを記述できます。以下の例では、呼び出し元のレポートに線を描くことができます。

Public Sub 線描
    Dim RN As Report
    Set RN = CodeContextObject
    RN.Line (0,0)-(100,100)
End Sub

Access VBA ダイアログモードで流れを制御

下の2つのコードの違いは赤い部分だけですが、動作はまったく違います。
Aの場合、「数値入力」フォームを開いた直後に”確認しました。”を表示します。
Bの場合、「数値入力」フォームを開いた後、処理が一時停止します。フォームが閉じられると再開されて”確認しました”を表示します。
このように、開いたフォーム上の操作によって、その後の流れを変えたいときなどには、ダイアログモードが有効です。

A = 100
DoCmd.OpenForm "
数値入力"
Msgbox "
確認しました。"

A = 100
DoCmd.OpenForm "
数値入力", Windowmode:=acDialog
Msgbox "
確認しました。"

Access 一般 配布前に、コンパイル+最適化

完成して配布する前は、コンパイルと最適化をする癖をつけましょう。
コンパイルでは、文法エラーをチェックするとともに、プログラムを中間コードへ変換します。
最適化では、編集したフォームやレポート等の作業エリアを削除して、ファイルサイズを最小にします。

コンパイル : Visual Basic Editor から 「デバック」⇒「Accessのコンパイル

最適化 : 「ツール」⇒「データベースユーティリティ」⇒「データベースの最適化/修復
 

D.Core固有 共通作業  Access2007用対策も含む 

・起動時にAccessWindowを最大化した後、フォーム「startingscreen」を開く。
  必要モジュール : 「ass_API関数」
  必要マクロ : 「AutoExec」 
 (※この名前のマクロはAccessによって起動時自動的に実行される。)

2007マクロセキュリティの警告対策
  StartingScreenに、ラベル「secmesを追加。フォームロードのイベントの最初に Me!secmes.Visible = False を記述
 

・メニュー表示、ツールバーを2007対応にする

  モジュール「mmj_access2007対策」をインポート。ユーザーツールバー「印刷」と「non」をインポート
    (※ユーザーツールバーをインポートするには、インポートのオプション⇒メニューとツールバーにチェックをいれてインポート)

 

startingscreenのモジュールで「リンク更新」を実行

 

・各レポートのプロパティを、メニューバー⇒「non」、ツールバー⇒「印刷」

 

・起動時の設定 メニューバーに「non」を設定。その他下図のように設定

 

D.Core固有 自動リンクの使い方

必要テーブル : 「ass_リンク情報」「ass_リンク情報データバージョンチェック」「ass_利用情報」
必要モジュール : 「ass_自動パス変更」「ass_API関数」

実行コマンド : CALL リンク更新

その他 : ass_リンク情報テーブルに、自動更新したいベータベース名とテーブル名を記述
その他 : ass_リンク情報データバージョンチェックに、チェックしたいデータベース名とバージョン
 

D.Core固有 自動リンクの使い方2

必要モジュール : 「ass_自動パス変更」「ass_API関数」

実行コマンド : CALL ルートリンク(引数@
引数@ : リンク先のデータベースファイル名

同じフォルダ内にあるリンク先データベースに全てのリンクテーブルをリンクし直す

D.Core固有 生徒を一人選択させるフォームの使い方

必要テーブル : 「mt生徒」
必要クエリー : 「used生徒選択」「used生徒選択2
必要フォーム : 「sf_生徒選択」「ssf_生徒選択」「ssf_生徒選択顔」
必要モジュール : 「mmj_共有関数」

実行関数 : =生徒選択 ( 引数@ )
引数@ : 初期表示したい生徒ID (省略可能)
 
戻り値 : 関数 ← 選択された生徒ID 
戻り値 : assキャンセル ← ( キャンセルボタンが押された = True 、 生徒が選択された = False ) 
戻り値 : ass生徒ID ← 選択された生徒ID
戻り値 : ass生徒学籍 ← 選択された生徒学籍
戻り値 : ass生徒氏名 ← 選択された生徒氏名
戻り値 : ass生徒性別  ← 選択された生徒性別
戻り値 : ass生徒ふりがな ← 選択された生徒ふりがな

D.Core固有 クラスを一組選択させるフォームの使い方

必要テーブル : 「mt生徒」
必要フォーム : 「sf_組選択」
必要モジュール : 「mmj_共有関数」

実行関数 : =組選択 ( )
 
戻り値 : 関数 ← 組 
戻り値 : assキャンセル ← ( キャンセルボタンが押された = True 、 選択された = False ) 
戻り値 : ass学年選択  ← 選択された学年 (選択しない場合は ' * '  が戻る)
戻り値 : ass組選択  ← 選択された組 (選択しない場合は ' * '  が戻る)
戻り値 : ass課程選択 ← 選択された課程 (選択しない場合は ' * '  が戻る)
戻り値 : ass学科選択  ← 選択された学科 (選択しない場合は ' * '  が戻る)
戻り値 : ass部選択 ← 選択された部 (選択しない場合は ' * '  が戻る)

D.Core固有 個々のPCに変数を書き込む・読み込む

必要モジュール : 「ass_キーワード変数」

実行関数 : CALL 固有情報書き込み ( 引数@ , 引数A )  使用例 : Call 固有情報書き込み ( "動作モード" , 15 )
引数@ : 書き込むキーワード文字
引数A : 書き込む固有情報 (文字、数値、TrueFalseはOK。Null値とEmpty値は書き込めない)
戻り値 : なし

実行関数 : =固有情報読み込み ( 引数@ )  使用例 : Call 固有情報書き込み ( "動作モード" )
引数@ : 読み込むキーワード文字
戻り値 : 関数 ← 読み込まれた固有情報の文字列 ( 読み込めない場合はNull

※数値として書き込んだ値も、読み込み時は全て文字列として読み込まれますのでVal関数等で数値に変換してください。

D.Core固有 印刷時、ボックスにあったサイズに文字を自動縮小する方法

必要モジュール : 「ass_レポート印刷自動文字縮小」

実行関数 : =自動サイズ ( 引数@ , 引数A , 引数B )  使用例 : Dumy = 自動サイズ ( Me!Text1 , 15 , 8 )

引数@ : コントロール ( 例 : Me!Text1
引数A : 最大フォントサイズ
引数B : 最小フォントサイズ

戻り値 : 自動設定した後のフォントサイズ

※オブジェクトが存在するセクションの印刷時orフォーマット時から呼び出すこと。文字内に改行コード'CRLF'が入っている場合は未対応。

D.Core固有 角丸ボックスの使い方 (ボックス、テキストボックス、ラベルの角を丸めて印刷する)

必要モジュール : 「ass_Graphic_Draw

実行関数 : CALL CRBox ( 引数@ , 引数A )  使用例 : CALL CRBox ( Me!Box1 )

引数@ : オブジェクト名 ( 例 : Me!Box1
引数A : 丸の半径(省略可能。省略時=150)

※線の色、太さは、塗りつぶしの色は、元になるオブジェクトと同じになる
※オブジェクトが存在するセクションの印刷時orフォーマット時から呼び出すこと

D.Core固有 自動LINEの使い方 ( 詳細にあるボックス、テキストボックス、ラベルの任意の場所に好きなタイプの線を印刷する。対象オブジェクトの境界線スタイルは透明にしておく。)

必要モジュール : 「ass_Graphic_Draw

実行関数 : CALL LLine ( 引数@ [ , 引数A , 引数B , 引数C  ] )   対象オブジェクトの左だけに線を引く。引数A〜Cは省略可能。使用例 : CALL LLine ( "テキスト1" , , 2)
実行関数 : CALL RLine ( 引数@ [ , 引数A , 引数B , 引数C  ] )   対象オブジェクトの右だけに線を引く。引数A〜Cは省略可能。使用例 : CALL RLine ( "テキスト1" )
実行関数 : CALL ULine ( 引数@ , 引数D [ , 引数A , 引数B , 引数C  ] )   対象オブジェクト同士の間に下線を引く。引数A〜Cは省略可能。使用例 : CALL ULine ( "テキスト1","テキスト2" )

引数@ : 対象オブジェクト名 ( 例 : Me!Box1
引数A : 
線の太さ ( 1以上の値
引数B : 線の色 (0=黒)
引数C : 
線の種類 (0=実線 1=破線 2=点線 3=一点鎖線 4=二点鎖線 5=透明 6=塗りつぶし)
引数D : 対象オブジェクト名 ( 例 : Me!Box2

※線の色、太さは、塗りつぶしの色は、元になるオブジェクトと同じになる
※オブジェクトが存在するセクションの印刷時orフォーマット時から呼び出すこと

D.Core固有 ページ設定制御付き印刷方法 (強制的にページ設定をして印刷させる)

必要テーブル : 「rp_INIT
必要モジュール : 「mmj_ページ設定VBA

実行関数 : CALL ページ設定付きレポートオープン ( 引数@ , 引数A )  
使用例 : CALL ページ設定付きレポートオープン ( -237654 , acViewPreview )

引数@ : 「rp_INIT」テーブルの項目「RID」の値
引数A : レポートの開くモード ( プレビュー→acViewPreview 直印刷→acViewNormal )

※事前に、rp_INITテーブルに用紙設定情報が書き込まれている必要あり。


実行関数 : 
CALL ページ設定取得 ( 引数@ )  
使用例 : CALL ページ設定取得 ( "レポート1" )

引数@ : 「rp_INIT」テーブルに設定値を書き込む元になるレポート名

※指定したレポートに現在設定されている用紙設定情報を書き込みますが、ページと印刷の向きは書き込まれないので、
 取り込み後に、手作業で値を書き込む必要あり。
 用紙サイズ(141は既定サイズ、256=ユーザー設定サイズ)A3=8,A4=9,B4=12,B5=13
 印刷の向き(縦=1 横=2
※レポートのノーデータにreportnull=Trueを記述する必要あり。

Private Sub Report_NoData(Cancel As Integer)
  MsgBox "印刷データは1件もありません。", , "<<確認>>"
  Cancel = True
  reportnull = True
End Sub

D.Core固有 ファイル選択・フォルダ選択・名前を付けて保存・カラー選択ダイアログ表示

必要モジュール : 「ass_API関数」

ファイル選択実行関数 : =Y_GetOpenFileDialog2 ( 引数@ , 引数A , 引数B )
引数@ : タイトルに表示したい文字列(省略可)
引数A : フォルダーパス(省略可)
引数B : フィルター(省略可) access=mdb excel=xls
戻り値 : 選択されたファイルのフルパス (キャンセルした場合は""(空文字))

フォルダ選択実行関数 : =z_fun_strフォルダ選択2 ( 引数@, 引数A  )
引数@ : タイトルに表示したい文字列(省略可)
引数A : フォルダーパス(省略可)
戻り値 : 選択されたフォルダのフルパス (キャンセルした場合は""(空文字))

名前を付けて保存実行関数 : =Y_GetSaveFileDialog2 ( 引数@引数A引数B引数C )
引数@ : タイトルに表示したい文字列(省略可)
引数A : 初期保存ファイル名の文字列(省略可)
引数B : フォルダーパス(省略可)
引数C : フィルター(省略可) access=mdb excel=xls
戻り値 : 保存先のフルパス+ファイル名 (キャンセルした場合は""(空文字))

カラー選択実行関数 : =Y_GetColorDialog ( 引数@ )
引数@ : Long形の変数 (初期色) (実行後は設定値に変更される)
戻り値 : 関数 ← 1:色が選択された 0:[キャンセル]ボタンを押された
戻り値 : 引数@の変数 ← 選択された色の数値

D.Core固有 HTMLを読み込む方法

必要モジュール : 「ass_API関数」

実行関数 : =getWEB ( 引数@ )
引数@ : URL
戻り値 : 読み込んだWEBのソーステキスト (読み込み失敗時は""(空文字))

D.Core固有 プログレスバーの表示

必要モジュール : 「mmj_共有関数」

実行関数 : CALL プログレス開始 ( 引数@ , 引数A
実行関数 : CALL プログレス表示 ( 引数A , 引数B
実行関数 : CALL プログレス終了 ( )

引数@ : 表示したいタイトルの文字列
引数A : 表示したいメッセージの文字列
引数B : 表示したい進行ゲージの値(0〜1までの小数)

※ループ前に「開始」、ループ中に「表示」、ループ後に「終了」といった呼び出しをする。

D.Core固有 独自カレンダーの表示Accessのバージョンに依存しません)

必要モジュール : 「mmj_共有関数」
必要フォーム : 「f_カレンダー」

実行関数 : =カレンダー ( 引数@

引数@ : 初期表示したい日付(Date) 省略可 省略時は、以前に開いた日付になる
戻り値 : NULL → 選択されなかった
戻り値 : date → 選択された日付

D.Core固有 Windowの位置、サイズ取得(単位=ピクセル)

必要モジュール : 「ass_API関数

実行関数 : =getWindowLeft ( 引数@ ) 
実行関数 : =getWindowRight引数@ ) 
実行関数 : =getWindowTop引数@ ) 
実行関数 : =getWindowBottom引数@ ) 

引数@ : 取得したいウィンドウのハンドル 例:Me.Form.hWnd  、 Application.hWndAccessApp

ちなみに、Windowの位置やサイズを設定するには、DoCmd.MoveSize X1 , Y1 , X2 , Y2 (X1=left Y1=Top, X2=幅,  Y2=高さ 全てTwip 各パラメータは省略可能 DoCmd MoveSize 100,200)
 

D.Core固有 ピクセル、TWIP相互変換

必要モジュール : 「ass_API関数

実行関数 : =getPixelX引数@ ) 
実行関数 : =getPixelY引数@ ) 
実行関数 : =getTwipX引数A ) 
実行関数 : =getTwipY引数A ) 

引数@ : 変換したいTWIP
引数A : 変換したいピクセル

※ 縦座標と横座標は、それぞれ変換率が違うので、X、Yを別々に変換する必要あり

D.Core固有 処理中の表示

必要フォーム : 「f_処理中」

処理中表示 : 
DoCmd.OpenForm "f_処理中"

処理中閉じる : DoCmd.Close acForm, "f_処理中"

D.Core固有 色使いのポイント

下図のAの部分は原色なので、目立たせたい部分に有効。使いすぎると逆に目立たせられなくなる上に、派手になる。
Bの部分は灰色が混じっているパステル色。色同士のバランスが大変よく、見た目もやさしい色使いになるため、お勧め。
色を選択する手順としてのポイントは、
  1、AとBのどちらをつかうか(目立たせる部分か、そうでない部分か)
  2、色合いを決める(赤とか青とか横のライン)
  3、右のバーで明るさを決める

D.Core固有 タブオーダーについて

 一通りフォームが完成したら、最後にタブオーダーを確認します。マウス主体のフォームなのか、キーボード主体のフォームなのかに合わせたタブオーダーを考えましょう。
 不必要なオブジェクトはなるべくタブストップをいいえに設定します。また、スクロールを含むオブジェクトにはSetfocus等を使用し、なるべくタブが常駐するように設定します。処理に注意が必要なボタンもなるべくタブストップをいいえに設定したほうがいいと思います。
 カーソルをどのオブジェクトにもおきたくない場合や、プログラムでオブジェクトの表示・非表示の切り替えがあり、フォーカスエラーの可能性がある場合は、Dumyの透明ボタンを設置して一時的にフォーカスを退避させるといった工夫も考えられます。

D.Core固有 インストーラーの作成

必要mdb : ★CoreSetup.mdb

【手順1】 フォルダにインストールに必要な全てのファイルを入れる。(テーブルデータベースの場合、各レコードが初期状態であること)
       フォルダに「★CoreSetup.mdb」、「installfilename.txt」を入れる
【手順2】 ★CoreSetup.mdbの各テーブルに必要ファイル情報を書き込む。installfilename.txtにインストールソフト名を記入。
【手順3】 フリーソフトの「Easy圧縮デラックス」内の「EASYCAB」でフォルダごと圧縮。
       圧縮後に表示される画面で「操作」を選択。自己解凍書庫の作成を選び、下図のように設定。

   

  


最新モジュールのダウンロード  2012/8/30

テーブル構造出力ユーティリティのダウンロード