■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#44047-0マクロを含むエクセルファイルのOPENたま2001-06-15(金) 14:47
     #44049-0RE#44047:マクロを含むエクセルファイルのOPENみゃお2001-06-15(金) 15:05
     #44051-0RE#44049:マクロを含むエクセルファイルのOPEN匿名440512001-06-15(金) 15:18
     #44059-0RE#44051:マクロを含むエクセルファイルのOPENみゃお2001-06-15(金) 16:13
     #44060-0RE#44059:マクロを含むエクセルファイルのOPENたま2001-06-15(金) 16:28
     #44062-0RE#44060:マクロを含むエクセルファイルのOPENLESIA2001-06-15(金) 17:16
     #44123-0RE#44062:マクロを含むエクセルファイルのOPENたえ2001-06-18(月) 13:08
     #44128-0RE#44123:マクロを含むエクセルファイルのOPENLESIA2001-06-18(月) 14:14
     #44130-0RE#44123:マクロを含むエクセルファイルのOPENみゃお2001-06-18(月) 14:31
#44047-0
マクロを含むエクセルファイルのOPEN
はじめまして。
現在、VBからマクロを含むエクセルファイルを開く
PGを組んでいます。
CreateObjectを使用するとマクロの確認メッセージが表示されず
Auto_Openも行われません。
GetObjectを使用すると、マクロの確認メッセージは表示される
のですが、「はい」を選択すると「オートメーションエラーです」
のエラーメッセージが出てしまいます。

やりたい事としては、マクロの確認メッセージを表示し、Auto_Open
を実行したいのです。

VBからマクロを含むエクセルファイルのOPENについて
どなたかご存知の方、宜しくご指導お願いします。
#44049-0
RE#44047:マクロを含むエクセルファイルのOPEN
> CreateObjectを使用するとマクロの確認メッセージが表示されず
> Auto_Openも行われません。

この場合、Auto_Openを実行させるには、オブジェク変数.Run("ファイル名.xls!Auto_Open")
とします。

> GetObjectを使用すると、マクロの確認メッセージは表示される
> のですが、「はい」を選択すると「オートメーションエラーです」
> のエラーメッセージが出てしまいます。

普通は出ないはずですが。。。
何か特別なコードを書いていますか?

> やりたい事としては、マクロの確認メッセージを表示し、Auto_Open
> を実行したいのです。

CreateObjectとRunメソッドの組み合わせでもエラーが出ますか?
出ないなら、マクロの確認メッセージを自作しましょう(笑)
出るなら、マクロ自体を見直しましょう。
#44051-0
RE#44049:マクロを含むエクセルファイルのOPEN
> 何か特別なコードを書いていますか?

コードは以下の通りです。

Public Function Excel_Open_New(pPath As String) As Boolean
Dim G_Excel_New  As Object    'Excelオブジェクト
Dim bNotRun      As Boolean

On Error Resume Next
    
    Excel_Open_New = False
    
    Set G_Excel_New = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then bNotRun = True
    Err.Clear
    
    DetectExcel
    
    '__pPath:ファイルのフルパス
  Set G_Excel_New = GetObject(pPath)
    
    G_Excel_New.Application.Visible = True
    G_Excel_New.Parent.Windows(1).Visible = True
    
    If bNotRun Then
        G_Excel_New.Quit
    End If
    
    Set G_Excel_New = Nothing
    
    Excel_Open_New = True
    
    Exit Function

End Function


> CreateObjectとRunメソッドの組み合わせでもエラーが出ますか?

試してみました。
エラーは出ませんでした。
確認メッセージを自作しましょうかね?(^^;)

#44059-0
RE#44051:マクロを含むエクセルファイルのOPEN
>   Set G_Excel_New = GetObject(pPath)

こうすると変数 G_Excel_New は、ブックオブジェクトになります。
ですから、
>         G_Excel_New.Quit

この行は、G_Excel_New.Application.Quit
になります。

気の付いたところはこのくらい。
#44060-0
RE#44059:マクロを含むエクセルファイルのOPEN
みゃおさんありがとうございます。

