2

Excelスプレッドシートには、そのProject構造にプログラムでアクセスする必要があります。ただし、このアクセスはデフォルトで無効になっています。このスニペットを使用してレジストリに書き込むことにより、プログラムで有効にすることができます。

Set wsh = CreateObject("WScript.Shell")
'key to modify'
str1 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Word\Security\AccessVBOM"
'enable access'
wsh.RegWrite str1, 1, "REG_DWORD"
'read the vba project name'
MsgBox Application.NormalTemplate.VBProject.Name
'disable access'
wsh.RegDelete str1

プログラムで実行(およびリセット)することはできますが、これによりセキュリティ上の問題が発生する可能性があります。

私のプロジェクトでは、構造を変更しようとしますが、変更Projectできない場合はエラーをスローします。エラーをキャッチできます。この時点で、スニペットを実行してアクセスを有効にするか、エラーメッセージをユーザーに表示して手動でアクセスを有効にすることができます。プログラムを介してアクセスを有効にし、後で無効にできるようにするか、ユーザーにそうするように指示する方がよいでしょうか。

4

2 に答える 2

2

プログラムで実行できるという事実、セキュリティ上の問題であるように私には思えます。デフォルトの「保護」をオーバーライドするためのこのような単純なメカニズムが存在することを考えると、それをオフにすることでユーザーを大幅に大きなリスクにさらすことはありません。とにかく、彼らの塩分に値するウイルス作成者なら誰でもこれを行うでしょう.

とはいえ、作業中に 20 秒間オフにしてから再度オンにすると、ユーザーにオフにするように依頼するよりもはるかに短い時間 (壊れた) ウィンドウが開いたままになります。

ユーザーに一時的にオフにする許可を求めてから、もう一度オンに戻すことを確認する傾向があります(オフのままにすることはできません)。

于 2009-07-15T14:55:15.493 に答える
1

2 つのこと: レジストリを介してオフィスのセキュリティ設定を変更できることはよく知られています。そのため、Office はファイルを開くときに設定を読み取るだけでこれを回避します。そのため、コードで設定を変更した場合は、設定を有効にするためにファイルを閉じてから再度開く必要があります。次に、ユーザーのセキュリティ設定を改ざんすることは、「失礼な」ソフトウェアと見なされます。ユーザーがあなたのコードを許可したい場合は、許可します。設定を有効にしてプログラムを再起動するように促すだけです。それを過ぎたものは、悪い行動と見なされます。
覚えておいてください、できるからといって、そうすべきだというわけではありません:)

于 2009-07-15T14:59:29.217 に答える