tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルエクセルのマクロ操作について
記事No4441
投稿日: 2006/10/24(Tue) 11:24
投稿者中高年ぼろブラマー
会社のPCにあったVB5.0を使い始めて6ヶ月、最近VB2005ExpressEditionをダウンロードして
使い始めました中高年です。
会社ではエクセル中心のため、VB2005からマクロの操作について質問です。
よろしくお願いします。

やりたいこと
Form上の格Labelをクリックしたとき、指定したエクセルファイルを開きFormを最小化する。
エクセルが閉じられたときFormは元に戻る。
ただしエクセルを開く際、Aマクロ名を指定する場合やBマクロ名Auto_Open()を実行しないで
開く場合がある。

出来ないこと
当サイトの「起動したプロセスの終了を検出する方法」を参考にしてプログラムを
作りましたが、エクセルを開く際のAとBがわかりません。
いろいろ調べCOMオブジェクトを使えば、xlApp.Run(“マクロ名”)で指定できそうだと、
やっとわかりましたが、それ以上進みません。
よろしくお願いします。

Public Class Form1
    Private WithEvents p As Process
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        Me.WindowState = FormWindowState.Minimized
        'Process オブジェクトを使用して起動したプロセスの終了を取得する
        p = New Process
        ''Process クラスで発生する Exited イベントを処理します。
        AddHandler p.Exited, AddressOf p_Exited
        'プロセスが終了したときに、 Exited イベントを発生させる
        p.EnableRaisingEvents = True
        p.SynchronizingObject = Me
        p.StartInfo.FileName = "d:\ExcelTest.xls"
        p.Start()
    End Sub

    Private Sub p_Exited(ByVal sender As Object, ByVal e As System.EventArgs)
        'プロセスが終了したときに発生するイベント
        Me.WindowState = FormWindowState.Normal
    End Sub
End Class

OS windowsXP
VB VB2005ExpressEdition
Office2003Standard

[ツリー表示へ]
タイトルRe: エクセルのマクロ操作について
記事No4442
投稿日: 2006/10/24(Tue) 15:51
投稿者ヤマ@文系
http://www.bcap.co.jp/hanafusa/dotnet/Excel01.htm#no2
ここに既存のファイルを開く方法が載っております。

http://support.microsoft.com/kb/306682/ja
ここにofficeのマクロを実行する方法が載っております。

Excel.applicationをwithevents
でイベント検地すればいいのではないでしょうか。

[ツリー表示へ]
タイトルRe^2: エクセルのマクロ操作について
記事No4443
投稿日: 2006/10/24(Tue) 16:10
投稿者ヤマ@文系
できるかやってみました。

d:\Test.xls
のモジュール1に
Public Function msgTest()

MsgBox "Message"

End Function
と作っております。


'closeイベントからform1を直接操作できないのでデリゲートを使う

参照(はじめのhは抜けてます)
'http://www.microsoft.com/japan/msdn/vbasic/migration/tips/BackgroundWorker/


'2005のコード

Public Class Form1

    Private WithEvents xlApp As New Excel.Application
    Private Delegate Sub CallDelegate()



    Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean) Handles xlApp.WorkbookBeforeClose
        MsgBox("終了されたので通常に")

        Invoke(New CallDelegate(AddressOf MeShow))

    End Sub



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
        '既存のファイルを開く場合
        Dim xlFilePath As String = "d:\Test.xls"
        Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)

        Me.WindowState = FormWindowState.Minimized '最小化

        xlApp.Visible = True        'Excelを表示(必ずとも表示しなくてもよい)

        xlApp.Run("msgTest")

    End Sub

    Private Sub MeShow()
        Me.WindowState = FormWindowState.Normal

    End Sub

End Class

[ツリー表示へ]
タイトルRe^3: エクセルのマクロ操作について
記事No4444
投稿日: 2006/10/24(Tue) 18:02
投稿者中高年ぼろブラマー
早速ありがとうございます。

実際に行って結果報告します。感謝感謝


