- PR -

VB.NET2003で.prnファイルをプロセス起動したい

投稿者投稿内容
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2006-03-09 16:26
お世話さまです。

Excelに関連づけされていないprnファイルを下記のように
起動してExcelを立ち上げたいのですが、
VBのコードの中で動的にprnファイルをExcelに関連づけるには
どのようにすればよいのでしょうか?

Process.Start("c:\\test.prn")

CreateObjectでExcelを起動してWorkbooks.Openでprnファイルを
開くようにすると、ファイルを開く毎にExcelが起動されて
しまうので、これを避けたいのが主目的だったりします。

ご教示のほど、宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-09 16:32
引用:

moondogさんの書き込み (2006-03-09 16:26) より:

VBのコードの中で動的にprnファイルをExcelに関連づけるには
どのようにすればよいのでしょうか?


引数で渡せば良いと思います。

コード:

    Private Shared Sub MosaMosaAA()
        Dim xlProcess As System.Diagnostics.Process

        Try
            xlProcess = System.Diagnostics.Process.Start("Excel.exe", "C:\Test.prn")
        Finally
            If Not xlProcess Is Nothing Then
                Try
                    xlProcess.Close()
                Finally
                    xlProcess.Dispose()
                End Try
            End If
        End Try
    End Sub


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2006-03-09 16:43
===>じゃんぬねっと様

こんにちは!
いつもお世話さまです。

まるで私がこういう質問をするのが判っていたかのような超高速レス、
感謝です。w

ご教示頂いた内容をさっそく実装してテストしてみましたところ、
動きました。

ありがとうございます。

ただ、この方法でもEXCELがそのつど起動されてしまい、
複数のEXCELが立ち上がってしまうのですが…

もしかして、xlProcess変数を起動するイベント内で定義してはダメで
クラスのPrivate変数として定義しないとダメなんでしょうか?

お手数をおかけして申し訳ありませんが、複数のEXCEL起動を
回避する方法があればご教示頂きたいのですが。m()m
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2006-03-09 16:52
>クラスのPrivate変数として定義しないとダメなんでしょうか?

んなこたー自分でも検証できますね。^^;

で、やってみましたところ、同じでした。

関連付けされたファイルのプロセス起動であれば
1つのEXCELが起動して複数のブック表示になるんでしょうけど、
この方法だと複数起動もやむなしという感じがします。

そうすると、やはり関連付けを実装するしかないような
気がするのですが…
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-09 16:58
引用:

moondogさんの書き込み (2006-03-09 16:52) より:

そうすると、やはり関連付けを実装するしかないような気がするのですが…


では、最初に戻ります... (^-^;)

引用:

CreateObjectでExcelを起動してWorkbooks.Openでprnファイルを
開くようにすると、ファイルを開く毎にExcelが起動されて
しまうので、これを避けたいのが主目的だったりします。


これは、Excel.Application を保持しておいてやれば可能な気がします。
毎回、CreateObject しているので Excel.Application のプロセスが増えるのではないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2006-03-09 17:03
===>じゃんぬねっと様

度々お呼びだてして申し訳ありません。

その方向で修正してみようと思います。
ご教示ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-09 17:16
引用:

moondogさんの書き込み (2006-03-09 17:03) より:

その方向で修正してみようと思います。
ご教示ありがとうございました。


CreateObject ではなく、コンパイル解決できる New をお勧めしたかったり。

コード:

    Private Shared Sub MosaMosaAA()
        Dim xlApplication As Excel.Application

        Try
            xlApplication = New Excel.Application()
            xlApplication.Visible = True

            Dim xlWorkBooks As Excel.Workbooks

            Try
                xlWorkBooks = xlApplication.Workbooks
                Dim xlWorkBook1 As Excel.Workbook

                Try
                    xlWorkBook1 = xlWorkBooks.Add("C:\Book1.prn")
                Finally
                    If Not xlWorkBook1 Is Nothing Then
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook1)
                    End If
                End Try

                Dim xlWorkBook2 As Excel.Workbook

                Try
                    xlWorkBook2 = xlWorkBooks.Add("C:\Book2.prn")
                Finally
                    If Not xlWorkBook2 Is Nothing Then
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook2)
                    End If
                End Try
            Finally
                If Not xlWorkBooks Is Nothing Then
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBooks)
                End If
            End Try
        Finally
            If Not xlApplication Is Nothing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication)
            End If
        End Try
    End Sub


タスク バーには 2 つ表示されますが、実際には 1 つの Excel.Application なので、
どちらか一方の大窓を閉じれば、2 つとも終了します。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2006-03-09 17:33
===>じゃんぬねっと様

手取り足取り、感謝に絶えませぬ。T-T
今日はちと時間がないので、明日にもご教示頂いた
方法を実装してみたく思います。

以下にワタクシなりの結果報告も書いておきます。

Private pExcel As Object

Private Sub cmdPrn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrn.Click
  Try
    pExcel = GetObject(, "Excel.Application")
  Catch ex As Exception
    pExcel = CreateObject("Excel.Application")
  End Try
  With pExcel
    .Visible = True
    .Workbooks.Open("c:\Test.prn")
End With
End Sub

これでも一応、EXCELの複数起動は回避できました。^^;

スキルアップ/キャリアアップ(JOB@IT)