[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『上書き保存について』(keisuke)
お世話になります。
2003のエクセルと、2013のエクセルで同じファイルを使っております。
ファイルは2003のxlsのままです。
2003では問題なく動いていたマクロが、2013ではエラーします。
問題になっているのは上書き保存のところです。
target = ThisWorkbook.FullName
途中のコードは割愛
ActiveWorkbook.SaveAs Filename:=path & ws3.Range("E1") & ".csv", FileFormat:=xlCSV
Sheets(ws3.Range("E1")).Name = sheetname1
※途中、CSVファイルを作成している。
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=target, FileFormat:=xlNormal '上書き保存
Application.DisplayAlerts = True
実行時エラー 1004 ○○にアクセスできません となります。
色々調べて FileFormat:=XlFileFormat.xlExcel8 に変えてみましたがダメでした。
ブック名が、CSVにつけたファイル名に変わってしまっているみたいです。
これが原因なのでしょうか?
あとは、互換モードで起動されているみたいです。何か関係あるでしょうか・・・
普通の上書き保存はできますので、CSVを出力している事に問題を感じます。
2003でも、2013でも上書き保存できるようにしたいです。
解決策をご存知の方が居られましたら、ご教授頂ければ幸いです。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
こういうお話でしょうか。
【Excel】VBAでExcelのバージョンによって保存する形式を変更する
http://blog.livedoor.jp/akf0/archives/51172335.html
(Mook) 2014/10/02(木) 20:59
先のコメント参照先を見て、実際にやってみたのでしょうか。 こちらでは下記のコードで問題なく動くのですが。
Sub Sample() Dim orgPath orgPath = ThisWorkbook.FullName '// 元のファイルは xls 前提
Dim csvPath csvPath = ThisWorkbook.Path & "\" & ThisWorkbook.Worksheets(3).Range("E1") & ".csv"
ThisWorkbook.SaveAs csvPath, FileFormat:=xlCSV
Application.DisplayAlerts = False ThisWorkbook.SaveAs FileName:=orgPath, FileFormat:=IIf(Application.Version < 12, xlExcel9795, 56) '// 先のリンク先と同じことです。 Application.DisplayAlerts = True End Sub
(Mook) 2014/10/03(金) 08:05
2003で動いて、2013で動かないんですよね? 調べたら、
Office 2013 非対応のファイル形式 Office 2013 では「97-2003 および 5.0/95 ブック形式」の保存をサポートしておりませんので、 マクロ内で「 xlExcel9795 」のファイル フォーマットを指定した構文がある場合などにエラーが 発生することがあります。 たとえば、下記の構文が含まれるブックを Excel 2013 で開いても正常に動作させることができま せん。 [ThisWorkbook.SaveAs FileFormat:=xlExcel9795]
64bitのエクセル2013だと発生するようですね? (稲葉) 2014/10/03(金) 09:02
試せる環境は持っていませんが、Mookさんのコードをお借りして、 >IIf(Application.Version < 12, xlExcel9795, 56) こちらの ~~~~~~~~~~~ を
IIf(Application.Version < 12, -4143, 56) このように ~~~~~ されても動きませんか? (稲葉) 2014/10/03(金) 09:19
アクセス・・・? 全容が見えないので、答えようがありません。 アクセスならエクスポート処理を保存して、保存したエクスポートを実行すれば いいんじゃないですか?
(稲葉) 2014/10/03(金) 11:03
いま 2013 が手元にないのですぐに確認できませんが、先のサンプルは2013 でも 動いたので、別の原因のような気がします。
下記のような処理に変更してどうでしょうか。
ThisWorkbook.Worksheets(対象シート).Copy ActiveWorkbook.SaveAs CSVで保存 ActiveWorkbook.Close
ThisWorkbook.Save
のようにすれば、元ファイルは影響を受けないと思いますが、どうでしょうか。 (Mook) 2014/10/03(金) 11:13
一番最初に書きました、エラー内容
実行時エラー 1004 ○○にアクセスできません のアクセスはファイルにアクセスできない
権限がないってことを言っているのでしょうか?
どのようなときにこのようなエラーがでるのでしょうかね・・・
ちなみにですが、データはサーバー上にあります。
ネットワークの問題かとも思い、デスクトップに保存してみましたがアクセスできませんとなります。
いったいなんなんでしょうかねぇ・・・どつぼにはまってしまいました・・・
(keisuke) 2014/10/03(金) 11:53
読み違えていました。 >アクセスなので、権限とかも色々調べて、 アクセス(が関係しているエラー)なので、 ということですね。
Debug.Print target でtargetの中身を確認して、 1)ファイル名に使えない文字が含まれていないか確認する 2)半角カナが含まれているフォルダ名やファイル名を通っていないか確認する 3)スペースが含まれていないか確認する 関係ないかもしれませんが、問題になりそうなところはつぶしておいたほうがいいかも。
(稲葉) 2014/10/03(金) 12:54
(keisuke) 2014/10/03(金) 13:33
今分かっている情報をもとに原因が分かる方がおられましたら、原因と解決策を教えて下さい。
○デスクトップやCドライブなど自身のPCに元のエクセルのデータがあればエラーしない。
○ネットワーク(サーバー)にファイルを置くとエラーする。
○エラーするところで、デバッグにしサーバーに置いてある元のデータの名前の変更はできないし、
新たに作られたCSVファイルの名前も変更できない。(ここに問題があるのでは?)
誰か分かる方がおられましたらお助け下さい。
(keisuke) 2014/10/21(火) 19:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.