プロが教えるわが家の防犯対策術!

ExcelVBAを使って、ワークシートをテキストファイルに保存しようとしています。
CSV形式で保存するときは、
  Sheets("test").Activate
  ActiveSheet.SaveAs Filename:=ActiveSheet.Name & ".csv", _
    FileFormat:=xlCSV, CreateBackup:=False
でtest.csvに保存できますが、
単純にテキストファイルとして保存したいときに
  Sheets("test").Activate
  ActiveSheet.SaveAs Filename:=ActiveSheet.Name & ".txt", _
    FileFormat:=xlText, CreateBackup:=False
としても、実行時に下記のエラーになってしまいます。
  実行時エラー '1004'
  アプリケーション定義またはオブジェクト定義のエラーです。
どうしたらよいのでしょうか?

また、CSVで保存した時も開いているファイルがtest.csvに変わってしまいますが、できれば、開いているファイルは元のファイルのままでシートだけを保存するにはSaveAsメソッドではなく、他のメソッドを使うのでしょうか?
(hogehoge.xlsのtestシートを保存してもhogehoge.xlsが開いたままにしたい)

以上、宜しくお願いします。

A 回答 (2件)

ActiveWorkbook.SaveAs (以下省略)


ではないですか? 
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
確かにActiveWorkbookで保存できました!!
1シートだけの保存だからとActiveSheetしか考えていませんでした。
対象オブジェクトでそんな違いがあるのですね~
勉強になりました。m(..)m

お礼日時:2007/01/27 23:48

開いているファイル名は元のままで、シートだけ別名でテキスト保存するなら、自分でテキストファイルをオープンして1行ずつ書き込みを行い、クローズすればいいと思います。


ただし、各行をテキストファイルに書き込むフォーマットに整形して、ループでまわして書き込むなどSaveAsでExcelが自動的にやっていることを自分でやらないといけないですが。

方法としては、Openステートメントを使う方法と、FilesystemObjectを使う方法があります。

Openステートメントを使う方法
http://officetanaka.net/excel/vba/file/file08.htm

FileSystemObjectを使う方法
http://officetanaka.net/excel/vba/filesystemobje …

この回答への補足

補足です。

ちょっと姑息な手段ですが、下記の方法でもうまくいきました。
  Dim fName as String
  '元のワークブック名を保持
  fName = ActiveWorkbook.Name

  'テキストファイル保存
  Sheets("test").Activate
  ActiveWorkbook.SaveAs FileName:=ActiveSheet.Name & ".txt", _
    FileFormat:=xlText, CreateBackup:=False

  '上書き確認して来ないように元ファイル削除
  Kill fName
  'ワークブック名を元の名前に戻す
  ActiveWorkbook.SaveAs FileName:=fName, _
    FileFormat:=xlWorkbookNormal, CreateBackup:=False

但し、この方法ではマクロを実行する度に元ファイルのタイムスタンプが
変わってしまう副作用はありますが。

何はともあれ、皆様のおかげで目的としているところは実現できました。
ありがとうございました。

補足日時:2007/01/31 11:18
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
思っていたよりも大変なのですね。
紹介して頂いたサイトを参考にさせて頂きたいと思います。
(このサイトいろいろと参考になりそうです。教えて頂いてありがとうございました。)
まずはお礼まで。

お礼日時:2007/01/27 23:52

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