さらに質問なんですが、
CreateObjectでマクロ確認メッセージを自作する場合、
そのエクセルファイルにマクロが含んでいるか判断する
ことは可能なのでしょうか?
#44062-0
RE#44060:マクロを含むエクセルファイルのOPEN
> みゃおさんありがとうございます。
> 
> さらに質問なんですが、
> CreateObjectでマクロ確認メッセージを自作する場合、
> そのエクセルファイルにマクロが含んでいるか判断する
> ことは可能なのでしょうか?

CodeModuleプロパティで出来たと思います。
試してないけど、こんな感じかな?

Dim i As Integer
Dim CheckModule As Boolean

CheckModelue = False
With objExcel.Application.VBE.ActiveVBProject
    For i = 1 To .VBComponents.Count
        If .VBComponents(i).CodeModule Is Nothing then
            '
        Else
            CheckModule = True
            MsgBox .VBComponents(i).Name & "にモジュールがあります。"
        End If
    Next i
End With

if CheckModule = False Then
    MsgBox "このプロジェクトにはモジュールがありません。"
End If
#44123-0
RE#44062:マクロを含むエクセルファイルのOPEN
> CodeModuleプロパティで出来たと思います。
> 試してないけど、こんな感じかな?
> 
> Dim i As Integer
> Dim CheckModule As Boolean
> 
> CheckModelue = False
> With objExcel.Application.VBE.ActiveVBProject
>     For i = 1 To .VBComponents.Count
>         If .VBComponents(i).CodeModule Is Nothing then
>             '
>         Else
>             CheckModule = True
>             MsgBox .VBComponents(i).Name & "にモジュールがあります。"
>         End If
>     Next i
> End With
> 
> if CheckModule = False Then
>     MsgBox "このプロジェクトにはモジュールがありません。"
> End If

上記のコードを使ってみたのですが、マクロを含んでいないエクセルファイルでも
マクロを含んでいるように認識してしまいます。
どうも、
> If .VBComponents(i).CodeModule Is Nothing then

の部分がうまく行っていないようです。
本をいろいろと調べてみたのですが、分かりませんでした。
ご存知の方、いらっしゃいましたらご指導宜しくお願いします。
#44128-0
RE#44123:マクロを含むエクセルファイルのOPEN
> 上記のコードを使ってみたのですが、マクロを含んでいないエクセルファイルでも
> マクロを含んでいるように認識してしまいます。
> どうも、
> > If .VBComponents(i).CodeModule Is Nothing then
> 
> の部分がうまく行っていないようです。
> 本をいろいろと調べてみたのですが、分かりませんでした。
> ご存知の方、いらっしゃいましたらご指導宜しくお願いします。

すみませんでした。先程試してみたら確かにIf文の条件は
成り立たないですね。

If .VBComponents(i).CodeModule.CountOfLines > 0 Then
    CheckModule = True
    MsgBox .VBComponents(i).Name & "にモジュールがあります。"
End If

とするとうまくいくようです(^^;
#44130-0
RE#44123:マクロを含むエクセルファイルのOPEN
> どうも、
> > If .VBComponents(i).CodeModule Is Nothing then
> の部分がうまく行っていないようです。

http://www.microsoft.com/JAPAN/support/kb/articles/J031/5/06.htm
を見て、コードの行数を数えてはいかがでしょう?
マクロがあれば、必ず2行以上(Sub〜End Sub, Function〜End Functionなど)
使われているはずです。
このページと関連する記事:
#44173-0マクロを無効にしファイルを開きたい2001-06-19(火) 09:25
#147-3VBからExcelを起動後、マクロの自動実行2003-07-31(木) 16:06
#41142-0EXCELからマクロを実行2001-04-02(月) 11:04
#45578-0VB から Excel マクロの実行2001-08-02(木) 10:05
#1266-1Excel操作について2004-03-03(水) 11:57
#45754-0VBによるエクセルのシートのコピー方法2001-08-08(水) 17:41
#18895-0ExcelのマクロをVBで実行するには?2001-11-24(土) 09:53
#118-1ExcelVBA(マクロ)の利用方法について2001-05-30(水) 11:45
#45159-0VB-Excel2001-07-19(木) 10:26
#38906-0Excelが開かれているかの確認2001-02-15(木) 17:59
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)