• ベストアンサー

VB6からExcel出力し、ブックを閉じたとき異常終了

Win98 FirstEdition VB6 SP3 Excel97 SR1 上記の環境において、下記のソースのように、VBからExcelを起動してデータを出力した際、Excelのブックを閉じると、「保存しますか?」の「はい」「いいえ」関わらず、あるいはブックをセーブした後閉じても、Excelが異常終了してしまいます。 ブックではなく、Excel自体を閉じた場合は全く問題ありません。 どなたか対処法をご存じな方いらっしゃいませんか? Dim objXls As Object Dim objBook As Object Dim objSheet As Object Set objXls = CreateObject("Excel.Application") objXls.Workbooks.Add objXls.Visible = False Set objBook = objXls.ActiveWorkbook Set objSheet = objBook.Worksheets(1) (中略) objXls.Visible = True

  • mfuku
  • お礼率65% (80/123)

質問者が選んだベストアンサー

  • ベストアンサー
  • ykymtkt
  • ベストアンサー率51% (14/27)
回答No.1

objXls.Visible = True の後に objXls.UserControl = True を入れてみましょう。 自信はないのですが。 あと、VBのSP5とOffice97SR2を入れましょう。

mfuku
質問者

お礼

ご返答ありがとうございます。 しばらく、ネットにアクセスできない環境におりましたので、ご返答が遅れました。 実は、質問の投稿の直後に、下記の米国MS社の対応策(英語)を見つけまして解決しておりました。 おっしゃる通りの原因・対処法でした。 http://support.microsoft.com/support/kb/articles/Q158/8/95.ASP

その他の回答 (2)

  • yamahati
  • ベストアンサー率0% (0/2)
回答No.3

私も類似の現象で困っています。便乗質問ですが、参考になれば。 VB6で、 Dim wkbObj As Workbook Sub main()  newdata = InputBox("A1に入力するデータをどうぞ") Set wkbObj = GetObject("C:\WINDOWS\デスクトップ\adodata.xls") wkbObj.Worksheets(1).Range("A1").Value = newdata wkbObj.Close End Sub これでExcelを起動せずにadodata.xlsの内容を書き換えたところ、 次にExcelで開いても開かず、エラー表示も無い状態になります。 仕方無いので、IEからファイルを開くで開くとExcelが起動してadodata.xlsが 開きます。これを上書き保存すると、Excelで開いても見えるようになります。 なぜか、どうすれば良いか判らず、Gooで質問しようとしていたところです。

  • hydeen
  • ベストアンサー率0% (0/1)
回答No.2

異常終了が解消するかどうかは分かりませんが、 使用済オブジェクトを明示的にNothingしてますか?(Excelに限らず) アプリケーションを終了させても、Excel自体のProcessが システムに残ったままになっているとおもいます。 そのままだと実行する度にリソースを累積的に消費してまいます。 Set objSheet = Nothing Set objBook = Nothing Set objXls = Nothing

mfuku
質問者

お礼

ご返答ありがとうございます。 原因は#1の通りでした。 Set objSheet = Nothing Set objBook = Nothing Set objXls = Nothing については、これを入れても現象は変わりませんのであえて、省略して問題カ所を最小限で書かせていただきました。

