別サイトでコピープロテクターのソフトを購入してCDに焼いたら?とのアドバイスをいただきましたが、ソフトメーカーのHPをみると2006.7.7をもって販売&サポート終了となってしまっていました。
何か別の方法を教えていただけませんでしょうか?
当方 WinXP Office2007を使用しています。
客先のPCではファイルの複製禁止はできないような気がしますが
セットアップ時にWindowsフォルダに適当な名前のファイルを作成し
エクセルファイルの起動時にそのファイルがなければ機能しないよう
(ファイルを閉じるとか)に作成しておけばいいのではないかと思われます。
--
TAKAHASHI Hisanori
Option Explicit
Const strDir = "D:\Excel\Test" ’保存したホルダー 要変更
Const strBook = strDir & "\CopyTest.xls" ' \ と保存した名前 要変更
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sht As Worksheet
Call KillThisBook
With ThisWorkbook
.Worksheets("Err").Visible = xlSheetVisible
For Each sht In .Worksheets
If sht.Name <> "Err" Then
sht.Visible = xlSheetVeryHidden
End If
Next
.Save
.Saved = True
End With
End Sub
Private Sub Workbook_Open()
Dim sht As Worksheet
Call KillThisBook
With ThisWorkbook
For Each sht In .Worksheets
If sht.Name <> "Err" Then
sht.Visible = xlSheetVisible
End If
Next
.Worksheets("Err").Visible = xlSheetVeryHidden
End With
End Sub
Private Sub KillThisBook()
With ThisWorkbook
If .FullName <> strBook Then
If Not .ReadOnly Then
.Saved = True
.ChangeFileAccess xlReadOnly
End If
On Error Resume Next
Kill .FullName
.Close False
On Error GoTo 0
End If
End With
End Sub
別のPCの同じドライブに同じ名前のフォルダーを作ってコピーすれば
(フォルダごとコピーとか)問題なくコピーされて利用されそうな感じですが…。
--
TAKAHASHI Hisanori
まあ,それぞれの方法にメリット・デメリットはありますよね。
セキュリティに完璧な方法は有り得ないので, 状況に応じたバランスが
大事なんじゃないでしょうか。
# TAKAHASHI さんの方法も,
# (1) Windows フォルダに余計なファイルを増やす。
# (2) アンチウィルスやUACに叱られる可能性。
# (3) そのファイルが使われていることがユーザにバレたら, コピーされる。
# 等のデメリットはあるかと。
----------
何かマシン固有の情報を取得し, チェックするという方法もあります。
たとえばレジストリから Excel のプロダクトキーを取得。
| regKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\" _
| & Application.Version & "\Registration\" _
| & Application.ProductCode & "\ProductID"
| productID = CreateObject("WScript.Shell").RegRead(regKey)
(1) コードの中に, 対象マシンのExcelプロダクトキーを決め打ちしてチェック。
→ 開発手間が少ないですが, 導入時に客先のマシンを調べる必要があります。
(2) 初回起動時に, 保護された非表示シートなどに読み込み, 2回目以降はチェック。
→ 初回起動前にコピーされたりCDに焼かれたり, メール添付したら
コピーし放題です。
(3) アクティベーションもどきの仕組みを作る。
1. マシン固有情報を簡略化/暗号化した情報をユーザ画面に表示。
2. あなたが管理する秘密鍵×マシン固有情報から算出するハッシュ値を
ユーザに「アクティベーションID」として教える。
3. 起動のつど, マシン固有情報とアクティベーションIDが一致するか確認する。
→「使用するマシンが変わるので, アクティベーションIDを再発行して下さい」
とユーザに言われた際に, ディアクティベーションの仕組みも欲しくなるかも。
# マシン固有情報として Excel のプロダクトIDを利用した場合,
# Excel すらも不正コピーして使っていたら当然に意味がないですし,
# ユーザが Excel をバージョンアップしたら, 動かなくなります(_o_)
# 他にマシン固有情報として, Windows のプロダクトID
# (こちらも不正コピー・バージョンアップには弱い)を取得するとか,
# MACアドレス(NICを交換したら動かなくなる。NICが二枚以上ささってる場合は?)
# を利用することも可能です。
長くなってすみません。
--
SETO Sohei [ PGP Key ID:0x5DF0FA4D ]
Gobo-city, Wakayama, JAPAN
mailto: s...@creamy.nax.ne.jp
確かにそうですね。
(2)はVistaを持っていないので分からないのですが
ファイルの存在をチェックするだけでUACに警告されるのでしょうか?
(3)は個人的にばれる可能性は低いかなと思います。
ただ、どちらにしても、もと記事の
"VBAの中身をみれないようにしたり、いじったりできないようには設定"
というのが
プロジェクトのプロパティの保護でパスワードをつけただけでしたら
解除方法はインターネットで検索するとわりと簡単に見つかりますので
VBAが理解できるユーザーでしたら改変されてしまいますね。
--
TAKAHASHI Hisanori