プロが教えるわが家の防犯対策術!

こんばんわ!
エクセルのファイルをVBAを使って、ファイルを開く回数制限は可能でしょうか?
例えば50回を限度とし51回目を開くと回数制限切れとメッセージが出て終了するようには出来るでしょうか?
只今VBAの勉強中の為、可能であれば具体的に教えて頂ければ有難いです。

A 回答 (5件)

どこかのセルに回数を代入するようにして、開くたびに+1するとか?


(50回を超えたらメッセージを出す)
でも上書き保存しない場合まずいので、閉じる際にした方がいいのかな?

しかしセルの位置を見つけられたら無理かも。
と言うか、マクロを無効で開いた場合はどうしましょ?

あまり参考にはならなかったかも。。。

この回答への補足

ご回答ありがとうございます。
オープンイベントでカウント回数をレジストリに書き込めればクリアできるのですが上手くいきません。
Private Sub Workbook_Open()
Dim t As String
Dim dt As Date
Static a As Integer

a = a + 1
SaveSetting "TestApp", "TestSection", "WindowX", a
If a > 51 Then
MsgBox "試用期間が過ぎましたので終了します。"
' 本ブックをClose
For Each w In Application.Workbooks
w.Save
Next w
Workbooks.Close
End If
End Sub

補足日時:2008/07/17 23:16
    • good
    • 0

プロが考えるような課題を行う必要があるのかな。


ーー
経験は無いが、ブックが閉じられても、前回までに開かれた回数は
記憶されねばなりません。それはディスクの記憶域しかありません。エクセルのセルに記録でもそれは出来ますが、目に付く可能性もありふさわしく無い。OSなどで、ユーザーが使えるエリアも良くわからない。残すところ自作の非公開のファイルに回数を書き出し、開くたびに読み出して、回数チェックをするほか無いと思う。
しかし熟達者はコードを読み解いて、その仕組みを見破るかもしれない。コンパイルして機械語になったりしたものは見破りにくかろうが。相手と用途によって、上記でも十分ならば考えてみては。
    • good
    • 0

ThisWorkbook に下記コードをコピーして名前を付けて保存後何度か開いて見て下さい。



Private Sub Workbook_Open()
Dim 回数 As Integer
回数 = Sheets(1).Cells(1, 1).Value
回数 = 回数 + 1
Sheets(1).Cells(1, 1).Value = 回数
Me.Save
End Sub

シート1のA1セルの値が開く度に増えるでしょう。
これを基にIf文でご希望の処理が出来るかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
シートに書き込み事をレジストリに書き込む
事に変更できないでしょうか?

お礼日時:2008/07/18 09:55

なんか、有料のExcelマクロの体験版とか作成したいんでしょうか。


もし、特定のマクロの実行回数を制限したいということでしたら
特定のシートにパスワードロックを掛けてそこに他の方のいうような
方法でデータを保存しておけば出来ないことはないと思います。
勿論ソースもロックしておかないと見られてしまいますけど。

そうでなく単純に特定のExcelファイルを開けないようにしたいと
いうことならそもそもExcelはデフォルトではマクロの実行は低辺りの
設定になっていて動きませんし、実行するかどうか自体もユーザーが
選べるので意味はありません。
    • good
    • 0

>オープンイベントでカウント回数をレジストリに書き込めればクリアできるのですが上手くいきません。



>a = a + 1
>SaveSetting "TestApp", "TestSection", "WindowX", a

まずaにGetSetting 関数にて回数を取込み、
その回数が50なら起動時は51回目となるので、終了させる。
50に満たない場合には、aに+1をしてレジストリに書き込む。
と言うようにしないと、レジストリはずっと1のままでは?
(検証はしてないですけど)
    • good
    • 1

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