• 締切済み

保存してもワークブック&シートが消えています(Excel)

プログラミング初心者です。今DelphiでExcelを操作するプログラムを作成しており、Serversコンポーネントを使わずにOLEオブジェクトを使って操作しています。DelPhi側でExcelを起動させて、既存のファイルにDelPhiで取り出したSQLのデータをExcelに表示させるというものですが、データを上書き保存してもExcelのブックが消えていているようで、保存したxlsを起動させてもブック及びシートが表示されません。但し印刷プレビューには保存していたデータがプレビューされます。 原因が分からないので、申し訳ありませんがよろしくお願いします。 書いたプログラム↓ (uses節にComObj,Excel2000があります。) Var Excel,WorkBook,WorkSheet: Variant; ... ... Excel := CreateOleObject('Excel Application'); WorkBook := Excel.WorkBooks.Open(FileName := 'C:\@@@.xls',ReadOnly := False); WorkSheet := WorkBook.Wordsheets[1]; WorkSheet.Name := '@@@'; ... ...(以下Record取得の表記など) Excel.Visible := True; (Recordを取得し、値をCellにセットしてからVisibleをTrueにしています。) ... 大変読みにくくて申し訳ありませんがよろしくお願いします。環境はDelphi7,Excel2000,SQLServer2000です。

みんなの回答

  • jmh
  • ベストアンサー率23% (71/304)
回答No.1

Workbook.Save() したのに、C:\@@@.xls が削除されている(または元通りになっている)と言っていますか?

firecrazy
質問者

補足

回答ありがとうございます。 >Workbook.Save() したのに、C:\@@@.xls が削除されている(または元通りになっている)と言っていますか? はい。Saveはしています。ちゃんとそこまで書けば良かったです。すいません。ちなみに削除はされません。シートが表示されないんです。こちら質問内容がおかしかったです。 あと、この質問内容は自分で解決しました。 自分が書いたコードではExcelを閉じてもプロセスが残ってしまうようで、動作がおかしくなってしまっていたようです。ご迷惑をおかけしました。

