• ベストアンサー

Accessで任意のWindowsユーザー名のみ起動可能なフォームを作成することは可能でしょうか

Accessで作成したフォームに不特定のコピーを防止するための制限をかけたいのですが可能でしょうか。 任意のWindowsユーザー名のみ起動可能にできれば最も望ましいのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.5

お待たせしました。 エラー検証が出来ましたので、再度… マクロの「プロシージャの実行」で指定できる関数は、Function関数のみでした。スミマセン。 したがって、この部分を書き直してください。 Public Sub sub起動チェック()     ↓ Public Function sub起動チェック() これで実行できます。 試しに、このモジュールとマクロを組み込んだMDBを作成しエクスフローラから実行してみました。 「db1.mdbが見つかりません。パスおよびファイル名が正しいか~確認してください」というメッセージが出ますが、これは起動直後にあっという間に終了させたため表示されるメッセージです。 終了させる時にメッセージを表示させればこのエラーは出なくなります。   ↓修正バージョン Function sub起動チェック()  If Environ("USERNAME") <> "vaio" Then   MsgBox "使用できない旨のメッセージ", vbOKOnly + vbExclamation   DoCmd.Quit acQuitSaveNone  End If End Function

nisey1
質問者

お礼

おかげさまで無事できました。 丁寧な解説で最後までおつきあいいただき本当にありがとうございました。 お手数をおかけいたしました。

その他の回答 (4)

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.4

>を貼り付けてみたのですが、普通に起動しダメみたいです。 貼り付けただけではダメですよ(汗; この関数をmdbを読み込んだ時に実行するよう仕掛けが必要です。 例えば、マクロを新規作成し、以下のように記述します。 ・アクション:プロシージャの実行  プロシージャ名:sub起動チェック() と記述し、AutoExecという名前で保存します。 こうすると、mdbを開いた時に AutoExec マクロが自動実行され記述されているアクション(この場合はsub起動チェック())が実行されます。 マクロを保存したら一旦Accessを終了させ、再度mdbを開くと思い通りに動くと思います。

nisey1
質問者

お礼

ありがとうございます 丁寧な解説助かります。 マクロを実行すると 「Access が見つけることができない関数名が含まれています」とメッセージが出ます。 式ビルダでみると、作ったプロシージャでは下段の3つのウインドウの右端になにもでてきません。 すみません。とんちんかんなことをいっているでしょうか・・ ちなみにAccess 2000です

noname#22222
noname#22222
回答No.3

s_husky です。 具体的なコードを見るとガッカリしますよ! 次の3行を某関数に仕組むだけです。 If Not FileExists("C:\Windows\Client.dll") Then   Application.Quit End If Startupのコードは1行です。 FileWrite "C:\Windows\Client.dll", "んlffklfんkl;kl;" ******************************************************************************* Public Function FileExists(ByVal FileName As String) As Boolean   Dim fso As FileSystemObject   Set fso = New FileSystemObject   FileExists = fso.FileExists(FileName) End Function Public Function FileWrite(ByVal FileName As String, _                 ByVal Text As String) As Boolean On Error GoTo Err_FileWrite   Dim fso As FileSystemObject   Dim txs As TextStream   Set fso = New FileSystemObject   Set txs = fso.CreateTextFile(FileName, True)   txs.Write Text   FileWrite = True Exit_FileWrite:   Exit Function Err_FileWrite:   MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"   Resume Exit_FileWrite End Function

nisey1
質問者

お礼

ありがとうございます 難しいですね。 コードはさっぱりです。

noname#22222
noname#22222
回答No.2

No1さんの回答が基本です。 ですから、これは、読み流してもらって結構です。 1、MDEファイルに変換する。 ・これで、事実上、フォームのコピーは無意味になります。 2、他のPCでの使用を禁止する。 大概のフォームで使っている関数の一つにコピーを感知して終了する仕掛けを施す。 ・Windwosフォルダーに Client.dll などのさも在りそうなファイルを仕込む。 ・一つの関数でClient.dllの有無を調べて、無ければ終了する。 ・MDEにしておれば、この仕組みは解析不能です。 ※Startup.exe を用意してClient.dll を忍ばせる訳ですが、結構、ばれません!

nisey1
質問者

お礼

ありがとうございます。 おもしろい方法ですね。 ぜひ試してみたいのですが、具体的なコードをお教え願えないでしょうか?

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

mdbファイルのコピーを制限するのは難しいと思います。 mdb自体にパスワードを設定して、パスワードを知っている人だけ使えるようにすることは出来ます。 特定のログオンユーザーでだけ実行できるようにするのは、 環境変数 USERNAME の内容を調べ、特定の文字列(ユーザー名)と一致しなかったら終了するというプロシージャを起動モジュールとして指定すれば、望ましい形になるのではないでしょうか? Public Sub sub起動チェック()  If Environ("USERNAME") <> "ここに任意のユーザー名を記述" Then   ' 複数のユーザー名を指定したい場合は Or を使用する。   DoCmd.Quit acQuitSaveNone  Endif End Sub ただ、Shiftを押しながら起動させると、起動時の設定で指定された部分は無視されるので、完璧ではありません。

nisey1
質問者

お礼

ユーザー名が vaio のパソコンで、Option Compare Database の下の行に Public Sub sub起動チェック()  If Environ("USERNAME") <> "vaio" Then   DoCmd.Quit acQuitSaveNone  Endif End Sub を貼り付けてみたのですが、普通に起動しダメみたいです。 追加アドバイスをいただけるとうれしいのですが

関連するQ&A