tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルExcel操作の際のエラー回避について質問します
記事No2337
投稿日: 2005/09/30(Fri) 00:39
投稿者K
[OSのVer]:Windows    [VBのVer]:VB.NET  
こんばんは。初めて投稿します。
Excelによりファイルを開き、ユーザーによりブックが閉じられるまで待つようにしたいのですが、ず
っと解決できなくて困っています。


Dim oXl As Object
Dim tmp As Boolean
oXl = CreateObject("Excel.Application")
oXl.Workbooks.Opentext(filename:="C:\ABC.csv", Comma:=True)
'' この間、シートの加工処理が入る
Do While tmp = False
   If oXl.workbooks.count = 0 Then
      tmp = True
   End If
Loop


プログラムの内容を抜粋すると上記になるのですが、このブックのセルに記入しようとした時点で
「oXl.workbooks.count」の部分でエラー発生します。
事前に「IsError(oxl)」での返り値でIF分岐して回避しようかとも考えましたが・・・
なにかいい手は無いでしょうか?
皆様宜しくお願いいたします。

[ツリー表示へ]
タイトルRe: Excel操作の際のエラー回避について質問します
記事No2338
投稿日: 2005/09/30(Fri) 07:56
投稿者花ちゃん
>Excelによりファイルを開き、ユーザーによりブックが閉じられるまで待つように
>したいのですが、ずっと解決できなくて困っています。

上記と投稿されたコードがどう関連するのか理解できませんが?


ユーザーによりブックが閉じられるまで待つには、下記のような方法があります。

VB から Excel のWorkbookBeforeClose イベントを捕らえて見ては。
(方法が解らなければ過去のログを検索 キーワード=WithEvents Excel)
サンプルNo.358

又、下記のようなものもあります。
hhttp://www.bcap.co.jp/hanafusa/dotnet/App05.htm

それより、Excel のプロセスがキチンと終了していますか?

[ツリー表示へ]
タイトル解決しました!!
記事No2345
投稿日: 2005/10/01(Sat) 22:21
投稿者K
管理人さんにヒントを頂いてから、試行錯誤した挙句、何とか解決しました!
有難うございました。(m_m)


Dim oXl As Object
Dim localByName As Process()
Dim p As Process 'プロセス
Dim tmp As Boolean
Dim process_flag As Boolean 'ブックが開いているかどうかのフラグ(閉じるとTrueになる)
oXl = CreateObject("Excel.Application")
oXl.Workbooks.Opentext(filename:="C:\ABC.csv", Comma:=True)
' この間、シートの加工処理
'フラグの初期設定
process_flag = False
tmp = False
'「process_flag」がTrueになるまで繰り返すループ 本文の内容は「LineInput(fileno)」
Do Until (process_flag = True)
   'フラグ変数「tmp」を都度都度初期設定する
   tmp = False
   '指定のExcelファイルを起動しているExcel.EXEを探し終了させる
   localByName = Process.GetProcessesByName("Excel")
   '起動中のExcelのプロセスを取得
   For Each p In localByName
      '指定のファイル名で起動中のExcelがあれば、「process_flag」をTrueにしてループを抜ける
      If System.String.Compare(p.MainWindowTitle, "Microsoft Excel - ABC.csv", True
) = 0 Then
         'フラグ変数「tmp」をTrueにする
         tmp = True
      End If
   Next
   '「配信設定.csv」が開かれていればループ継続。開かれていなければループを抜ける
   If tmp = False Then
      process_flag = True
   End If
   '1秒待機する[BASP21のコマンドです]
   bobj.Sleep(1)
Loop
'プロセス開放処理(Excelの終了)
oXl.Application.Quit()
'オブジェクトを開放
oXl = Nothing
bobj = Nothing


プロセス開放処理はきちんと入れています。これでバッチリです!

[ツリー表示へ]
タイトルRe: 解決しました!!
記事No2346
投稿日: 2005/10/01(Sat) 23:43
投稿者花ちゃん
> 'プロセス開放処理(Excelの終了)
> oXl.Application.Quit()
> 'オブジェクトを開放
> oXl = Nothing
> bobj = Nothing
>
>
> プロセス開放処理はきちんと入れています。これでバッチリです!

多分これでは、キチンと終了していないはずです。
ここの.NET の Excel 関係をご覧下さい。

[ツリー表示へ]