人生最悪の忘れ物

過去の質問に「時間が来たら警告を出す」というのがあったのは
発見出来たのですが 今回やりたい事は「試験で使えるように時間制限を付けたい」というものです。

「開いたら30分後に自動的に(強制的に?)ソフトを閉じる」
「再度開く為にはパスワードが必要」(最初に開く時には不要)

というようにしたいのですが やはりVBAで解決するしか方法はないでしょうか?

ワードでも良いのですが、出来れば Excel2003 でやりたいと考えています。
宜しくお願い致します。

A 回答 (8件)

>ご教示いただいた内容(Cells.Font.ColorIndex = 0')をそのまま


そのままで良いです。意味は 文字の色を自動に 設定するだけです。
回答前のファイル作成して保存するときは、必ずシートを選択して文字色を白、シートに保護
ブックの保護は解除して保存することになりますね。(毎回で大変ですが)
マクロで時間が来て保存された状態は
シートに保護、色は自動、ブックに保護の状態です。


更にと気が付いたので、終了時に保存のいいえを選択する可能性がありますね。
Sub OnTime1()
ActiveSheet.Protect Password:="1234"
Msgbox "指定の時間が来ましたので編集できなくなりました。指定のフォルダに回答を保存してください。"
Application.DisplayAlerts = False'←メッセージを出さない
ThisWorkbook.SaveAs Password:="1234", WriteResPassword:="1234"
ThisWorkbook.Close
End Sub
の1行を加えると上書き保存しますかのメッセージがでなくなります。
この1行はうまく出来るようになってから記述しないと修正の作業が大変になります。
    • good
    • 0
この回答へのお礼

何度もありがとう御座います。

なるほど!
おっしゃる通りですね。
考えれば考えるほど色々出て来ますよね。

実は この質問は 僕の業務ではなく 担当者の代わりに板を立てていたのですが
今後は 担当者が直接 質問するようにしましたので 同じ内容の質問を見付けたら回答してやってください。

中途半端になってしまいましたが
何度も ご回答いただきましてありがとう御座いました。
本当はポイントを全部付けたい所なのですが 同じ方には1回しか付けられないので
20ポイントで我慢してください。

何度も何度もありがとう御座いました。

お礼日時:2008/12/29 16:51

標準モジュールには


Sub OnTime1()
ActiveSheet.Protect Password:="1234"
Msgbox "指定の時間が来ましたので編集できなくなりました。指定のフォルダに回答を保存してください。"
ThisWorkbook.SaveAs Password:="1234", WriteResPassword:="1234"
ThisWorkbook.Close
End Sub
とOnTime1に全て記述してみてください。
先のコードは
OnTime1では シートに保護
Ontime2では ブックに保護の事例です。
上記のコードでシートにもブックにも保護がかかると思います。
>VBEの方にも保護を掛けるには どのようにしたら良いのでしょうか。
VBエディターのツール=>VBAProjectのプロパティのウィザードの保護があります。
もうひとつ気がつきました、シートを保護にしてもマクロを無効で開いて問題を読むことが出来てしまいますね。
例えば、シート全てを選択して文字の色を白にする。(A1のメッセージだけ黒色で見れる)この状態で保存しておく。
Private Sub Workbook_Open()
ActiveSheet.Unprotect Password:="1234"
Cells.Font.ColorIndex = 0'←ここに一行追加、文字の色を自動にします。
Range("A1").Value = "終了時間は"
Range("B1").Value = Now + TimeValue("00:00:10")
Application.OnTime EarliestTime:=Now + TimeValue("00:00:10") _
, Procedure:="OnTime1"
End Sub
にしてみては如何でしょうか。
    • good
    • 0
この回答へのお礼

何度も ご回答いただきまして誠にありがとう御座います。

ご教示いただいた内容に従い、Sub OnTime1() も Sub OnTime2() も
両方 同じマクロとして修正いたしました。

プラス、「マクロを無効にして開いた時は文字が見えないように」これには
激しく感動しましたので そのまま使わせていただく事にしました。

がしかし マクロを無効にして開いてみた所、普通に見えてしまいました。
ご教示いただいた内容(Cells.Font.ColorIndex = 0')をそのまま貼り付けてはいけなかったのでしょうか?

また 時間制限の過ぎたブックを閉じようとしたら「実行時エラー1004」「その操作はできません。このブックは読み取り専用ファイルです」という警告が出てしまいました。

何がいけなかったのでしょうか。。
再度 ご教授いただけませんでしょうか。
宜しくお願い致します。

お礼日時:2008/12/29 13:03

もうひとつ説明わすれました。


ファイル作成したら、保存して閉じてください。
次に開いたときに
Private Sub Workbook_Open()
ActiveSheet.Unprotect Password:="1234"

End Sub が実行されます。
標準モジュールのコードは
Sub OnTime1()
ActiveSheet.Protect Password:="1234"
Msgbox "指定の時間が来ましたので編集できなくなりました。指定のフォルダに回答を保存してください。"
ThisWorkbook.SaveAs Password:="1234", WriteResPassword:="1234"
ThisWorkbook.Close
End Sub
シートに保護かけて、メッセージ出して、ブックに保護かけて、終了
しますね。こちらのほうが少しは良いかも。
受験者にVBA操作されたらOUTですので、うまく行ったらVBエディターでも保護かけることが必要かもしれませんね。
    • good
    • 0
この回答へのお礼

お世話になっております。
ご回答ありがとう御座います。

ご教示いただいた内容をそれぞれ貼り付けてみた所、ものの見事に
メッセージボックスが表示され、編集不可となり感動いたしました。
ありがとう御座います。

ただ、貼り付け場所が悪かったのか何が原因か不明ですが
閉じる時に「変更を保存しますか?」で「はい」を選んで再度開いてみた所パスワードなしで
普通に開いてしまいました。。。

「ThisWorkbook」には
Private Sub Workbook_Open()
ActiveSheet.Unprotect Password:="1234"
Range("A1").Value = "終了時間は"
Range("B1").Value = Now + TimeValue("00:00:10")
Application.OnTime EarliestTime:=Now + TimeValue("00:00:10") _
, Procedure:="OnTime1"
End Sub
を貼り付け

「標準モジュール」には
Sub OnTime1()
ActiveSheet.Protect Password:="1234"
MsgBox "指定の時間が来ましたので編集できなくなりました。指定のフォルダに回答を保存してください。"
End Sub
Sub OnTime2()
ThisWorkbook.SaveAs Password:="1234", WriteResPassword:="1234"
ThisWorkbook.Close
End Sub
このまま貼り付けたのですが 何が間違っているのか 再度 ご教授いただけませんでしょうか。

お手数お掛けしまして申し訳ありません。
宜しくお願い致します。

また、通常のブックには保護を掛けられるのですがVBEの方にも
保護を掛けるには どのようにしたら良いのでしょうか。

お忙しい中 大変恐縮では御座いますが、こちらも合わせてご教授いただけますでしょうか。
何卒 宜しくお願い致します。

お礼日時:2008/12/29 11:01

>「ThisWorkBookに」とか「標準モジュールに」という意味も正直理解できておりません。


VBエディターを起動したら左側に プロジェクト Project というWindowがありませんか?
その中にThisWorkBookがあります。そこをクリックしてください。
新たにThisWorkBook(コード)が開きますので、そこに
Private Sub Workbook_Open()
ActiveSheet.Unprotect Password:="1234"

End Sub を記述すると開いたときにイベントが実行されます。
Password:="1234" はそちらの状況に合わせてください。
他に標準モジュールが開いていればOKですが、
なければ、VBエディターのツールバーの挿入から標準モジュール をクリックしてください。
VB Projectに 標準モジュール Module1 が開きます。
そこに
Sub OnTime1()
ActiveSheet.Protect Password:="1234"

End Sub と
Sub OnTime2()
ThisWorkbook.SaveAs Password:="1234", WriteResPassword:="1234"
ThisWorkbook.Close
End Sub
 を記述します。
・・・, Procedure:="OnTime1"の部分で希望の処理を記述してください。
    • good
    • 0
この回答へのお礼

再回答 誠にありがとう御座います。

まだ 試しておりませんが 取り急ぎお礼まで。

>VBエディターを起動したら左側に プロジェクト Project というWindowがありませんか?
これは 自分で勝手に閉じていたようです。
真ん中の広い部分しか表示しておりませんでしたので 登録する部分にも
種類があると今回初めて知りました。

今から 試してみますので また 分からないことがあったら
宜しくお願い致します。
(面倒なことに巻き込んですみません、宜しくお願い致します)

お礼日時:2008/12/29 09:30

No3です。


シートの保護かけても最後開いて不正されますね。
Sub OnTime2()
ThisWorkbook.SaveAs Password:="1234", WriteResPassword:="1234"
ThisWorkbook.Close
End Sub
上記でパスワードを指定して保存できます。
ほか、開いた時、終了時に空メールを送信させる。
非表示のシートを準備して開いた時の時刻と保存した時の時刻をセルに入れる。
ファイルのプロパティで更新の時刻を確認するなどありそうですが、
不正をやる人は何を考えるかわかりませんので絶対とはいえないかも知れませんね。
    • good
    • 0

お役に立つかどうか、とりあえずアイディアです。


仮にシートのA1に 「マクロを有効にして開かなかったので試験を受けられません」
とでもデカ文字でいれて、シートに保護をかけてファイルを保存しておく。
VBエディターで ThisWorkBookに
Private Sub Workbook_Open()
ActiveSheet.Unprotect Password:="1234"
Range("A1").Value="終了時間は"
Range("B1").Value=Now + TimeValue("00:30:00")
Application.OnTime EarliestTime:=Now + TimeValue("00:30:00") _
, Procedure:="OnTime1"
End Sub
上記の意味は、ファイルと開いた時にシートの保護を解除、A1の文字を消し、終了時間を表示する。
30分後に Ontime1 のマクロを実行

標準モジュールに
Sub OnTime1()
ActiveSheet.Protect Password:="1234"
Msgbox "指定の時間が来ましたので編集できなくなりました。指定のフォルダに回答を保存してください。"
End Sub
上記の意味は、シートに保護をかけて編集できなくする。終了のメッセージを出す。
こんな感じでは如何でしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとう御座います。

試しに ご記入いただきました内容を全部貼り付けてみたのですが
まず、「このシートは保護されているので読み取り専用です」となり
しかもタイムリミットを1分に変更してみましたが 未だに開いたままです。

そもそも ご教示いただいた内容を そのまま貼り付けるだけではNGだったのでしょうか?

「ThisWorkBookに」とか「標準モジュールに」という意味も正直理解できておりません。

全部をまとめて貼り付けたのが いけないのか、それとも貼り付けた場所がそもそもダメなのか、はたまた 何かしら編集が必要だったのか。

再度 ご教示いただけませんでしょうか。

お忙しい中 大変恐縮では御座いますが 何卒宜しくお願い致します。

お礼日時:2008/12/27 17:22

VBAで組む場合の参考に


http://www.asahi-net.or.jp/~zn3y-ngi/YNxv214.htm …

試験とはエクセルの操作の試験?
それとも問題自体の表示か参考資料が表示されるのかな?

エクセルの操作手順や、マクロ作成が問題の場合は、時間制限をマクロで組むこと自体に無理がありそうな気もする、変更や停止処理されてしまえばそれまで。

マクロの無効化に関しては、問題を表示するのもマクロに組み込めば、無効にした時点で問題表示もされなくなるので解決するかとは思いますが、システムの時間を変更されたらどうします?

エクセル以外の他のソフト内(IEとか)でエクセルを読み込んで操作可能なシステムで、エクセル以外のところで時間計測を行うシステムが良いと思う、実現方法はちょっとわからないけど、MOUSの試験のような感じで。
    • good
    • 0
この回答へのお礼

ご回答ありがとう御座います。

>MOUSの試験のような感じで。
そうなんですよ! こんな感じでやりたいんです!

>試験とはエクセルの操作の試験?それとも問題自体の表示か参考資料が表示されるのかな?
これは後者ですね。
ただ単に「試験問題をExcelで配信したい」ってだけなんですよ。
問題の作り方私大では採点も楽になるかなぁ?と。

>エクセル以外の他のソフト内(IEとか)でエクセルを読み込んで操作可能なシステムで、エクセル以外のところで時間計測を行うシステムが良いと思う
これも出来たら それに越した事はないですね。

何かいい方法はないでしょうか?

よろしくお願いします。

お礼日時:2008/12/27 17:29

ファイルを開いた時にマクロを無効にされたらどうしますか。

    • good
    • 0
この回答へのお礼

ご忠告ありがとう御座います。

確かに その通りですね。

ちょうど良かったのですが「マクロを有効にしないと開けない」という
ようには出来ないものでしょうか?

テスト以外にも他のブックでも使いたかったので。

よろしくお願いします。

お礼日時:2008/12/27 17:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報