以前、ちらっと紹介したACCESS管理用アドイン
(主要オブジェクトをテキスト出力するだけだけどw)
若干の改修をして公開しました。
たいした改修じゃない(仕事先で要望があったのでw)から
どうしようか迷ったけど、とりあえずUPしました。
対象はACCESS2003以降、2010での動作確認まではしました。
2、3時間の改修なので別に性能UPって訳じゃないです。
結構、知れ渡っている「SaveAsText」ってやつを使用しているだけです。
ソースはお見せするほどの出来では無い為、恥ずかしくて公開してません。
ダウンロードは
http://www.vector.co.jp/soft/winnt/business/se495956.html
よりできます。 笑ってやってくだせい。
IT技術関連は.NETネタが主流のカキコになると思われます^_^;
まあヘッポコなので嘘の情報がまぎれているかも知れません。
ソースの流用はご自由に。ただし責任は取りません。
肥大型心筋症の為ICDを埋め込んでます。
諸々の雑談、巡った神社もUP
更新日付
最新投稿:大浦神社
投稿日:2026年4月13日
追記:吉備津彦神社
追記日:2026年5月7日
火縄銃演武
投稿日:2026年4月13日
追記:吉備津彦神社
追記日:2026年5月7日
火縄銃演武
2012年3月3日土曜日
2012年1月7日土曜日
ACCESSの実行画面をMSペイントに出力
たまには技術ネタも書け!とお叱りを受けそうなのでw
ACCESSを使用したシステムでハードコピーをボタン等でしたい。
出来たハードコピーはペイントで見たい との案件。
とりあえず思いついたのがクリップボード経由での受け渡し。
ただ出力先がMSペイント指定なのでめんどくさい。
しかもACCESSにクリップボード操作はサポートされてないようだし。
安直に
[prt sc]を画面から投げてクリップボードに画面コピー後
MSペイントを起動させて[Ctr+v]を投げる事を考えた。
最初 SendKeysで[scr sc]を投げたけど取れない。
ググったらどうも使えない事があるらしい。
めんどくさいけどAPIを一部使用。
以下がそのソース(簡易版w)
--------------------------------------------------------------------------------------
Option Compare Database
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'画面をクリップボードにコピー
Public Sub subGetSnapShot()
'[prt sc]Key 送信
Call keybd_event(CByte(vbKeySnapshot), 0, 0, 0)
Call keybd_event(CByte(vbKeySnapshot), 0, 2, 0)
End Sub
'ペイント起動後、クリップボードをペースト
Public Sub subOutClipBord()
Dim objShell As New WSHShell
Dim objExe As WshExec
'MSPaint起動
Set objExe = objShell.Exec("mspaint.exe")
'起動待ち
Do Until objShell.AppActivate(objExe.ProcessID)
Loop
'[Ctr+V]key 送信
SendKeys "^v"
'参照破棄
Set objExe = Nothing
Set objShell = Nothing
End Sub
'画面をペイントに出力
Public Sub subOutForm()
'画面取得
Call subGetSnapShot
'制御をWindowsに一時戻す
DoEvents
'ペイントへ出力
Call subOutClipBord
End Sub
--------------------------------------------------------------------------------------
参照設定に[Windows Script Host Object Model]を設定して
画面から上記[subOutForm]をコールすればとりあえず動くはず^_^;
マシンのスペックが古いと時間が掛かりますし
実行中の操作で不具合が発生する可能性もありますがw
参考程度に(^^ゞ
試行錯誤してたから1日掛かったorz・・・
ACCESSを使用したシステムでハードコピーをボタン等でしたい。
出来たハードコピーはペイントで見たい との案件。
とりあえず思いついたのがクリップボード経由での受け渡し。
ただ出力先がMSペイント指定なのでめんどくさい。
しかもACCESSにクリップボード操作はサポートされてないようだし。
安直に
[prt sc]を画面から投げてクリップボードに画面コピー後
MSペイントを起動させて[Ctr+v]を投げる事を考えた。
最初 SendKeysで[scr sc]を投げたけど取れない。
ググったらどうも使えない事があるらしい。
めんどくさいけどAPIを一部使用。
以下がそのソース(簡易版w)
--------------------------------------------------------------------------------------
Option Compare Database
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'画面をクリップボードにコピー
Public Sub subGetSnapShot()
'[prt sc]Key 送信
Call keybd_event(CByte(vbKeySnapshot), 0, 0, 0)
Call keybd_event(CByte(vbKeySnapshot), 0, 2, 0)
End Sub
'ペイント起動後、クリップボードをペースト
Public Sub subOutClipBord()
Dim objShell As New WSHShell
Dim objExe As WshExec
'MSPaint起動
Set objExe = objShell.Exec("mspaint.exe")
'起動待ち
Do Until objShell.AppActivate(objExe.ProcessID)
Loop
'[Ctr+V]key 送信
SendKeys "^v"
'参照破棄
Set objExe = Nothing
Set objShell = Nothing
End Sub
'画面をペイントに出力
Public Sub subOutForm()
'画面取得
Call subGetSnapShot
'制御をWindowsに一時戻す
DoEvents
'ペイントへ出力
Call subOutClipBord
End Sub
--------------------------------------------------------------------------------------
参照設定に[Windows Script Host Object Model]を設定して
画面から上記[subOutForm]をコールすればとりあえず動くはず^_^;
マシンのスペックが古いと時間が掛かりますし
実行中の操作で不具合が発生する可能性もありますがw
参考程度に(^^ゞ
試行錯誤してたから1日掛かったorz・・・
2011年12月12日月曜日
雑談 12月12日
MS-ACCESSを使用した小規模システムの構築ってもう定番化しつつあるのかな?
もちろんDB自体はサーバにSQL-SERVER等で。
たしかにACCESSってDBを簡易操作するには便利なツールではあるし
簡単なシステムなら十分期待に副えるんだけど…
ユーザが勝手に改変できないようにロック掛けたり
ACCESS標準の機能を止めたりと面倒なんだよね。
中途半端にACCESS知ってるユーザが敢えて変更できるようにしてくれとか…
以前、短期に運用を頼まれたシステムで
データが消去される事があって
原因を調べたらテーブルを開いた後で
表示した内容をユーザが勝手に消してたw
単に必要なデータを印刷させたい為だったそうだが…
もちろん、最初からスナップショットなりで変更できなくすれば良いんだけど
前任者が即席で作らされたシステムらしい。
簡単に何も考えずそれなりの物が出来ちゃうけど
それなりの落とし穴もある訳で…
もちろんDB自体はサーバにSQL-SERVER等で。
たしかにACCESSってDBを簡易操作するには便利なツールではあるし
簡単なシステムなら十分期待に副えるんだけど…
ユーザが勝手に改変できないようにロック掛けたり
ACCESS標準の機能を止めたりと面倒なんだよね。
中途半端にACCESS知ってるユーザが敢えて変更できるようにしてくれとか…
以前、短期に運用を頼まれたシステムで
データが消去される事があって
原因を調べたらテーブルを開いた後で
表示した内容をユーザが勝手に消してたw
単に必要なデータを印刷させたい為だったそうだが…
もちろん、最初からスナップショットなりで変更できなくすれば良いんだけど
前任者が即席で作らされたシステムらしい。
簡単に何も考えずそれなりの物が出来ちゃうけど
それなりの落とし穴もある訳で…
2011年10月15日土曜日
ACCESSでのアドイン作成
前にACCESSでのソース管理について雑記したけど
その時にアドインも作成したので
その方法を。
他にもアドイン作成方法はあると思うけど未調査^_^;
なを、元ネタはACCESS2000で作成時の記録
-----------------------------------------------------------------
手順1.アドイン用MDBの作成
通常のMDB作成と同じ
手順2.定義用テーブルの作成
テーブル名:USysRegInfo
フィールド名 属性
Subkey テキスト型 255文字
Type 長整数型
ValName テキスト型 255文字
Value テキスト型 255文字
手順3.アドイン機能の作成
呼出モジュール(Function)の作成
戻り値指定は不要
ex: Public Function adin_Main()
:
End Function
※)このモジュール等はアドイン外からも参照可能なので
名称が重ならないように配慮するべし。
定義4.定義テーブルのレコード作成
手順2で作成したテーブルに3レコード追加
%アドイン実体名% は ○○.mda って奴ね
定義5.ファイルの拡張子を変更(MDB->MDA)
-----------------------------------------------------------------
これでACCESS用アドインは完成。
後は実行用PCにコピーしてACCESSのメニューから登録すればOKかな。
そうそう、UsysRegInfoってシステムオブジェクト扱いなんで通常は見えません。
オプションを変更すれば見えるよ。
その時にアドインも作成したので
その方法を。
他にもアドイン作成方法はあると思うけど未調査^_^;
なを、元ネタはACCESS2000で作成時の記録
-----------------------------------------------------------------
手順1.アドイン用MDBの作成
通常のMDB作成と同じ
手順2.定義用テーブルの作成
テーブル名:USysRegInfo
フィールド名 属性
Subkey テキスト型 255文字
Type 長整数型
ValName テキスト型 255文字
Value テキスト型 255文字
手順3.アドイン機能の作成
呼出モジュール(Function)の作成
戻り値指定は不要
ex: Public Function adin_Main()
:
End Function
※)このモジュール等はアドイン外からも参照可能なので
名称が重ならないように配慮するべし。
定義4.定義テーブルのレコード作成
手順2で作成したテーブルに3レコード追加
| Subkey | Type | ValName | Value |
|---|---|---|---|
| HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名% | 0 | ||
| HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名% | 1 | Expression | =%手順3で作成したFunction名% |
| HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名% | 1 | Library | |ACCDIR\%アドイン実体名% |
%アドイン実体名% は ○○.mda って奴ね
定義5.ファイルの拡張子を変更(MDB->MDA)
-----------------------------------------------------------------
これでACCESS用アドインは完成。
後は実行用PCにコピーしてACCESSのメニューから登録すればOKかな。
そうそう、UsysRegInfoってシステムオブジェクト扱いなんで通常は見えません。
オプションを変更すれば見えるよ。
2011年10月8日土曜日
MS-ACCESSのソース管理
それほど大きくないシステムでMS-ACCESSを利用して構築する案件は
予想外に多かったりする。
(オイラのまわりだけかもw)
で、単独での開発なら良いけど複数人での開発となると
ちょっと厄介。
どうしてもデグレが発生しやすい。
VBAのソースだけなら良いけど、フォーム等のプロパティもあるし。
ただ、各オブジェクトをテキストとして出力もできるんだよね。
ヘルプ等では公開されてないようだけど。
SaveAsText ってやつね。
で以下のモジュールをつくってみた。
'-----------------------------------------------
'モジュール一括出力
'-----------------------------------------------
Public Sub Addin_subOutModule(strFolder As String)
Dim aObj As Object
Dim FName As String
On Error GoTo Err_Addin_subOutModule
'全モジュール出力
For Each aObj In CurrentProject.AllModules
FName = strFolder & "module_" & aObj.Name & ".txt"
Application.SaveAsText acModule, aObj.Name, FName
Next
'全フォーム出力
For Each aObj In CurrentProject.AllForms
FName = strFolder & "form_" & aObj.Name & ".txt"
Application.SaveAsText acForm, aObj.Name, FName
Next
'全レポート出力
For Each aObj In CurrentProject.AllReports
FName = strFolder & "report_" & aObj.Name & ".txt"
Application.SaveAsText acReport, aObj.Name, FName
Next
'全マクロ出力
For Each aObj In CurrentProject.AllMacros
FName = strFolder & "macro_" & aObj.Name & ".txt"
Application.SaveAsText acMacro, aObj.Name, FName
Next
'全クエリ出力
For Each aObj In CurrentData.AllQueries
FName = strFolder & "querydef_" & aObj.Name & ".txt"
Application.SaveAsText acQuery, aObj.Name, FName
Next
Set aObj = Nothing
Exit Sub
Err_Addin_subOutModule:
MsgBox Err.Description
Resume Next
End Sub
-------------------------------------------
strFolder に出力先フォルダ名(最終文字に¥付き)を指定してコールするだけ。
ただオブジェクト名に"/"等があると駄目だけど^_^;
出力ファイルで差分を取れば変更箇所が判定できる。
(編集しなくても変わる項目もあるけど…)
以前アドインとして公開してるソースから引用してます。
VBAStepCounterForAccess2000 ってやつね(^^ゞ
ACCESS2000 ~ 2007までは出来るはず。2010は知らんw
予想外に多かったりする。
(オイラのまわりだけかもw)
で、単独での開発なら良いけど複数人での開発となると
ちょっと厄介。
どうしてもデグレが発生しやすい。
VBAのソースだけなら良いけど、フォーム等のプロパティもあるし。
ただ、各オブジェクトをテキストとして出力もできるんだよね。
ヘルプ等では公開されてないようだけど。
SaveAsText ってやつね。
で以下のモジュールをつくってみた。
'-----------------------------------------------
'モジュール一括出力
'-----------------------------------------------
Public Sub Addin_subOutModule(strFolder As String)
Dim aObj As Object
Dim FName As String
On Error GoTo Err_Addin_subOutModule
'全モジュール出力
For Each aObj In CurrentProject.AllModules
FName = strFolder & "module_" & aObj.Name & ".txt"
Application.SaveAsText acModule, aObj.Name, FName
Next
'全フォーム出力
For Each aObj In CurrentProject.AllForms
FName = strFolder & "form_" & aObj.Name & ".txt"
Application.SaveAsText acForm, aObj.Name, FName
Next
'全レポート出力
For Each aObj In CurrentProject.AllReports
FName = strFolder & "report_" & aObj.Name & ".txt"
Application.SaveAsText acReport, aObj.Name, FName
Next
'全マクロ出力
For Each aObj In CurrentProject.AllMacros
FName = strFolder & "macro_" & aObj.Name & ".txt"
Application.SaveAsText acMacro, aObj.Name, FName
Next
'全クエリ出力
For Each aObj In CurrentData.AllQueries
FName = strFolder & "querydef_" & aObj.Name & ".txt"
Application.SaveAsText acQuery, aObj.Name, FName
Next
Set aObj = Nothing
Exit Sub
Err_Addin_subOutModule:
MsgBox Err.Description
Resume Next
End Sub
-------------------------------------------
strFolder に出力先フォルダ名(最終文字に¥付き)を指定してコールするだけ。
ただオブジェクト名に"/"等があると駄目だけど^_^;
出力ファイルで差分を取れば変更箇所が判定できる。
(編集しなくても変わる項目もあるけど…)
以前アドインとして公開してるソースから引用してます。
VBAStepCounterForAccess2000 ってやつね(^^ゞ
ACCESS2000 ~ 2007までは出来るはず。2010は知らんw
2011年9月23日金曜日
ACCESSとVB.NETの色指定
以前、ACCESS(2003)とVB2008を使用したシステム構築の案件があったんだけど
当然、ACCESS側とVB.NETでのインターフェイス(見た目w)を統一したいと。
フォーム上の色はINIファイルから設定したいと。
で、ACCESSの色(RGB)とVB2008(ARGB)の色は形式が異なる訳で変換が必要。
例)
ACCESS-----------------------------
me.詳細.BackColor = %指定色%
VB2008------------------------------
Dim cl As New Color
cl = ColorTranslator.FromWin32(%指定色%)
me.BackColor = cl
当然、ACCESS側とVB.NETでのインターフェイス(見た目w)を統一したいと。
フォーム上の色はINIファイルから設定したいと。
で、ACCESSの色(RGB)とVB2008(ARGB)の色は形式が異なる訳で変換が必要。
例)
ACCESS-----------------------------
me.詳細.BackColor = %指定色%
VB2008------------------------------
Dim cl As New Color
cl = ColorTranslator.FromWin32(%指定色%)
me.BackColor = cl
登録:
投稿 (Atom)