• 締切済み

VBA CopySaveAs 失敗する

ダブルクリックでエクセルファイルを読み取り専用で開いたときに、 アドインでCopySaveAsを使ってバックアップを取りたいですが、 読み取り専用で開かなければCopySaveAsでエラーが出ません。 読み取り専用で開いてしまうと、読み取り専用を解除してもCopySaveAsが失敗します。 やりたいことは普段から開いた履歴としてファイルのバックアップをローカルに残しておく。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

回答が付きませんね。質問に関する疑問点を挙げてみます。 >アドインでCopySaveAsを使って SaveCopyAsメソッドなら知っていますが、質問者さんのパソコン内にアドインがあって、それが「CopySaveAs」という名称とすれば、そのアドインの内容を明らかにしないと回答は難しいですね。質問者と回答者で言葉が通じないわけです。 >バックアップを取りたい ・アドインがどのようなバックアップを取っているのでしょうか。   直近の一つだけのバックアップ?   アドインを使うたびにバックアップを取っている?無数に増える ・バックアップ用の指定フォルダーがある? ・バックアップブックの拡張子は? これらをはっきりさせれば読み取り専用のバックアップファイルを作る助けになります。 また、バックアップファイルを作成する機能としては、名前を付けて保存する>ツール>全般オプション>バックアップファイルを作成する の機能もあります。アドインがどう絡んでいるか知りたいところです。 >読み取り専用を解除しても どのようにして解除されているのでしょうか。「ChangeFileAccess」メソッドを使って、「xlReadWrite」を指定すれば解除できますが、読み取り専用で開いたことに変わりはないので、読み取り専用ブックを変更して保存しようとしても、変更を確認するために変更前のブックが呼び出され、変更後のブックを別名で保存するには、別ブック名を入力(または何らかの設定)する必要があります。このような対応がアドインにあるかどうかです。読み取り専用ブックでエラーが出るということは、アドインにそのような対応が書かれていないのでしょう。(中身が見れないので断定はできませんが) >普段から開いた履歴 「普段から開いた」という表現は初めて見ました。どのような操作のことでしょうか。 対応策?(ダメな方法でしょう)  ・Workbook_Openメソッドで読み取り専用を検知    ↓  ・読み取り専用ならばメッセージ出力   バックアップが必要なら閉じる    ↓  ・エクスプローラで読み取り専用を解除    ↓  ・ブックを開く    ↓  ・何らかの編集    ↓  ・アドインでバックアップを作成    ↓  ・閉じる    ↓  ・エクスプローラで読み取り専用に設定   または、Closeメソッド前に読み取り専用にする(多分できない) アドインでバックアップを作成することを前提に考えると、全てのブックがこのような手順になりかねないですね。避けたい方法です。 自分が作成するならば、バックアップを作成する必要があるブックだけのバックアップ手順を書いてアドインは使わないでしょう。その場合は、最初に書いた疑問点を明かにして作ると思います。当方、Win10、Excel2010です。ご参考に。

tanakanono
質問者

お礼

>やりたいことは普段から開いた履歴としてファイルのバックアップをローカルに残しておく。 日本語がおかしかったですね。 アドインはエクセルアプリで開いたファイルをユーザーが閉じる際に、CopySaveAsでバックアップフォルダにコピーを保存します。ファイルは読み取り専用で開くこともあるため、これもバックアップを取りたいです。

関連するQ&A