tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルエクセルのマクロ起動
記事No15435
投稿日: 2012/02/17(Fri) 05:33
投稿者てらぞう
セクセルのマクロを起動したいのですが、
ファイルが既に開かれている状態で以下を実行した時に
エクセルから表示されるメッセージボックスがエクセルの
シートの下に表示されてしまいます。
どの様に処理すればよいでしょうか?

Option Explicit
Sub Main()
    On Error GoTo dbg:
    Dim tag_f As String
    Dim xlApp
    Dim xlBook
    tag_f = "c:\test.xls"
        ' Excelのインスタンス作成
    Set xlApp = CreateObject("Excel.Application")
    If xls_fchk(tag_f) = False Then 'エクセルファイルが使われているか
        ' Excelの表示有無
        xlApp.Visible = True
        ' マクロの警告やメッセージを表示しないように設定
        xlApp.DisplayAlerts = False
    End If
    Set xlBook = xlApp.Workbooks.open(tag_f)
    xlApp.run ("test")
    ' Excelの終了
    'xlApp.Quit
    Set xlBook = Nothing
    Set xlApp = Nothing
    Exit Sub
dbg:
    MsgBox Err.Description
End Sub


'指定のファイルが使用中かどうかを調べる
Function xls_fchk(myFilename As String)
   On Error Resume Next
   'Dim myFilename As String
   Dim myfile     As String
   'エラーのトラップを留保します。
   'myFilename = "C:\Temp.xls"
   'ファイルが存在するか調べる
   myfile = Dir$(myFilename)
   If Len(myfile) = 0 Then
      MsgBox "そのファイルは存在しません。"
   Else
      'ファイルがあればファイルの名前を同じ名前で変更します。
      Name myFilename As myFilename
      'ファイルが使用中であればエラーが発生します
      If Err.Number Then
         xls_fchk = True
         'MsgBox "ファイルは使用中です。"
         'エラーが発生した場合は Err オブジェクトをクリアします。
         Err.Clear
      Else
         xls_fchk = False
         'MsgBox "ファイルは使われていません。"
      End If
   End If
End Function

[ツリー表示へ]
タイトルRe: エクセルのマクロ起動
記事No15436
投稿日: 2012/02/17(Fri) 07:50
投稿者VBレスキュー(花ちゃん)
> エクセルから表示されるメッセージボックスがエクセルの

エクセルから表示されるメッセージボックス と書いていますが、プログラムで
表示するようにした、MsgBox 関数 じゃないのですか?
それとも Excel が自動で表示するエラーとかのメッセージボックスですか?
又は、マクロの部分に書かれているMsgBox 関数ですか?
掲載されたコード中にもいくつかMsgBox 関数が使用されていますが、そのどこかでの事
でしょうか?
コードで書いている分なら、MsgBox 関数の第2引数に VbMsgBoxSetForeground フラグを
追加するか又は、VbMsgBoxSetForeground or vbSystemModalとかしてみたらどうなりますか?
場合(投稿されたコードのMsgBox とか)によっては、vbSystemModal フラグを追加する
だけで OK のはずです。

それでもだめなら、API の SetWindowPos を使って、Excel を背面に移動するとか。
http://www.hanatyan.sakura.ne.jp/vbhlp/pri_form.htm

VB6.0 であっても詳しい環境は質問時に書くようにして下さい。
又、今回の事と直接関係はありませんが、変数の宣言時は、必ず型を省略せずにキチンと
書くようにして下さい。(思わぬバグの元になる場合もあります)

[ツリー表示へ]