人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

マクロを含んだエクセルのプログラムがあります。
これを、試用期間1週間などの時間制限を設けることはできるでしょうか。
イメージとしては、シェアウェアソフトの使用制限のような機能をつけたいのです。
よろしくお願いいたします。


●質問者: clinejp
●カテゴリ:コンピュータ インターネット
✍キーワード:イメージ エクセル シェアウェア ソフト プログラム
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● degucho
●35ポイント

VBA正攻法でいくなら初回起動時に日付を書き込んでおくとかでしょうか

http://officetanaka.net/excel/vba/tips/tips43.htm

応用すればライセンスキーの仕組みなんかも作れると思います


自分でレジストリをいじるようなひとには無意味かもしれませんが

(データを暗号化して消すだけではダメにするとかで対抗できるかな)

他のキーは権限の関係や手順(API)が面倒です

◎質問者からの返答

なるほど、レジストリですか・・・。

なるほど。

すいませんが、具体例を挙げていただけると助かるんですが・・・。


2 ● ardarim
●35ポイント ベストアンサー

サンプルです。


レジストリに値をセットするにはSaveSettingを使います。

取得するにはGetSettingを使います。


以下のサンプルでは、最初にレジストリの値を取得し、まだ存在しない場合は始めて実行したと認識して、今日の日付をレジストリに書き込みます。

既に実行済みの場合は最初に実行された日付が取得できます。

今日の日付(Now())と比較して所定の日数を過ぎているかどうかチェックして、過ぎている場合はメッセージを表示したりして、実行せずにマクロを終了します。


Sub test()

 Dim t As String
 Dim dt As Date

 t = GetSetting("TestApp", "TestSection", "WindowX")
 If t = "" Then
 ' レジストリ値がない。初めて実行されたと認識し、今日の日付をセット
 t = Format(CLng(Now()))
 SaveSetting "TestApp", "TestSection", "WindowX", t
 ' ダミーのランダム値をセット
 SaveSetting "TestApp", "TestSection", "WindowY", Right$(Str(CDbl(Now())), 5)
 End If
 dt = CLng(t)
 
 If Now() > dt + 7 Then
 ' 初めて実行された日から7日以上経っている
 MsgBox "試用期間が過ぎました"
 Exit Sub
 End If

 
 ' ------------------------------------
 ' ここ以降に試用する処理を書く
 ' ------------------------------------

 MsgBox "試用プログラム"

End Sub

TestAppとかTestSectionは適当な名前に変更してください。

WindowXに日付をセットしています。(名前はカモフラージュで全然関係ない名前にしています)

WindowYにダミーのランダム値をセットしています。


また、マクロをパスワードで保護しておけばコードを見られることはありませんので、パスワードを突破されない限りどのように使用制限しているか調べようがなくなりますので回避されにくくなります。

マクロコードを隠す方法


ただしちょっと詳しい人であればレジストリを監視するツールを使ったり、レジストリ名を推測して回避されてしまうかもしれません。万全ではありませんがその辺はやむをえないと思います。

ささやかな抵抗として以下のようなものが考えられます。

◎質問者からの返答

詳しく解説していただきありがとうございました。

さっそく試してみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