• ベストアンサー

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

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

  • nisey1
  • お礼率92% (120/130)

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

  • ベストアンサー
  • 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

  • Access2007にて任意にフォルダーを作成したい。

    Access2007にて任意にフォルダーを作成したい。 目的:任意のフォルダーを開くことはできたのですが、フォルダーをいちいち作らなければいけないので特定の条件で任意の場所にフォルダーを作成したい。

  • ウインドウズの起動時にユーザー名をクリックしなくていいようにするには?

    ウインドウズXPsp2を使っています。購入後、ユーザーを一つだけ設定して、ずっと問題なく使っていましたが、先日修理に出して戻ってきたときから電源を入れるとユーザーを選ぶ画面が出て、ユーザー名をクリックしなければ起動できなくなってしまいました。修理の人が電話で「ウインドウズの壁紙が出るところまで確認したいので、ユーザー名を登録させてください」とおっしゃったので、以前使っていたユーザー名を登録してもらうようお願いしたのですが、そのユーザー一つしかないにもかかわらず、そのまま起動してくれません。スタンバイから復帰するときにもようこそ画面が出て、一つしか設定されていないユーザー名をわざわざクリックしなければならず、これではテレビの予約録画ができないのではないかと心配です。ユーザー名ボタンの下に「プログラムが一つ実行中です」とあるのでタスクマネージャーを見たら、SearchMというアプリケーションだけが実行中になっていました。 電源ボタンを押しただけでウインドウズが起動する方法、スタンバイから復帰するときにようこそ画面が出ないようにする方法を教えてください。よろしくお願いします。

  • ExcelVBA ユーザーフォーム

    エクセルのユーザーフォームで、フォームを閉じることに制限をかけることは可能ですか? AccessフォームやVBにある'CloseButton'というプロパティが無いようですが。。

  • ユーザーフォームのコピー?

    エクセルのVBでユーザーフォームをコピーしたいのですが。 例えば、「ユーザーフォーム1」と「ユーザーフォーム2」を同じ形式で作成し、リンクするセルのみを変えたいのです。 今は、それぞれのコントロールをコピーしてます。 いい方法ありますか?というか可能ですか?

  • アクセス2003 フォームが作成できない

    オブジェクト→フォーム→新規作成→オートフォーム:データシート→テーブルを選択で進んでいくと 画像のように「フォームを作成できませんでした」となります。 しかし画面の左下にフォームが出来ています。 そのフォームを×で閉じようとしたら 「フォーム1の変更を保存しますか?」と出るので「はい」を押すと、 「名前を付けて保存」が開き、フォーム名が先ほど選択したテーブル名になっています。 そのまま保存し、オブジェクト→フォームで該当のフォームを開くと、中身はからっぽです。 フィールドは何もないのに、レコード数だけは基のテーブルと同じ数だけ表示されています。 テーブル名はアルファベットのみです。 テーブルをダブルクリックする場合は、問題なく開けます。 ちなみに空のデータベースを作り、適当にテーブルを作り、 同じようにオートフォームでフォームを作ろうと思っても同じ現象が起きました。 ファイルが悪いと言うより、アクセスがおかしいような気がします。 環境は win7でアクセス2003と2007をいれています。 2007の使い方はよくわかりません。 ご回答よろしくお願いします。

  • ユーザーフォームの再起動

    ブックを開いたと同時に、自動でユーザーフォームをモードレス状態で起動させています。 このマクロ付Excelファイルを使用している開発タブなどを有効にしていないエンドユーザーがフォームを閉じてしまった場合に ファイルを再起動しないで、簡単にユーザーフォームを再表示させる方法はございますか?

  • Accessでのフォーム表示

    こんにちは。 現在、Access2003で顧客管理の アプリケーションを作成しています。 ログイン画面でユーザ名とパスワードを入力するテキストを作成し、 コマンドボタンを1つ作成しました。 ユーザ名とパスワードを入力し、ボタンを押すと 認証をして、次のメインフォームを表示するようなものを 作成したいのですが、 別フォームをどうやって表示するのか分かりません。 Visual Basic にはshowメソッドがあったのですが Accessには存在しないようなのですが、どのようにして表示すればよいのでしょうか? どなたかご教授お願いします。

  • 起動時にユーザー名が二つでてくる

    起動するとユーザー名が二つ出てきて、選べるようになってるんですが、ひとつのユーザーしか使わないので、もうひとつの消し方を教えてください。ウィンドーズです。 分かりにくい質問ですいません。

  • Excelで作成されたフォームをAccessにコンバージョンしたいので

    Excelで作成されたフォームをAccessにコンバージョンしたいのですが、フォームのインポートはできないのでしょうか? Accessのフォーム作成画面から、インポートを選択していって、Excelファイルを開くのですが、シートしか選択できません。 コントロールのコピペもできないみたいですが。。。 Excelで作成されたフォームはAccessにはインポートできないのですか? コーディングをそっくり使用することはできなくても、せめてフォームのデザインはコピーしたいのですが。。。(> <) よろしくお願いします。m(_ _)m

  • ExcelVBA ユーザーフォームのオブジェクト名

    ExcelVBA ユーザーフォームのオブジェクト名について質問です。 Excel2003で、あるユーザーフォームのオブジェクト名を「ユーザーフォーム表示中」とし、 ユーザーフォーム表示中.Showで表示するように記述しました。 何度かテストを済ませ、他のプログラムも含めて完成したと思ったのですが、他のPCでエラー報告があり、コードを確認したところ、なぜか、ユーザーフォーム表示.Show(中の字が消えている)になっていました。 もちろん誰かが記述を変更することは考えられません。 以前、自分のPC内でも同じようなことがあり、いくら原因を探しても見つからず、ユーザーフォームのオブジェクト名を削除された記述に合わせて対処したことがあります。 これは何が原因なのでしょうか。 文字数制限か何かあるのでしょうか。

専門家に質問してみよう