プロが教える店舗&オフィスのセキュリティ対策術

VB初心者です。
以下のコード(実際のものと根幹は同じです)でExcelを扱いたいのですが、
終了の処理をしている(つもり)にも関わらず、EXEを終了するまで
Excelが終了してくれません。
画面上は終了しているのですが、EXE起動中にxlsファイルを開くとシートを表示してくれないのです。
どなたか正しい方法を教えてください。

Dim xlbook As Excel.Workbook
Dim xlsheet As Sheets
Dim H As Integer
Dim W As Integer

H = ImNumber1.Text
W = ImNumber2.Text
Set xlbook = CreateObject("Excel.sheet")
Set xlsheet = xlbook.Worksheets

Workbooks.Open App.Path & "\稼動確認.xls"

Worksheets("稼働確認書").Activate
xlbook.Application.Visible = True

xlsheet.Application.Cells(H, W).Value = ImText1.Text
ActiveWorkbook.Save
Workbooks.Close
xlbook.Application.Quit

Set xlbook = Nothing
Set xlsheet = Nothing

A 回答 (3件)

回答としては下記のコードです。


Dim XlsApp As Excel.Application
Dim XlsBook As Excel.Workbook
Dim XlsSheet As Excel.Worksheet
Set XlsApp = New Excel.Application
Set XlsBook = XlsApp.Workbooks.Open(App.Path & "\稼動確認.xls")
Set XlsSheet = XlsBook.ActiveSheet

XlsSheet.Range("A1").Value = "Data"
XlsBook.Save
XlsApp.Quit

Set XlsSheet = Nothing
Set XlsBook = Nothing
Set XlsApp = Nothing

まず、質問に記載されているコードでは以下の部分が間違っています。

>Set xlsheet = xlbook.Worksheets
>Workbooks.Open App.Path & "\稼動確認.xls"
xlsheet にはきちんとOPENしたワークブックへの参照を代入します。

>xlbook.Application.Visible = True
>xlsheet.Application.Cells(H, W).Value = ImText1.Text
ワークブックやワークシートなど下位のオブジェクトから上位のオブジェクト
Excel.Application を参照してはいけません。

また、回答のコードではVisibleプロパティをTrueにしていませんが、
Excelを表示させるときには
XlsApp.Quit
を削除して
XlsApp.Visible = True
XlsApp.UserControl = True
に変更します。
以上です。
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。
残念ながら問題にしていた部分は解決できなかったのですが、
その他の部分で大変参考になりました。
またよろしくお願いいたします。

お礼日時:2001/09/11 10:05

xlBook.Close


xlApp.Application.Quit
Set xlBook = Nothing
Set xlApp = Nothing

かな?

参考URL:http://www.int21.co.jp/pcdn/

この回答への補足

質問では「Excelが終了しない」と書いたのですが、
症状として「開きはしないがファイル削除は共有違反せずにできる」ということなので、もしかしたら問題点はクローズのやり方だけではないのかもしれませんね。

補足日時:2001/09/10 17:17
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
ActiveWorkbook.Application.Quit
xlApp.Application.Quit
Set xlbook = Nothing
Set xlsheet = Nothing
Set xlApp = Nothing

なども試してみたのですが、やはり駄目でした。
ACCESS97→Excel97の一括コンバートPGなので、連続した変換はなく
強制的にEXEを閉じてしまっても問題はないと思うのですが・・・・。
今後のことを考えるとやはり気になります。

お礼日時:2001/09/10 17:02

Dim xlApp As Excel.Application


Dim xlBook As Excel.Workbook
Dim xlSheet As Sheets
Dim H As Integer
Dim W As Integer

H = ImNumber1.Text
W = ImNumber2.Text
Set xlApp = CreateObject("Excel.Application")
ExcelApp.Workbooks.Open "\稼動確認.xls"
Set xlBook = ExcelApp.Workbooks("稼動確認.xls")
Set xlSheet = xlBook.Worksheets

(略)

Set xlBook = Nothing
Set xlSheet = Nothing
xlApp.Quit
Set xlApp = Nothing


で、多分OK
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございました。
上記コードにより今までは何故か一度空のOpen~Quitを走らせなければ書き込みができないという不細工なコードを直すことができました。
しかし、やはりEXEを終了させない限りは
ファイル(このプログラムで使用した対象xlsファイルに限らず、すべてのxlsファイル)を開こうとするとツールバーしか表示されないのです。
他に何か対処法は御座いませんでしょうか?

お礼日時:2001/09/10 15:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!