tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルハイパーリンクのExcelのプロセスについて
記事No2762
投稿日: 2005/12/15(Thu) 15:59
投稿者山も上温泉
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003
[ExcelのVer]:Excel2002

はじめまして、いつも参考にさせていただいております。
今回、どうしても解決できない問題が発生し、投稿いたしました。

VB.NETからEXCELを操作してハイパーリンクを設定しているのですが、
プロセスが残ってしまいます。過去ログに、同じ内容の質問があり、
そのとおりに実行した場合は、プロセスは残りませんでした。
[参考:hhttp://www.bcap.co.jp/hanafusa/bbs/wforum.cgi?mode=allread&no=1863&page=0]

今回のプログラムでは、過去ログとは違い、EXCELを参照せずに処理を
行っています。この場合に、うまくプロセスが終了しないようなのですが、
どなたか、ご存知の方がいらっしゃいましたら、ご教授願います。
以下にプログラムを記述いたします。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
      
    Dim xlApp As Object
        Dim xlBooks As Object
        Dim xlBook As Object
        Dim xlSheets As Object
        Dim xlSheet As Object
    
    'Excelを参照せずにExcelファイルを開きます
        xlApp = CreateObject("Excel.Application")
        xlBooks = xlApp.Workbooks
        xlBook = xlBooks.Add
        xlSheets = xlBook.Worksheets
        xlSheet = xlSheets.Item(1)

        Dim xlRange As Object
        Dim xlHyperLinks As Object
        Dim xlHyperlink As Object

    'セルを指定してハイパーリンクを貼ります
        xlRange = xlSheet.Range("A1")
        xlRange.Value = "hhttp://xxxxxxxxx.xx.xx"
        xlHyperLinks = xlSheet.Hyperlinks

        xlHyperlink = xlHyperLinks.Add(xlRange, xlRange.Value)
    (※上記行のソースを実行するとプロセスが終了しません)

    'COMオブジェクトを解放します
        MRComObject(xlRange)    'xlRange の開放
        MRComObject(xlHyperlink)    'xlHyperlink の開放
        MRComObject(xlHyperLinks)   'xlHyperLinks の開放

        MRComObject(xlSheet)        'xlSheet の開放
        MRComObject(xlSheets)       'xlSheets の開放
        xlBook.Close(False)         'xlBook を閉じる
        MRComObject(xlBook)         'xlBook の開放
        MRComObject(xlBooks)        'xlBooks の開放
        xlApp.Quit()                'Excelを閉じる    
        MRComObject(xlApp)          'xlApp を開放

    End Sub

[ツリー表示へ]
タイトルRe: ハイパーリンクのExcelのプロセスについて
記事No2767
投稿日: 2005/12/15(Thu) 23:35
投稿者花ちゃん
一寸試して見ましたが、レイトバインディング ではハイパーリンクが開放できませんね。
アーリーバインディング ではどのような不都合があるのでしょうか?
これ以外でも問題が発生する可能性がありそうだし、EXE をバージョンに合わせて使い分け
するようにすればどうでしょうか?(根本的な解決にはなっていませんが)

[ツリー表示へ]
タイトルRe^2: ハイパーリンクのExcelのプロセスについて
記事No2777
投稿日: 2005/12/16(Fri) 12:11
投稿者山も上温泉
[OSのVer]:Windows    [VBのVer]:VB.NET  

早速のご回答ありがとうございます

> アーリーバインディング ではどのような不都合があるのでしょうか?
 設計の段階で、バージョンを限定したくないという意向があったため、
 レイトバインディングでの開発を行っています。

> これ以外でも問題が発生する可能性がありそうだし、EXE をバージョンに合わせて使い分け
> するようにすればどうでしょうか?(根本的な解決にはなっていませんが)
 検討したほうが、よさそうですね。もう少し調査して、アーリーバインドに変更するか
 どうか決めようと思います。

 今後、解決できましたら、報告させていただきます。
 どうもありがとうございました。m(__)m 

[ツリー表示へ]
タイトルRe^3: ハイパーリンクのExcelのプロセスについて
記事No2778
投稿日: 2005/12/16(Fri) 12:34
投稿者花ちゃん
>  設計の段階で、バージョンを限定したくないという意向があったため、

ハイパーリンク機能事態がExcelのバージョンに依存しているのでは、たしか、
Excel2000 あたりで変更もあったようだし。(少なくてもすべてのバージョンで
同じように使用できないのでは)
その辺の事が今回影響しているのかなと思ってバージョンを指定して起動しても
状況は変わりませんでしたが....。

[ツリー表示へ]
タイトルRe^4: ハイパーリンクのExcelのプロセスについて
記事No2779
投稿日: 2005/12/16(Fri) 15:22
投稿者山も上温泉
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003

> Excel2000 あたりで変更もあったようだし。

Excel2000以降のバージョンを対象にしており、それぞれのバージョンでの
ハイパーリンクの動作は確認済みです。

レイトバインドのままで、うまい解決方法が見つからない場合は、
Kill関数でプロセスを終了させるしかないのでしょうか…

[ツリー表示へ]
タイトルRe^5: ハイパーリンクのExcelのプロセスについて
記事No2807
投稿日: 2005/12/21(Wed) 23:57
投稿者花ちゃん
> レイトバインドのままで、うまい解決方法が見つからない場合は、
> Kill関数でプロセスを終了させるしかないのでしょうか…

VBから Excel を操作する部分は VB6.0 で書くのではだめでしょうか?
Visual Basic 2005 でも同じかなと思ってインストールして試して見たが同じでした。

# Visual Basic 2005 になって Excel の起動がすごく早くなっている。

[ツリー表示へ]
タイトルRe: ハイパーリンクのExcelのプロセスについて
記事No2808
投稿日: 2005/12/22(Thu) 01:43
投稿者魔界の仮面弁士
こんな感じで。

Friend Sub MRComObject(ByVal O As Object)
  If Not O Is Nothing AndAlso Marshal.IsComObject(O) Then
    Dim I As Integer
    Do
      I = Marshal.ReleaseComObject(O)
    Loop Until I <= 0
  End If
End Sub

[ツリー表示へ]
タイトルRe^2: ハイパーリンクのExcelのプロセスについて
記事No2810
投稿日: 2005/12/22(Thu) 08:44
投稿者花ちゃん
わー すごい!

単純に2度繰り返す事は試していたのですが。

[ツリー表示へ]
タイトルRe^3: ハイパーリンクのExcelのプロセスについて
記事No2816
投稿日: 2005/12/23(Fri) 09:22
投稿者山も上温泉
[OSのVer]:Windows XP    [VBのVer]:VB.NET 2003  

こんにちは!返信が遅れてしまい、大変申し訳ありませんでした。

魔界の仮面弁士さんのソースを参考に、組み込んだところ、プロセスを
開放させることが出来ました!何とかして1回で開放できないものか、という
事ばかりにとらわれてしまい、どんどんはまってしまったようです…(情けない。)

目から鱗のプログラムでした!
花ちゃんさん、魔界の仮面弁士さん、本当にありがとうございました。

[ツリー表示へ]