関連するQ&A

  • vbs 文字位置を中央に

    vbscriptでエクセルファイルへ出力するスクリプトを作成しています。 エクセルファイルのセルに文字列を入力し、文字を中央揃えにしたいのですが、うまくいきません。 ----------------------------------------- Dim FSO, objExcel, objBook, objSheet Set FSO = CreateObject("Scripting.FileSystemObject") Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objBook = objExcel.Workbooks.Add Set objSheet = objExcel.Worksheets("Sheet1") objSheet.range("a1") = "test" objSheet.range("a1").HorizontalAlignment = xlHAlignCenter Set FSO = Nothing : objExcel = Nothing : Set objBook = Nothing : Set objSheet = Nothing ----------------------------------------- どうすれば、中央揃えにできますでしょうか? よろしくおねがいします。

  • VB6.0上でExcelオブジェクトを生成

    VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と その2 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と、どちらが良いのでしょうか? 開発環境は  Windows2000  VB 6.0  Excel 2003 です。

  • VBで既存エクセルシートを新規ブックにコピー

    VB6,Excel2003です。 既存のエクセルシートを新規ブックにコピーする プログラムを作成してみましたが タスクバーに新規ブックのタスクバーボタンが2つできてしまいます。 どこが原因か教えてください。よろしくお願いします。 Private Sub Command1_Click() Dim xlsApp As Excel.Application Dim xlsBookTemp As Excel.Workbook 'コピー元ブック Dim xlsBookCopy As Excel.Workbook 'コピー先ブック Dim xlsSheetTemp As Excel.Worksheet 'コピー元シート Dim xlsSheetCopy As Excel.Worksheet 'コピー先シート Set xlsApp = CreateObject("Excel.Application") Set xlsBookTemp = xlsApp.Workbooks.Open("C:\Temp.xls") Set xlsSheetTemp = xlsBookTemp.Sheets(1) Set xlsBookCopy = xlsApp.Workbooks.Add Set xlsSheetCopy = xlsBookCopy.Sheets(1) xlsApp.Visible = True 'コピー元のSheet1を新規ブックにコピーする xlsSheetTemp.Copy Before:=xlsSheetCopy 'コピー元のブックは閉じる xlsBookTemp.Close '///新規ブックの編集処理/// Set xlsSheetTemp = Nothing Set xlsBookTemp = Nothing Set xlsSheetCopy = Nothing Set xlsBookCopy = Nothing Set xlsApp = Nothing End Sub

  • vb→access コーディングエラーについて

    <環境>access2007 vbコーディングした以下のコードをaccessに移行しているのですが、宣言で"Excel.~"となっているところでコンパイルエラーとなります。 (エラー:ユーザー定義型は定義されていません。) なので、全てObject型に変えたのですが、 (1)objBook.Names.Countで件数が取れないし、 (2)For Each objName In objBook.Namesで名前も取れません。 accessで動くようにどう直せばいいのでしょうか? よろしくお願いします。 <vbコード> Dim XLAPP As Excel.Application →Objectに変更 Dim objBook As Excel.Workbook →Objectに変更 Dim objName As Excel.Name →Objectに変更 Dim objTable As Excel.Range →Objectに変更 Dim objRange As Excel.Range →Objectに変更 Dim objColumn As Excel.Range →Objectに変更 Dim objRow As Excel.Range →Objectに変更 Dim i As Integer Dim lngCountSheet As Long Set XLAPP = CreateObject("Excel.Application") Set objBook = XLAPP.Workbooks.Open(FileName) objBook.Application.DisplayAlerts = False lngCountSheet = objBook.Names.Count (1)←ここ For Each objName In objBook.Names (2)←ここ Set objTable = objName.RefersToRange With objTable For i = 1 To .Columns.Count Set objColumn = .Columns(i) objColumn.HorizontalAlignment = XlHAlign.xlHAlignLeft Set objColumn = Nothing Next i '先頭行の書式設定をします Set objRow = .Rows(1) objRow.Interior.Color = RGB(192, 192, 192) ' .Range("A2").Activate '' ActiveWindow.FreezePanes = True ' XLAPP.ActiveWindow.FreezePanes = True End With Next XLAPP.Quit

  • VB6.0でEXCELにシートを追加したい

    初心者なので、説明がつたないところ、用語の使い方が間違っいるところがあるかと思いますが、今後のためにバシバシ指導お願いします。m(_ _)m VBにてEXCELシートを作成し、それを既存ファイルのシートに追加し、保存したいと考えています。 ・既存ファイルがなけれが新規作成 ・既存ファイルに同名のシートがあれば上書きするか、シ ート名を変更するか聞く 私が考えた流れは、 1.既存ファイルを開く 2.新しいシートを追加する 3.シートの名前をつける 4.既に同名シートがあれば上書きの有無を聞く 5.VBで作ったEXCELシートを既存ファイルのシートにコピー 6.既存ファイルを更新 7.EXCELを閉じる です。 まず、既存シートはコモンダイアログで探し、追加したい既存シートを開くところまではできました。 ただ、 シートを追加しようとすると文字が赤くなって怒られました。 いろいろ調べた結果の文章なので、どうしてここで赤くなるのかが解読できません。 Dim objBook2 As Excel.Workbook Dim objSheet2 As Excel.Worksheet Set objBook2 = objExcel.Workbooks.Open(CDl.FileName) objBook2 .Visible = True Set objSheet2 = objBook2.Worksheets(1) Sheets.Add(after:=Worksheets(Worksheets.Count)) ↑ここでだめでした。 一気にコピーしたほうがいいのかとも思い、下記を記入しましがだめでした。 objSheet.Copy After:=CDl.FileName.Sheets(CDl.FileName.Sheets.Count) 長々とかきましたが、どなたかEXCELシートを追加する記述方法を教えてください。 よろしくお願いします。

  • VB6からExcelを操作する

    VB6.0からExcelの操作をしています。 そのなかで、Excelシートを印刷したいのですが、どのようにしたら良いのでしょうか。 また、ExcelVBAのFunctionやSubを実行するにはどのようにするのでしょうか。 VB6.0内でExcel操作は次のようにしています。 Dim ExcelApp As Object Dim EWorkbook As Object Dim ESheet As Object Set ExcelApp = CreateObject("Excel.Application") Set EWorkbook = ExcelApp.Workbooks.Open(ExcelBookFlNm) Set ESheet = EWorkbook.Sheets(M_SheetNm) Set ESheet = Nothing Set EWorkbook = Nothing ExcelApp.Quit Set ExcelApp = Nothing よろしくお願いします。

  • ブックの選択について

    ブックの選択について 以下のように、マクロのあるブック意外のブックを開いて からマクロのあるブックを選択しようとしてもできません。 具体的には一番下の Workbooks(thisBook).Select が正常に動きません。 なぜでしょうか? Dim myFName As String Dim macrobook As Object Dim thisBook As Workbook Set thisBook = ThisWorkbook myPath = ActiveWorkbook.Path ChDir myPath myFName = Dir("*S*.xls") Workbooks.Open Filename:=myFName Workbooks(myFName).Activate Worksheets(1).Select Workbooks(thisBook).Select

  • VB2008 エクセル出力

    VB2008 エクセル出力 教えていただけると助かります VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました ※「Microsoft Excel 9.0 Object Library」を参照 Dim xlApp As EXCEL.Application Dim xlBook As EXCEL.Workbook Dim xlsheet As EXCEL.Worksheet Dim File As String File = App.Path + "\EXCEL\" + "フォーム.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(File) Set xlsheet = xlBook.Worksheets("テスト") xlsheet.Range("A1") = "テスト" 'フォルダ作成 If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト") 'Worksheetを名前をつけて保存します。 xlApp.DisplayAlerts = False xlsheet.SaveAs "D:\テスト\テスト.xls" xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing VB2008の場合だとどのように書けば同じように動きますか ※色々試してみましたがダメでした 「Microsoft Excel 12.0 Object Library」を参照しています

  • VB6からのエクセルの印刷品質の設定方法について

    エクセルの印刷品質が空白だったりすると問題がでるケースがあるので、 強制的に 600 などの印刷品質の設定をVBでエクセルを読み込んだ後に 行いたいのですが、うまくいきません。 Dim objBook As Workbook Set objBook = .Workbooks.Open(strFilePath, False, True) objBook.印刷品質設定  ←うまく印刷品質の設定をできるコマンドがわからない? obj.book印刷実施

  • AccessからExcelにコピペするコードの作成

    Accessのカレントレコードをコピーし、特定のExcelブック(仮称A)にペーストするVBAコードを書いてみたのですが、 ペーストが上手くできず困っています。 (下記コードの「'任意のExcelブックAの、シートB内のセルA2にペーストする」の部分です) ------------------------------- '任意のExcelブックAを開く Dim Objxls As Object Dim strFile As String Dim wb As Object strFile = "C:\Users\ExcelブックAのある場所" Set Objxls = CreateObject("Excel.Application") With Objxls .Visible = True .Workbooks.Open strFile End With 'Accessのカレントレコードを選択 DoCmd.RunCommand acCmdSelectRecord 'コピーを実行 DoCmd.RunCommand acCmdCopy '任意のExcelブックAの、シートB内のセルA2にペーストする With Objxls.Workbooks(Objxls.Workbooks.Count) .Sheets("B").Range("A2").Paste End With ------------------------------- VBA初心者のため、複数のサイトを参考にしながらコードを作成しています。 説明が不足している部分がありましたら申し訳ございません。 どなたか知恵をお貸し頂けますと助かります。

専門家に質問してみよう