> できるかやってみました。
>
> d:\Test.xls
> のモジュール1に
> Public Function msgTest()
>
> MsgBox "Message"
>
> End Function
> と作っております。
>
>
> 'closeイベントからform1を直接操作できないのでデリゲートを使う
>
> 参照(はじめのhは抜けてます)
> 'http://www.microsoft.com/japan/msdn/vbasic/migration/tips/BackgroundWorker/
>
>
> '2005のコード
>
> Public Class Form1
>
>     Private WithEvents xlApp As New Excel.Application
>     Private Delegate Sub CallDelegate()
>
>
>
>     Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean) Handles xlApp.WorkbookBeforeClose
>         MsgBox("終了されたので通常に")
>
>         Invoke(New CallDelegate(AddressOf MeShow))
>
>     End Sub
>
>  
>  
>     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>  
>         Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
>         '既存のファイルを開く場合
>         Dim xlFilePath As String = "d:\Test.xls"
>         Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
>
>         Me.WindowState = FormWindowState.Minimized '最小化
>
>         xlApp.Visible = True        'Excelを表示(必ずとも表示しなくてもよい)
>
>         xlApp.Run("msgTest")
>
>     End Sub
>
>     Private Sub MeShow()
>         Me.WindowState = FormWindowState.Normal
>
>     End Sub
>
> End Class

[ツリー表示へ]
タイトルRe^4: エクセルのマクロ操作について
記事No4446
投稿日: 2006/10/24(Tue) 18:44
投稿者中高年ぼろブラマー
できました。
一部エラーとなったので書き換えました。
Private WithEvents xlApp As New Excel.Application
->Private WithEvents xlApp As New Microsoft.Office.Interop.Excel.Application
ほか

今回はじめての投稿でしたが、まだまだわからないことだらけです。
またどこかで躓きますのでよろしくお願いします。勉強もします。



> 早速ありがとうございます。
>
> 実際に行って結果報告します。感謝感謝
>
>
> > できるかやってみました。
> >
> > d:\Test.xls
> > のモジュール1に
> > Public Function msgTest()
> >
> > MsgBox "Message"
> >
> > End Function
> > と作っております。
> >
> >
> > 'closeイベントからform1を直接操作できないのでデリゲートを使う
> >
> > 参照(はじめのhは抜けてます)
> > 'http://www.microsoft.com/japan/msdn/vbasic/migration/tips/BackgroundWorker/
> >
> >
> > '2005のコード
> >
> > Public Class Form1
> >
> >     Private WithEvents xlApp As New Excel.Application
> >     Private Delegate Sub CallDelegate()
> >
> >
> >
> >     Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean) Handles xlApp.WorkbookBeforeClose
> >         MsgBox("終了されたので通常に")
> >
> >         Invoke(New CallDelegate(AddressOf MeShow))
> >
> >     End Sub
> >
> >  
> >  
> >     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> >  
> >         Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
> >         '既存のファイルを開く場合
> >         Dim xlFilePath As String = "d:\Test.xls"
> >         Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
> >
> >         Me.WindowState = FormWindowState.Minimized '最小化
> >
> >         xlApp.Visible = True        'Excelを表示(必ずとも表示しなくてもよい)
> >
> >         xlApp.Run("msgTest")
> >
> >     End Sub
> >
> >     Private Sub MeShow()
> >         Me.WindowState = FormWindowState.Normal
> >
> >     End Sub
> >
> > End Class

[ツリー表示へ]
タイトルRe^5: エクセルのマクロ操作について
記事No4454
投稿日: 2006/10/25(Wed) 16:27
投稿者ヤマ@文系
> ->Private WithEvents xlApp As New Microsoft.Office.Interop.Excel.Application
Microsoft.Office.
参照設定していたことを忘れていました。
Microsoft Excel ?? object libraryに参照設定
'他の方が見たときのために。
なお、VBレスキュー(花ちゃん様のサイト、ここ)に
EXCEL関連はサンプルが多いので参考になさってください。

[ツリー表示へ]