■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#44173-0マクロを無効にしファイルを開きたいたえ2001-06-19(火) 09:25
     #44174-0RE#44173:マクロを無効にしファイルを開きたいみゃお2001-06-19(火) 09:51
     #44178-0RE#44174:マクロを無効にしファイルを開きたいたえ2001-06-19(火) 10:21
     #44191-0RE#44178:マクロを無効にしファイルを開きたいみゃお2001-06-19(火) 14:17
#44173-0
マクロを無効にしファイルを開きたい
いつも利用させていただいております。

現在のPGでコード上でエクセルファイルにマクロが含まれているか判断しています。
マクロを含まないと判断した時に、マクロを無効にしてファイルをOPENしたいのです。
(マクロ警告メッセージで「マクロを無効する」ボタンをクリックした状態と同じ。)

度々の質問で申し訳ありませんが、宜しくお願いします。

#44174-0
RE#44173:マクロを無効にしファイルを開きたい
こんにちは、たえさん。新規質問になさったんですね。こちらに続けます。

> マクロを含まないと判断した時に、マクロを無効にしてファイルをOPENしたいのです。
> (マクロ警告メッセージで「マクロを無効する」ボタンをクリックした状態と同じ。)

マクロを含むときですよね? 含まないときに警告は出ないので。(^_^;;)

イベントプロシージャなら、
オブジェクト変数.EnableEvents = False とすればいいのですが、
ボタンに登録した、、、とか言うマクロだったら、押されれば動いてしまいますね。
マクロ側で判断できればいいのですが(って本末転倒ですね)。
#44178-0
RE#44174:マクロを無効にしファイルを開きたい
みゃおさん早速のレスありがとうございます。

> マクロを含むときですよね? 含まないときに警告は出ないので。(^_^;;)

そうです。マクロを含むときです(^^;)失礼しました!
現在のPGを下に貼り付けておきます。

> イベントプロシージャなら、
> オブジェクト変数.EnableEvents = False とすればいいのですが、

この場合でも使えるのでしょうか?
なんせエクセルのことあんまり深くやったことがないもんで...
質問攻めですみません!
なにか良いアドバイスがあれば宜しくお願いします。


    '__エクセルインスタンスを新規作成します。
    Set G_Excel_New = CreateObject("Excel.Application")
    '__対象ワークブックを開きます。
    Set G_ExcelBook_New = G_Excel_New.Workbooks.Open(pPath)

    CheckModule = False
    
    With G_ExcelBook_New.Application.VBE.ActiveVBProject
        '__.VBComponents.Count←エクセルファイルに含まれるコンポーネントの数を数えます。
        For i = 1 To .VBComponents.Count
            '__.VBComponents(i).CodeModule.CountOfLines←各コンポーネントの行数を数えます。
            If .VBComponents(i).CodeModule.CountOfLines > 0 Then
                CheckModule = True
            End If
        Next i
    End With

    If CheckModule Then
        iRet = FPub_DSP_MSG_ANS("開こうとしている文書には、マクロが含まれています。マクロには、" & vbCrLf & _
        "コンピュータに問題を引き起こすウィルスが含まれていることがあります。" & vbCrLf & _
        "この文書が安全であることがあらかじめわかっている場合は" & vbCrLf & _
        "[はい] をクリックしてください。すべてのマクロを実行" & vbCrLf & _
        "しないようにする場合は [いいえ] をクリックしてください。", vbYesNo + vbQuestion, lANS)
        
        If lANS = 6 Then   '__「マクロを有効」
            '__Auto_Openを実行します。
            G_ExcelBook_New.RunAutoMacros (xlAutoOpen)
        ElseIf lANS = 7 Then '__「マクロを無効」
            '__ここでマクロを無効にしたい。
            
        End If
    End If
#44191-0
RE#44178:マクロを無効にしファイルを開きたい
> > イベントプロシージャなら、
> > オブジェクト変数.EnableEvents = False とすればいいのですが、

> この場合でも使えるのでしょうか?

イベントプロシージャとは、ExcelのSheetモジュールやThisworkbookモジュールで、
オブジェクト名_Open とか、オブジェクト名_Activate とか記述します。
オブジェクト名の部分は、ドロップダウンリストで出てくるものを指します。
(実際に見てみた方が早いです)

>         If lANS = 6 Then   '__「マクロを有効」
>             '__Auto_Openを実行します。
>             G_ExcelBook_New.RunAutoMacros (xlAutoOpen)
>         ElseIf lANS = 7 Then '__「マクロを無効」
>             '__ここでマクロを無効にしたい。
>             
>         End If

開くブックは限定されていて、そのブックにはAuto_Openプロシージャしかないのであれば
何も書く必要はありません。
VB側からそのマクロを起動しない限り走らないので。
もし、そのほかにマクロがあり、ユーザー側が実行するおそれがあるのなら(マクロを登録した
ボタンをクリックするとか)、それは難しいと思います。
その場合はSHELL起動して、本来の警告メッセージにお任せした方がいいでしょう。

>             If .VBComponents(i).CodeModule.CountOfLines > 0 Then
>                 CheckModule = True
>             End If

なお、私の環境では上の3行ではマクロの有無を判断できません。
「変数の宣言を強制する」にチェックを入れているので、自動的にOption Explicitが
1行入ってしまいますので。2行以上、と前に書いたのはそういうわけです。
ただ、Option Base 1 とか他にも、行数が増えてもマクロと見なされないものがあると、
2行以上でもわかりません。
それなら、SubとかFunctionとかいう単語を検索した方がいいかもしれません。
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)