2012-02-23 10 views
4

シートを開くときに、Excelシートの列のサイズを自動的に変更するマクロメソッドを書きました。ただし、ユーザーがExcelでマクロを有効にしていない場合、このソリューションは機能しません。Excel VBA:マクロ設定を有効にする

ユーザーがExcelでVBAマクロを無効にしているかどうかを確認し、Excel VBAコードでマクロを有効にする方法はありますか?

答えて

3

これはセキュリティ機能です。あなたがvbaでExcel内でそれを無効にすることができれば、目的を破るでしょう。 私はあなたがこれを行うための標準的な方法を強制することですmodifying the registry

+0

+1レジストリアプローチ。私は[タグ:vbs]でこれを試してみましたが、それはローカルマシンでうまくいきました。おそらく、他のマシンに接続してローカルネットワーク上で実行することもできます。しかし、遠隔地のユーザーはマクロ設定を行うためにコードを自分で実行する必要があるので、私はスプラッシュ画面のルートに行く必要があります。 – brettdj

9

によって他のアプリケーションから設定を変更することができます...

答えはノーで、ユーザーは自分のセキュリティ設定を適用する必要があります怖いですユーザーがスプラッシュ画面を使用してマクロを有効にする

  • 作られていますspash画面を除いて、ブックのすべてのシート 非常に隠されたマクロが有効になっている場合
  • (のみVBAまたはVBAエディタを経由して変更することができます)
    1)場合にはワークブックが開き、コードは、ブックを閉じると、マクロの場合、すべてのこれらのシートは再び非常に隠された
  • を作られています)、これらすべての非常に隠されたシート
    2の隠蔽を解除しますs「が再オープンし、このファイルをクローズマクロを有効にしてください」、ユーザーが唯一と言ってスプラッシュ画面を見ることができます有効になっていない
この技術のための完全なコードを持つ2つのリンクが

    の下に記載されています

  1. ブラッドYundtこのhere at TekTips
  2. Jonskeをカバーat VBAeXpress
+2

興味深いテクニック – assylias

+3

私はBeforeSaveを使うので、上記の最初のリンクのようなものを選んでいます。 BeforeCloseを使用する際の問題は、保存したくない変更をユーザーが行った可能性があり、2番目のリンクのようにBeforeCloseイベントにブックを保存してオーバーライドすることです。もう1つのことは、隠されていると思われるシートを処理する必要があることです。そうしても構わない場合は、ユーザーが隠してしまったものです。 –

+0

Brad Yundtのコード(上のリンク#1、ページの一番下)はほとんど動作しますが、それほどではありません。以下の6つのテストケースすべてを通過するわけではありません。各テストについて:ファイルを開き、マクロを有効にして、テストを行います。 PASS =奇妙な動作はなく、ファイルは不安を閉じます。テスト:(1)...何もしないでください。 (2)...セルに入力、閉じる、保存プロンプトでNOと言う。 (3)...セルに入力、閉じる、保存プロンプトでYESと答えてください。 (4)...セルに入力し、保存して閉じる。 (5)...セルに入力する、閉じる、保存する、キャンセルする、保存する、閉じる。 (6)...セルに入力する、閉じる、プロンプトでキャンセルする、保存する、別のセルに入力する、閉じる、プロンプトでYESを押す。 –

0

あり有効マクロを自動化する方法があるが、あなたは、少なくともONCクライアントマシン上で完全な制御を持っている必要がありますe。デジタル証明書を使用してマクロを署名し、マクロを初めて署名したときに、Excelはこれによって署名されたマクロを常に信頼するかどうかを選択できます。信頼すると、証明書で署名されたすべてのマクロが自動的に有効になります。

これは、企業ネットワーク上のマクロを開発および管理するための最良のオプションです。

ご迷惑をおかけして申し訳ありません。私の英語は完璧ではありません。 ;)ここ

よろしく

2

はVBAが/ショーシートを非表示にすることなく有効になっているかどうかを確認するための別の方法です。シートの非表示/非表示の問題は、ワークシートを「有効」状態で保存し、保存せずに閉じ、再度開いて警告を表示しないことです。

はモジュール(ないワークシートまたはブックのマクロ)で次の関数を作成します。あなたは、マクロが有効にされているかどうかについての通知を表示したいでどんな細胞、

Public Function MacrosEnabled() 
    MacrosEnabled = True 
End Function 

さて、次の式を入力します。 :

=IF(ISERROR(MacrosEnabled()&NOW()),"Macros are disabled","Macros are enabled") 

あなただけの値がスプレッドシートが開かれるたびに再計算されていないISERROR(MacrosEnabled())を使用している場合。 NOW()を連結すると、スプレッドシートが開くたびに現在の時刻が読み込まれ、セルの値が再計算されます。私はこのメソッドを広範囲にテストし、マクロが有効かどうかを非常に確実に示すようです。

  • ハイライト、明るい色のチェックインセル、そしておそらく含まれるように、「マクロが無効になっている」テキストを変更:あなたはその後、マクロが無効になっている場合は、物事の数を行うために条件付き書式を適用することができ

    マクロを有効にする方法に関する説明。

  • テキストの色と背景色を同じに設定することで、値がマクロに依存するセルを非表示にします。

Here is a spreadsheet that demonstrates this method

関連する問題