web-dev-qa-db-ja.com

シートの「マクロを有効にする」前にExcelマクロを検査/表示する方法は?

使用する必要があるマクロを含むxlsファイルをときどき受け取ります。送信者を完全に信頼していない場合は、マクロのソースを調べて、実際に想定されていることだけを実行していることを確認します。

ただし、Excel 2010では、最初にシートのマクロを有効にしない限り、[マクロの表示]の下の[編集]ボタンが無効になります。ただし、最初にマクロを有効にした場合、悪意のあるコードについては、そのコードが終了した後でのみ確認できます。ランニング...

ドキュメントでマクロを有効にする前に、マクロのソースを表示するにはどうすればよいですか?

13
GJ.

Wordの[開発]タブを使用すると、ドキュメントに埋め込まれたVisual Basicルーチンに簡単にアクセスできるため、ドキュメント内のすべてのマクロを確認できます。

まず、開発者タブが有効になっていることを確認する必要があります。 [ファイル]-> [オプション]に移動します。

developer tab

これで表示されるはずの[開発]タブに[Visual Basic]ボタンが表示され、クリックしてVisual Basicエディターにアクセスできます。

エディターの左側にあるドキュメントツリーを参照すると、最初にマクロを有効にする必要なく、ドキュメントに埋め込まれているすべてのコードとモジュールを確認できます。

私はこれを、信頼できない文書で行う傾向があります。

注:これはWordで行いましたが、Excelでも同じ機能を利用でき、それを有効にするオプションも同じ場所にあります。

13
Mokubai

2003年以降、場合によってはそれ以前のすべてのOfficeアプリケーションのすべてのバージョンで、 Alt+F11 VBAエディターが開きます。 Office 2007以降のリボンで[開発]タブを有効にする必要はありません。

9
hBy2Py

MokubaiとhBy2Pyからの回答は素晴らしく、確かにVBAエディターを表示できますが、少なくともExcelではMicrosoft Office Professional Plus 2016まだコードを表示できません。

私はたまたまそのバージョンを所有しており、悪意のあるXLSを受信し、それを検査したいと確信していました。 Excelで開いた後、通常どおりセーフモードで開きました。もちろん、そのモードを終了するつもりはありませんでした。他の回答者が示すようにVBAエディターを開いたところ、... 空のVBAエディターが表示されました。 「プロジェクトエクスプローラー」パネルが便利に表示"No open projects" XLSファイルをまだ閉じていません。テストのために、2つ目のドキュメント(自分の作業の1つ)を開いたところ、すぐにVBAエディターに表示され、(適切に)VBAがまったくありませんでした。ただし、インターネットからのドキュメントVBAエディターには表示されませんでした

なぜそれがそうなのかを理解しようとして時間を無駄にしましたが、理由は見つかりませんでした。ドキュメントがセーフモードで読み込まれると、私のExcelエディションはVBAモジュールをVBAエディターに送信しないようです。残念なことに、VBAエディターには「OfficeドキュメントからVBAを開く」機能がないため、Excelが頭脳であり、最初にXLSを解凍/デコード/何でもする必要があることは明らかです。

解決策は非常に単純であることがわかりました。

  1. Ribbon-> Developer-> MacroSecurityをクリックします
  2. または、File-> Options-> SecurityCenter(最後のオプショングループ)-> Settings-> Macros
  3. 現在の設定を思い出す(または書き留める)
  4. それらを「通知なしにすべてのマクロをブロックする」に変更します
  5. ドキュメントを確認して閉じ、再度開き、VBAエディターを再度開きます。
  6. 火遊びが終わったら元の設定に戻す

効果:

  • 通知が表示されなかった
  • ドキュメントが完全に読み込まれました
  • マクロは実行されませんでした
  • VBAエディターはモジュールを取得し、すべてのコードを提示しました

気になる場合は、はい、それは確かに悪意のある小さな例です。

Function marcopoloko()
marcopoloko = Left("CM to inches converter", 2) + Right("fed.ex", 4) + "e  " + "/c" + numneroop + amagilocard
End Function

'Sub Workbook_Open()
'If xlTickMarkOutside > 0 Then
'Shell marcopoloko + """", xlXmlExportSuccess
'End If
'End Sub

ところで。ご覧のとおり、後である時点でマクロの実行を許可した場合に備えて、エントリポイントをすぐにコメントアウトしてドキュメントを再保存しました。

0
quetzalcoatl