[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/12/04(Mon) 15:22
投稿者名:たぁ
Eメール:
URL :
タイトル:
Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
お世話になります。

現在VB6にて保存ボタンを押すと、ある取得データを1度テキストファイルに保存し、
Excelを起動後そのテキストファイルをExcelで開き、幅調整などをしてからデータ部分を
グラフ化するというアプリケーションを作成しています。

そこで、アプリケーションを起動し保存ボタンを押すと、思い通りの
動作はするのですが、Excelのプロセスが残ってしまいます。

その後、アプリケーションを起動したまま、タスクマネージャにて
Excelのプロセスを終了させると、次回の動作からは正常にプロセスも残らず
動作しております。

このような不具合の原因はどういった場合に起こるのでしょうか?

コードはExcelのマクロから取ったコードを参考にしており、
やたら長いのですが載せたほうがよろしいでしょうか?

動作環境はWinXP HOME,VB6.0,Excel2003を使用しております。

以上、よろしくお願いいたします。

投稿時間:2006/12/04(Mon) 16:36
投稿者名:YK
Eメール:
URL :
タイトル:
Re: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
こんにちは。

> このような不具合の原因はどういった場合に起こるのでしょうか?
> やたら長いのですが載せたほうがよろしいでしょうか?

見ないと分かりませんが、

オブジェクトの参照不足が考えられます。
例えば
Selection.Borders(xlInsideVertical)   残る

xls.Selection.Borders(xlInsideVertical) 残らない
等が考えられます。

投稿時間:2006/12/04(Mon) 16:55
投稿者名:たぁ
Eメール:
URL :
タイトル:
Re^2: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
YK様、ご返答ありがとうございます。

参照不足の可能性ですか・・・
コードを一部分載せますので、申し訳ありませんが
アドバイス願えますでしょうか?

Private Sub Excel_Save()


On Error Resume Next

Dim strExcelFolderName  As String
Dim strExcelFileName    As String

Dim xlApp       As Excel.Application
Dim xlBook      As Excel.Workbook
Dim xlSheet     As Excel.Worksheet
    
            
    
    strExcelFolderName = App.Path & "\Data"
    strExcelFileName = strExcelFolderName & "\" & FileName


    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)

    
    xlApp.Workbooks.OpenText FileName:=strFullFileName, _
        Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True

    xlApp.Columns("A:A").Select
    xlApp.Selection.Insert Shift:=xlToRight
    xlApp.Rows("13:13").Select
    xlApp.Selection.Insert Shift:=xlDown
    xlApp.Cells.Select
    xlApp.Selection.Font.Size = 8
    xlApp.Columns("A:A").Select
    xlApp.Selection.ColumnWidth = 0.38
    xlApp.Columns("B:B").Select
    xlApp.Selection.ColumnWidth = 6
    xlApp.Columns("C:V").Select
    xlApp.Selection.ColumnWidth = 5
    xlApp.Rows("5:5").Select
    xlApp.Selection.RowHeight = 168
    xlApp.Rows("13:13").Select
    xlApp.Selection.RowHeight = 1.5
    xlApp.Rows("1:1").Select
    xlApp.Selection.Insert Shift:=xlDown
    xlApp.Selection.RowHeight = 6
    xlApp.Range("B2:B5").Select
    xlApp.Selection.HorizontalAlignment = xlLeft
    xlApp.Range("H2:H5,V2:V4").Select
    xlApp.Range("V2").Activate
    xlApp.Selection.HorizontalAlignment = xlRight
    xlApp.Range("C2:D2").Select
    xlApp.Selection.Merge
    xlApp.Selection.HorizontalAlignment = xlRight
    xlApp.Selection.Copy
    xlApp.Range("C3:D5,L2:M5,Q2:R5").Select
    xlApp.Range("Q2").Activate
    xlApp.Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    xlApp.Range("F2:G2").Select
    xlApp.Application.CutCopyMode = False
    xlApp.Selection.Merge
    xlApp.Selection.HorizontalAlignment = xlLeft
    xlApp.Selection.Copy
    xlApp.Range("F3:G5,J2:K5,O2:P5,T2:U4").Select
    xlApp.Range("T2").Activate
    xlApp.Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    xlApp.Range("B2:D5,F2:H5,J2:M5,O2:R5,T2:V4").Select
    xlApp.Range("T2").Activate
    xlApp.Application.CutCopyMode = False
    xlApp.Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    xlApp.Selection.Borders(xlDiagonalUp).LineStyle = xlNone

           ・
           ・(中略)
           ・

    xlApp.Range("A1").Select
    xlApp.ActiveWorkbook.SaveAs FileName:=strExcelFileName & ".xls", _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    
    xlApp.Quit
        
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