関連するQ&A

  • EXCEL2007でワークブックのクローズ処理

    教えてください。 EXCEL2003形式ファイルのVBAに、 Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.Close SaveChanges:=False End Sub を記述してファイルを保存します。(作成は、EXCEL2003で保存します。) (仮にBook1.xlsとします。) このファイル(Book1.xls)をEXCEL2007で開きます。 このとき、別のファイル(仮にBook2.xlsとします。形式は、EXCEL2003です)をEXCEL2007で開きます。 で、Book1.xlsを×ボタンで終了すると、 EXCEL2007が異常終了します。 環境依存でしょうか? PCの環境に、EXCEL2003とEXCEL2007が混在しています。

  • 【Spreadsheet_Excel_Writer】の【repeatRows】について

    Spreadsheet_Excel_Writerを使ってクライアントにデータをエクセルファイルで ダウンロードさせたいと思っているのですが【repeatRows】の設置が思うようにできません。 以下のようにするときちんと繰り返し印刷されるのですが出来上がったファイルが サーバー側に保存されてしまいます。 *********************************************************** require_once 'Spreadsheet/Excel/Writer.php'; $workbook = new Spreadsheet_Excel_Writer('test.xls'); $worksheet =& $workbook->addWorkSheet(); $worksheet->write(0,0,"ヘッダ"); $worksheet->repeatRows(0); *********************************************************** 以下のようにすると繰り返し印刷されないのですがクライアント側にダウンロードされます。 *********************************************************** require_once 'Spreadsheet/Excel/Writer.php'; $workbook = new Spreadsheet_Excel_Writer(); $worksheet =& $workbook->addWorkSheet();  $workbook->send('test.xls'); $worksheet->write(0,0,"ヘッダ"); $worksheet->repeatRows(0); *********************************************************** 検索で調べましたがわかりませんでした。 【repeatRows】が設定され、クライアント側にダウンロードされるにはどこを修正すればよろしいでしょうか? PHPのバージョンは 4.3.8 です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • AccessでExcelのSheet間のコピーをしたい

    ACCESSのデータを読み込み、エクセルの元帳からレイアウトをコピー、新しいExcelのSheetにレイアウトとデータを書き込もうとしていますがうまく動きません。どこが悪いのでしょうか?次のように書きました。 Private Sub NEW_BOOK() Dim xlBookOrig As Workbook Dim xlBookNew As Workbook Dim xlSheetOrig As Worksheet Dim xlSheetNew As Worksheet Set xlApp = CreateObject("Excel.Application") xlApp.Application.Visible = True Set xlBookOrig = xlApp.Workbooks.Open("C:\元帳.xls") Set xlSheetOrig = xlBookOrig.Worksheets(1) Set xlBookNew = xlApp.Workbooks.Add Set xlSheetNew = xlBookNew.Worksheets(1) xlSheetOrig.Copy xlSheetNew.Paste xlSheetNew.Name = Left$(strMODL, 9) xlSheetNew.Cells(5, 1).Value = strSTAT xlSheetNew.Cells(4, 3).Value = strITEM ..... xlSheetNew.SaveAs "C:\'" & Left$(strMODL, 7) & "'.xls" これで実行すると、BOOK1 BOOK2 の2つが生成され、 BOOK1にはSHEET名、各データが書き込まれ、BOOK2には元帳のレイアウトがコピーされレイアウトとデータが一つになりません。 どこが間違っているのでしょうか? 宜しくお願いします

  • PHPからExcel出力について

    現在、プログラム(PHP)でデータ出力の機能を作成しているのですが、Excel出力で (1)ブックが開く (2)データを表示 (3)保存 以上の一連の動作はできるのですが、ブックを開いた際にExcel上に「ファイルへのダメージが深刻であり修復は不可能です。数式と値の回復を試みましたが、消失または破損したデータが含まれる可能性があります」といったエラーが表示されてしまいます。 コード変換もしているし、spreadsheet_excel_writerのパッチも当てましたが改善されません。 まだプログラミングが不慣れなもので、解決策が見当たらずに困っています。 どなたかご教授頂けますと助かります。よろしくお願いいたします。 ※申し訳ありません、データを添付していませんでしたので再投稿させていただきました。 ============================================================== //-----------ココから上はデータを取得する関数でデータを取得しています----------- $workbook = new Spreadsheet_Excel_Writer(); $workbook->setVersion(8); $workbook->setVersion(0x0500); $tablename = "sampletable"; $worksheet =& $workbook->addWorksheet($tablename); $worksheet->setInputEncoding("sjis"); $format =& $workbook->addFormat(); $format->_font_name = mb_convert_encoding("MS UI Gothic", "shift_jis"); $format->setBold(); $format->setFgColor(31); //Excelでいうところの見出し部分 $worksheet->write(0,0,"○○"); $worksheet->write(0,1,"○○"); $worksheet->write(0,2,"○○"); $worksheet->write(0,3,"○○"); $worksheet->write(0,4,"○○"); $worksheet->write(0,5,"○○"); $worksheet->write(0,6,"○○"); $worksheet->write(0,7,"○○"); $worksheet->write(0,8,"○○"); //-------ココから下はforeachでデータを表示($worksheet->write)させています-------

    • ベストアンサー
    • PHP
  • 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

  • VBA 保存方法を教えて下さい

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("×ボタンは使用できません。" & vbCr & _ "よろしいですか?", vbInformation + vbOKOnly) = vbOK Then Cancel = True End If End Sub 上記の様にEXCELワークブックに記述しましたが、 別に設置した「保存終了ボタン」で終了できなくなってしまいました。 Workbook_BeforeClose が邪魔しているようです。 どうすれば解決できるでしょうか? 「保存終了ボタン」に記述しているコードは下記です。 Sub 保存終了() ActiveWorkbook.Save CommandBars("Worksheet Menu Bar").Enabled = True Application.CommandBars("Standard").Visible = True Application.CommandBars("Formatting").Visible = True Application.CommandBars("Drawing").Visible = True With Application .DisplayFormulaBar = True .ShowWindowsInTaskbar = True End With Application.WindowState = xlMaximized Application.Quit MsgBox "終了します" End Sub 宜しくお願いします。

  • VBAでExcelの保存終了を取得したい

    こんばんは。 Accessから、Excelへデータを渡し、保存をして終了というものを作っています。 *************Access側 Set Excel = New Excel.Application Set book = Excel.Workbooks.Open("c:\Sample.xls") '一時的にデータをためるExcelファイル Set Sheet = book.Worksheets(1) ・・・・・データを吐き出し、書式を変更する処理・・・・・ Excel.Run book.Name & "!Macro_Go" 'Sample.xlsからAドライブのExcelファイルへシートコピー book.Save Excel.Quit ************************* Access側でExcelファイルのマクロを操作し、Excelのファイルは、Aドライブ(フロッピー)へ保存することとなります。 保存の際に、非常に時間がかかり、完了時にメッセージを出したいのですが、 保存が完了する前に、完了メッセージが出てしまいます。 そこで、Excelで保存が完了したという状態を取得できないかと考えています。 どういう方法を使えば、Excelの保存完了状態を取得できますでしょうか?

  • Excelのセルの値を取得

    VB2005Expressにて開発しています。 Excelのセルの値を取得するにはどうしたらいいのでしょうか。 下記でExcelは起動出来るのですが、値の取得ができません。 また、Rangeで範囲を指定して一括取得して、1データずつ配列化した 変数にセットすることは可能なのでしょうか。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlFilePath As String = "C:\excel_test.xls" Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) xlApp.Visible = True どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • Excel2000で、特定のシートを新規ブックに保存したい

    マクロ実行中のブックの特定のシートを新規ブックに保存したいのです。 特定のシートは、任意で複数枚あるとします。 但し、クリップボードや、Activeメソッド、Selectメソッドなど、 マクロ実行中に、Windowsの他のアプリケーションに 影響の出る恐れがあるロジックは使用しないとします。 また、特定のシートには、罫線や色の設定なども してあり、新規ブックに書式も保存します。 以下のコードは、クリップボードを経由せず、セルをコピーしています。 Sub a() Dim xlsApp As Excel.Application Dim xlsBook As Excel.Workbook Dim xlsSheet As Excel.Worksheet Set xlsApp = CreateObject("Excel.Application") Set xlsBook = Workbooks.Add  '★1 Set xlsSheet = xlsBook.Worksheets(1) '★2 ThisWorkbook.Worksheets("Sheet1").Range("A1:D200").Copy _ Destination:=xlsBook.Worksheets("Sheet1").Range("A1:D200") xlsBook.Close xlsApp.Quit Set xlsApp = Nothing Set xlsBook = Nothing Set xlsSheet = Nothing End Sub このコードは、ちゃんと動きます。 しかし、問題があります。 xlsApp.ScreenUpdating = False xlsApp.Visible = False など上記のコードに追加すると、新規ブックの操作できません。 ★1の部分で、 Set xlsBook = Workbooks.Add  としているからです Set xlsBook = xksApp.Workbooks.Add  とすると、 xlsApp.ScreenUpdating = False xlsApp.Visible = False など、新規ブックの操作ができます。 しかし、 Set xlsBook = xksApp.Workbooks.Add  では ★2の ThisWorkbook.Worksheets("Sheet1").Range("A1:D200").Copy _ Destination:=xlsBook.Worksheets("Sheet1").Range("A1:D200") で、「RangeクラスのCopyメソッドが失敗しました。」 とエラーが発生します。 何か良い方法はありますか?

  • PHP Spreadsheet Excel Writer

    PHP 「Spreadsheet Excel Writer」について 「Spreadsheet Excel Writer」を使ってエクセルファイルを出力したいのですが。 セルに「SUMIF関数」を入力すると、出力されたエクセルには「Syntax error: ,, lookahead: , current char: 12」と 入力されておりこの関数が使えなくて困っています。 手順の詳細は下記です。 $workbook = new Spreadsheet_Excel_Writer("./test.xls"); $worksheet =& $workbook->addWorksheet('week report'); $worksheet->write(0,0,"初月課金"); $worksheet->write(1,0,"初月無料"); $worksheet->write(2,0,"初月無料"); $worksheet->write(3,0,"初月無料"); $worksheet->write(4,0,"初月無料"); $worksheet->write(0,1,100); $worksheet->write(1,1,100); $worksheet->write(2,1,100); $worksheet->write(3,1,100); $worksheet->write(4,1,100); $worksheet->writeFormula(10, 0,"=SUMIF(A1:A5,\"=初月課金\",B1:B5)"); $workbook->close(); どうやったら正常に関数が入力できるか、どなたか教えてください。 宜しくお願いします

    • 締切済み
    • PHP