[vba画面]→[ツール]→[オプション]⇨[ドッキング]で、全てのウィンドウにチェックを入れるだけで良い。そして、表示された画面を自分好みの位置にする。
- イミデェートウィンドウ
- ローカルウィンドウ
- ウォッチウィンドウ
- プロジェクトエクスプローラ
- プロパティウィンドウ
- オブジェクトウィンドウ
[vba画面]→[ツール]→[オプション]⇨[ドッキング]で、全てのウィンドウにチェックを入れるだけで良い。そして、表示された画面を自分好みの位置にする。
昨日、近くのスーパー万代に米を買いに行った。棚は空っぽ。買えなかった。今年は去年より米の姿がなくなるのが早かった。幸い、近くのスーパーたこ一で5Kgで6134円(税込)でゲットできたけど、気楽に買えない値段になっていた。近くの阪急オアシスも米の棚は空っぽだった。コスモスにはカルロース米が2つほど積んであった。日本は、関税交渉でトランプ大統領にあるだけ買うよと言えば良いのではと思う。後日、OASISを覗くと、4千円ぐらいの5kgの富山コシヒカリが沢山、あった。あるとこにはある。でも阪急にはなかったな。何が起きているんだろうか?そして、数日経った今日、阪急のお米屋を覗くと、米が並んでいた。米は姿を消していなかった。
チェック印(レ点)の文字は、EXCELのセルには書けるが、vbaのコードではとなり、記述できない。いわゆる、環境依存文字の一つのようだ。 では、どうすれば、その文字を判定できるのか? 一つの方法としては、チェック印(レ点)の文字は、16進数のコード2714(UNICODE)を判定すれば良いのではないかと考えた。
If Hex(AscW(Range("A1").Value))=2714 then MsgBOX "GotIt"
結論を先に言うと、ACCESSに/x "マクロ名"という起動パラメタをつけて起動すると、ACCESSが立ち上がった直後に/xで指定したマクロを動かすことができる。 例えば、バッチファイルで、start c:¥users¥username¥documents¥xxxxx.accdb /x "macro-name"でACCESSを起動すると/x "macro-name"で指定したマクロが動くわけだ。 これは、Office 起動 スイッチでググり、ACCESSの起動スイッチの/xの説明に詳しく書いてある。 ちなみにマクロ名をAutoExecにすると、/x AutoExecを付けなくてもACCESSを起動すると、AutoExecというマクロが動くのである。
ACCESSの起動スイッチ /x スイッチの前に指定した Access データベースを開いてから、指定したマクロを実行します。 データベースを開いたときにマクロを実行する別の方法は、AutoExec という名前のマクロを作成することです。 マクロにはウイルスが含まれている可能性があるため、実行には注意が必要です。 実行する場合は、コンピューターで最新のウイルス対策ソフトウェアを実行する、セキュリティ センターを使用して、すべてのマクロ (デジタル署名されているものを除く) を無効にする、マクロの信頼できるソースのリストを保持するという予防策を講じてください。まず、マイクロソフトでは起動パラメタではなく、スイッチと呼んでいるので、ググりかたを「こむづかしく」している。なかなか先程のページに辿り着けない。 どうすれば、ACCESSのマクロを起動時に呼び出せるのかが分かりにくいのだ。
prettycodeを使わずにソースコードを格好良くしたのに、スマホで見ると文字がはみ出していたので、htmlを手直しして、はみ出さないようにしてみた。preタグのstyleでoverflow: auto;を指定すればOKだ。
いつもはprettyprintのお世話になってるが、htmlのみでそれらしくしてみた。 pタグにstyle="background-color:black;border-radius: 7px 7px 7px 7px;"><font color="yellow">のように追加すれば、黒背景に黄色い文字でソースコードっぽく表示させことができる。実際のページは、これだ。
Public Function AutoStartProc()
If InStr(Command,"Delete")>0 then
DoCmd.SetWarnings False
Docmd.OpenQuery "DeleteTableA" '2GB超えの要因となっている不要なテーブルTableAを削除しておく。
DoCmd.SetWarnings True
Application.Quit ’オプションの□ 閉じると最適化するにチェックを入れておく。この結果、最適化が走る。
ElseIf InStr(Command,"afterDelete")>0 then
最適化後にやりたい処理
Docmd.SetWarning False
Docmd.OpenQuery "QueryA"
Docmd.SetWarngs True
Aoplication.Quit
End If
End Function
そのhtmlソースコードは、以下の通り。
<p>
<pre><code><p style="background-color:black;border-radius: 7px 7px 7px 7px;overflow: auto;"><font color="yellow">
Public Function AutoStartProc()
If InStr(Command,"Delete")>0 then
DoCmd.SetWarnings False
Docmd.OpenQuery "DeleteTableA" '2GB超えの要因となっている不要なテーブルTableAを削除しておく。
DoCmd.SetWarnings True
Application.Quit ’オプションの□ 閉じると最適化するにチェックを入れておく。この結果、最適化が走る。
ElseIf InStr(Command,"afterDelete")>0 then
最適化後にやりたい処理
Docmd.SetWarning False
Docmd.OpenQuery "QueryA"
Docmd.SetWarngs True
Aoplication.Quit
End If
End Function</br>
</font></p></code></pre>
ポイントは、pタグにstyleで黒背景のbackground-color:black;と角丸のorder-radius: 7px 7px 7px 7px;overflow: auto;を指定し、フォントの文字色はyellowにするだけだ。
acccessには2GBの壁がある。不要なテーブルをその都度削除しつつ、この壁ギリギリで使いこなすということもままある。 そういうケースで再び立ちはだかるのが、「accessの最適化はaccessを閉じる時しか出来ない」ということだ。aCCessを開いたままで最適化できると楽チンなのですが、それは出来ない。 2GBが超えが起きるたびに手動で不要なテーブルを削除すればいいのだが、効率が悪い。とりわけ自動化したい場合にはマズイ。 そこで、起動パラメタを見て不要なテーブルを削除し、終了するようにする。 あらかじめ、終了時に最適化が走るようにaccessのオプションの「□ 閉じると最適化する」にチェックを入れておく必要がある。 以下のコードを標準モジュールに記述しておく。そして、accessのAutoExecマクロを登録し、AutoStartProcを呼び出すようにしておく。 起動パラメタは、/cmd 起動パラメタでbatファイルに記述しておけば、VBAではCommandという変数で受け取ることができる。
Public Function AutoStartProc()
If InStr(Command,"Delete")>0 then
DoCmd.SetWarnings False
Docmd.OpenQuery "DeleteTableA" '2GB超えの要因となっている不要なテーブルTableAを削除しておく。
DoCmd.SetWarnings True
Application.Quit ’オプションの□ 閉じると最適化するにチェックを入れておく。この結果、最適化が走る。
ElseIf InStr(Command,"afterDelete")>0 then
最適化後にやりたい処理
Docmd.SetWarning False
Docmd.OpenQuery "QueryA"
Docmd.SetWarngs True
Aoplication.Quit
End If
End Function
そして、バッチファイル(x.bat)は以下のようにを書けば良い。
start /wait abc.accdb /cmd "Delete"
start /wait abc.accdb /cmd "afterDelete"
バッチファイルを作らず、タスクスケジューラの基本タスクで実現する場合、プログラム/スクリプトと引数にそれぞれ、aCCessのフルパス、自分のaCCessファイルのフルパス /cmd "Delete"と指定した基本タスク(テーブルを削除し、最適化を行う)と、引数に自分のaCCessファイルのフルパス /cmd "afterDelete"を指定した基本タスク(最適化後にやりたい処理 )を用意しても良い。
Set objConn = CreateObject("ADO.Connection") objConn.ConnectionString = "DSN=DSN1;UID=user1;PWD=password1;" objConn.OpenSQLサーバのテーブルをリンクした、選択クエリを作成している場合、SQLサーバのテーブルへアクセスするのにログイン画面がでてくる。 そのログイン画面を出さないためには、Docmdを使った「簡単な」方法があるのだ。 以下のコードを標準モジュールのどこかに記述してやる。
DoCmd.DeleteObject Actable,"dbo_TBL-A" DoCmd.TransferDatabase acLInk,"ODBC Database", _ "ODBC;DSN=dsn_name;UID=user_id;PWD=pass_wd; _ & "DATABASE= database_name",acTable,"tabl_name","dbo.tbl_name"このテクニックのミソは、TransferDatabaseでSQLサーバのテーブルへのリンクをログイン画面をださすに接続できる、つまり、自動的にコード内で密かにログインしているところだ。そのためにTransferDatabase acLInkの後ろにDB接続情報を記述している。そこがミソなのだ。ちなみにこの文字列はACCESSのリンクテーブルにカーソルを持っていくと、ヌッと表示されるのだ。試してもらいたい。 そして、SQLのテーブルを参照した選択クエリを実行し、EXCELにエクスポートするという2つの操作を1つのDocmdで実現できてしまうのだ。実に効率がいいね。
Dim file1 As String Docmd TransferSpreadsheet acExport,acSpreadsheetTypeExcel12Xmi,"SELECT_QUERY_USING_SQLserversTable",file1,True