End Sub

こんな感じです・・・

お願いいたします。

投稿時間:2006/12/04(Mon) 20:51
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
> 参照不足の可能性ですか・・・
> コードを一部分載せますので、申し訳ありませんが
> アドバイス願えますでしょうか?

ここのサイトに書いてある事では解決できませんでしたか?
http://hanatyan.sakura.ne.jp/vbhlp/excelframe.htm

(中略) の部分は何を書いているのでしょうか?

投稿された部分のコードだけを実行してもExcelのプロセスが残ってしまいますか?
(私が試した限りでは解放されていますが。 コード自体に問題が無い訳ではないが)
新規Bookを別に開いておられますがこれは、何の為?

投稿時間:2006/12/05(Tue) 10:12
投稿者名:たぁ
Eメール:
URL :
タイトル:
Re^4: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
花ちゃん様、ご返答ありがとうございます。(遅くなってしまい申し訳ありません。。。)

載せたコードのみで実行した結果、アプリケーション立ち上げ後一回目でも
正常に開放されました。(実験不足ですみません。)

中略の部分はグラフの描画関係とフォントの指定などをしております。

また、新規ブック作成ですが、マクロを取るときにエクセルを開いた状態で
マクロ取得を開始し、『ファイル』メニューの開くにより既存のテキストファイルを
開いた結果、このようなコードになっていましたのでそのまま使用してしまいました。

中略のコード部分を少しずつ有効にし、どのあたりで開放しなくなるのか
確認してみます。

すみませんでした。(結果を投稿しようと思います。)

投稿時間:2006/12/05(Tue) 11:22
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
> また、新規ブック作成ですが、マクロを取るときにエクセルを開いた状態で
> マクロ取得を開始し、『ファイル』メニューの開くにより既存のテキストファイルを
> 開いた結果、このようなコードになっていましたのでそのまま使用してしまいました。

どちらにしても、どのBookのどのSheetに命令を送っているのかをキチンと明記しないと
問題が色々でてきますよ。

  xlSheet.Activate  'この1行をここに追加して実行して見て下さい。
  xlApp.Columns("A:A").Select
    xlApp.Selection.Insert Shift:=xlToRight


 http://hanatyan.sakura.ne.jp/vbhlp/Excel11.htm

投稿時間:2006/12/05(Tue) 18:30
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
>     xlApp.Columns("A:A").Select
>     xlApp.Selection.Insert Shift:=xlToRight
>     xlApp.Rows("13:13").Select
>     xlApp.Selection.Insert Shift:=xlDown

ColumnsやRowsは、シートのプロパティなので、
xlSheet.Columns("A:A").Select
xlSheet.Selection.Insert Shift:=xlToRight
xlSheet.Rows("13:13").Select
xlSheet.Selection.Insert Shift:=xlDown
なのでは?

また、SelectやSelectionも使わない方がいいです。
xlSheet.Columns("A:A").Insert Shift:=xlToRight
xlSheet.Rows("13:13").Insert Shift:=xlDown

>     xlApp.Application.CutCopyMode = False

xlAppがExcel.ApplcationなのでApplicationは必要ありません。
xlApp.CutCopyMode = False

投稿時間:2006/12/06(Wed) 10:41
投稿者名:たぁ
Eメール:
URL :
タイトル:
Re^4: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
花ちゃん様、LESIA様、ご返答ありがとうございます!

昨日アドバイス頂いたとおりやってみようかと思っていましたが、
多忙の為出来ませんでした・・・;;

ちょっと本日も出来るかどうかわからないのですが、
出来る限りやってみたいと思います!

投稿時間:2007/01/26(Fri) 11:32
投稿者名:たぁ
Eメール:
URL :
タイトル:
Re^5: Excelのプロセスがアプリケーション起動1回目のみ残ってしまう。
しばらく別件の対応で出来ませんでしたが、
やっと原因がわかりました!

Excel側のグラフを操作する際、系列を設定する為に
目的のシートとセルを選択するのですが、
そのコードに誤りがありました。。。

    With xlApp
        .ActiveChart.ApplyCustomType ChartType:=xlUserDefined, TypeName:= _
            "TactTime_Default"
        .ActiveChart.SetSourceData Source:=xlApp.Sheets(FileName).Range( _
            "B7:U7,B11:U13"), PlotBy:=xlRows
                ・
                ・
                ・
ここの.ActiveChart.SetSourceDataがある行にxlApp.Sheets(FileName)・・・・
がありますが、ここにxlappを入れるのを忘れていました。


花ちゃん様、LESIA様、回答が大変遅くなってしまい申し訳ありませんでした。
ありがとうございました!