Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

作成したエクセルファイル自体をコピー禁止にしたい

18,526 views
Skip to first unread message

ダブルR

unread,
Jan 30, 2009, 12:02:01 AM1/30/09
to
VBAで作成したエクセルファイルを、お客様に納品するのですが、エクセルファイルごと、複製禁止にしたいと思っています。
VBAの中身をみれないようにしたり、いじったりできないようには設定ができていますが、ファイル自体を違うPCや、CDなどに焼いたり、USBメモリにコピーしたりするのを防ぎたいです。

別サイトでコピープロテクターのソフトを購入してCDに焼いたら?とのアドバイスをいただきましたが、ソフトメーカーのHPをみると2006.7.7をもって販売&サポート終了となってしまっていました。

何か別の方法を教えていただけませんでしょうか?

当方 WinXP Office2007を使用しています。

TAKAHASHI Hisanori

unread,
Jan 30, 2009, 1:57:12 AM1/30/09
to

"ダブルR" <@discussions.microsoft.com> wrote in message news:019E7C12-5859-4B80...@microsoft.com...

> VBAで作成したエクセルファイルを、お客様に納品するのですが、エクセルファイルごと、複製禁止にしたいと思っています。
> VBAの中身をみれないようにしたり、いじったりできないようには設定ができていますが、ファイル自体を違うPCや、CDなどに焼いたり、USBメモリにコピーしたりするのを防ぎたいです。

客先のPCではファイルの複製禁止はできないような気がしますが
セットアップ時にWindowsフォルダに適当な名前のファイルを作成し
エクセルファイルの起動時にそのファイルがなければ機能しないよう
(ファイルを閉じるとか)に作成しておけばいいのではないかと思われます。

--
TAKAHASHI Hisanori

Kami

unread,
Jan 30, 2009, 4:58:50 PM1/30/09
to
こんにちは。
別のサイトの掲示板にUPしたものですが。
試してみてよかったら使用して下さい。
新しいブックを開きワークシートを一枚追加して名前を Err とします。
このシートのA1にでも 「マクロ有効で開いて下さい。」
とかを書いて於いてください。
一度名前をつけて保存して下さい。
そして Workbook モジュールに下記を貼り付けて保存してから名前の変更を
して閉じてみてください。
変更した名前での保存は出来ていない筈です。
又、別のホルダーにコピーしてから開いてみてください。
別のホルダーから消えているはずです。
プロジェクトの保護もお忘れなく

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


TAKAHASHI Hisanori

unread,
Jan 30, 2009, 9:15:05 PM1/30/09
to

"Kami" <ka...@po.mirai.ne.jp> wrote in message news:%23ZB32Xy...@TK2MSFTNGP05.phx.gbl...

> 新しいブックを開きワークシートを一枚追加して名前を Err とします。
> このシートのA1にでも 「マクロ有効で開いて下さい。」
> とかを書いて於いてください。
> 一度名前をつけて保存して下さい。
> そして Workbook モジュールに下記を貼り付けて保存してから名前の変更を
> して閉じてみてください。
> 変更した名前での保存は出来ていない筈です。
> 又、別のホルダーにコピーしてから開いてみてください。
> 別のホルダーから消えているはずです。

別のPCの同じドライブに同じ名前のフォルダーを作ってコピーすれば
(フォルダごとコピーとか)問題なくコピーされて利用されそうな感じですが…。

--
TAKAHASHI Hisanori

SETO Sohei

unread,
Jan 31, 2009, 1:01:40 AM1/31/09
to
"TAKAHASHI Hisanori" <jpa...@microsoft.com> wrote in article
<uLe0#m0gJH...@TK2MSFTNGP06.phx.gbl> ;
>別のPCの同じドライブに同じ名前のフォルダーを作ってコピーすれば
>(フォルダごとコピーとか)問題なくコピーされて利用されそうな感じですが…。

まあ,それぞれの方法にメリット・デメリットはありますよね。
セキュリティに完璧な方法は有り得ないので, 状況に応じたバランスが
大事なんじゃないでしょうか。

# 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

TAKAHASHI Hisanori

unread,
Jan 31, 2009, 1:55:53 AM1/31/09
to

"SETO Sohei" <s...@creamy.nax.ne.jp> wrote in message news:eSmmjl2g...@TK2MSFTNGP03.phx.gbl...

> # TAKAHASHI さんの方法も,
> #  (1) Windows フォルダに余計なファイルを増やす。
> #  (2) アンチウィルスやUACに叱られる可能性。
> #  (3) そのファイルが使われていることがユーザにバレたら, コピーされる。
> # 等のデメリットはあるかと。

確かにそうですね。
(2)はVistaを持っていないので分からないのですが
ファイルの存在をチェックするだけでUACに警告されるのでしょうか?

(3)は個人的にばれる可能性は低いかなと思います。

ただ、どちらにしても、もと記事の

"VBAの中身をみれないようにしたり、いじったりできないようには設定"

というのが
プロジェクトのプロパティの保護でパスワードをつけただけでしたら
解除方法はインターネットで検索するとわりと簡単に見つかりますので
VBAが理解できるユーザーでしたら改変されてしまいますね。

--
TAKAHASHI Hisanori

0 new messages