• ベストアンサー

エクセルファイルの回数期限の設定について

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

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

>オープンイベントでカウント回数をレジストリに書き込めればクリアできるのですが上手くいきません。 >a = a + 1 >SaveSetting "TestApp", "TestSection", "WindowX", a まずaにGetSetting 関数にて回数を取込み、 その回数が50なら起動時は51回目となるので、終了させる。 50に満たない場合には、aに+1をしてレジストリに書き込む。 と言うようにしないと、レジストリはずっと1のままでは? (検証はしてないですけど)

その他の回答 (4)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.4

なんか、有料のExcelマクロの体験版とか作成したいんでしょうか。 もし、特定のマクロの実行回数を制限したいということでしたら 特定のシートにパスワードロックを掛けてそこに他の方のいうような 方法でデータを保存しておけば出来ないことはないと思います。 勿論ソースもロックしておかないと見られてしまいますけど。 そうでなく単純に特定のExcelファイルを開けないようにしたいと いうことならそもそもExcelはデフォルトではマクロの実行は低辺りの 設定になっていて動きませんし、実行するかどうか自体もユーザーが 選べるので意味はありません。

  • starsip
  • ベストアンサー率36% (22/60)
回答No.3

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文でご希望の処理が出来るかと思います。

noname#63196
質問者

お礼

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

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

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

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

どこかのセルに回数を代入するようにして、開くたびに+1するとか? (50回を超えたらメッセージを出す) でも上書き保存しない場合まずいので、閉じる際にした方がいいのかな? しかしセルの位置を見つけられたら無理かも。 と言うか、マクロを無効で開いた場合はどうしましょ? あまり参考にはならなかったかも。。。

noname#63196
質問者

補足

ご回答ありがとうございます。 オープンイベントでカウント回数をレジストリに書き込めればクリアできるのですが上手くいきません。 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