• ベストアンサー

自身のファイルのコピーを作成したい

アクセス2003vbaです。 自身のファイルのコピーを作成したいのですが Sub Sample() FileCopy CurrentProject.FullName, "C:\あああ.mdb" End Sub を実行すると 「実行時エラー'70' 書き込みできません」 になってしまいます。 もしかして同じフォルダ内じゃないと駄目なのですか?(「C:」) 何か間違っていますか? よろしくお願いします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> 「実行時エラー'70' 書き込みできません」 「FileCopy」のヘルプをみると(VBE画面右上の検索窓にて「FileCopy」で検索)、 > 既に開いているファイルに対して、FileCopy ステートメントを実行しようとすると、エラーが発生します と解説欄にありますので、自身のコピーの作成には使えないはずです。 (こちらで同じエラーとなることを確認しました) 自身を複製する場合は、以下のようにします(FileSystemObjectを使った例): Private Sub Sample1()   '変数の宣言   Dim FSO As Object   'FileSystemObjectを作成   Set FSO = CreateObject("Scripting.FileSystemObject")   'FileSystemObjectに用意されている「CopyFile」を使用して複製   FSO.CopyFile CurrentProject.FullName, "C:\あああ.mdb"   '念のため、明示的にメモリを解放   Set FSO = Nothing End Sub なお、VBEのメニューで、「ツール(T)→参照設定(R)」を選択して『参照設定』 ダイアログを開き、「Microsoft Scripting Runtime」のチェックをオンにすると、 以下のような書き方もできます。 (特にコードの簡略化ができるわけではありませんが、「FSO.」と入力したときに、 「.」の後に続けられる候補が表示されるので、自分でコードを書くときに便利) Private Sub Sample2()   Dim FSO As FileSystemObject   Set FSO = New FileSystemObject   FSO.CopyFile CurrentProject, "C:\あああ.mdb"   Set FSO = Nothing End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ なお、No.1の方のお礼欄のエラーですが、「Const」(=定数)を宣言した場合は、 「=」の後ろには  「"あああ.mdb"」などの定数や  「"test" & vbCrLf」などの定数だけでできた式(=定数式) は指定できますが、「.FullName」のようなプロパティ、或いは同時に宣言した 変数などを指定することはできませんので、合わせて参考まで。

thuurhurhu
質問者

お礼

おお!すばらしい!できました!ありがとうございます。

その他の回答 (1)

  • chizakura
  • ベストアンサー率40% (77/190)
回答No.1

勘違いしてたらすみません↓ これで出来ないでしょうか。。 Private Const cnsSOUR = "C:\あああ.mdb" ' 元ファイル Private Const cnsDEST = "C:\いいい.mdb" ' 先ファイル Sub Sample() FileCopy cnsSOUR, cnsDEST End Sub

thuurhurhu
質問者

お礼

ご提示のコードでできました! ありがとうございます。 しかし元ファイルをカレントファイルで取得したい場合どういった方法があるでしょうか? やはり Private Const cnsSOUR = CurrentProject.FullName だと 「定数式が必要です」 となってしまいます。

関連するQ&A

  • VBA-MyExcelファイルをコピー

    目的は今開いているExcelファイルを適宜バックアップする。 方法として自身Excelに下記VBA「FileCopy」文を記述して実行⇒実行エラーにて失敗。 対処方法又は妙案をご教授ください。 Option Explicit Private Const MyFile = "C:\Tmp\Sample.xls" '自身ファイル Private Const DsFile = "C:\Tmp\Sample_01.xls" '複製ファイル Sub SAMPLE() ThisWorkbook.Save FileCopy MyFile, DsFile End Sub

  • 同名でもエラーにならない理由

    Sub バックアップ作成() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile CurrentProject.FullName, "C:\test.mdb" Set FSO = Nothing End Sub このコードを実行すると、同じファイルがあってもエラーになりません。 Sub DiskOprate4() MkDir "C:\バックアップ" End Sub なら同名のフォルダがあればエラーになります。 ファイルはエラーにならないがフォルダならエラーになるのでしょうか? それともFSOというのを使うとエラーにならないのですか? よろしくお願いします。

  • エクセルVBAで開いているファイルをコピーする方法

    はじめまして。 ころと申します。 (初書き込みです。そして、エクセルVBA初心者です。 質問の仕方等に問題がありましたら、ご指摘ください。) 以下のようにファイルをコピーする方法を知っているのですが、CopyTest1.xlsを開いているとコピーできません。ファイルを開いていてもコピーする方法を教えてください。 Sub copy() SourceFile = "C:\CopyTest1.xls" TargetFile = "C:\CopyTest2.xls" FileCopy SourceFile, TargetFile End Sub CopyTest1.xlsを開いて、CopyTest1.xlsのマクロを動かして、CopyTest1.xlsのファイルの複製を作りたいのです。 詳しい方々、よろしくお願いいたしますm(__)m

  • excelのファイルコピー

    excelvbaでファイルコピーをしようと思っています。 コピーは自分自身のファイルをコピーしようとしています。 ファイル1.xls(自分自身、コピー元) ファイル2.xls(コピーされたファイル) FileCopyを使用し以下のようにやろうとしましたが、書き込みエラーがでてうまくいきませんでした。 エラーメッセージ「実行時エラー '70': 書き込みできません。」 FileCopy "ファイル1.xls", "ファイル2.xls" どのようにすればうまくいくのでしょうか?

  • ACCESSのバックアップ

    ACCESSを閉じる際に自分自身をコピー、 リネームしてバックアップを取りたいのです。  ・BackUp20080108.mdb ←バックアップを取る際に日付を入れる。  ・3日分までバックアップをとり、4日目を取る時は   1日目のものを消す。   【1日目】BackUp20080105.mdb   【2日目】BackUp20080106.mdb   【3日目】BackUp20080107.mdb   【4日目】BackUp20080108.mdb ←これを作る際に【1日目】を削除 とりあえずコピー、削除は出来ましたが、 フォルダ内にあるファイルの識別をどうしてよいのかわかりません。 なにかサンプル、同じようなものを作った事のある方がおりましたら ご指導お願い致します。 Dim fs As Object '自身をコピー Set fs = CreateObject("Scripting.FileSystemObject") fs.CopyFile CurrentProject.Path & "\" & CurrentProject.Name, _ CurrentProject.Path & "\" & "BackUp" & Format$(Date, "yyyymmdd") & ".mdb" 'ファイル削除 Set fs = CreateObject("Scripting.FileSystemObject") fs.deleteFile CurrentProject.Path & "\" & CurrentProject.Path & "\" & "BackUp" & Format$(Date, "yyyymmdd") & ".mdb" set fs=Nothing End Sub

  • Access2003VBA・MDBファイルの容量をVBAで知りたいです。

    Access2003VBAで質問です。 (1)VBA実行中(自分自身)のMDBファイルの容量を、VBAで知ることはできますか? CSVファイルを読み込む処理ですが、1.9ギガくらいで、処理をとめたいのです。 (2)VBA実行中(自分自身)のMDBファイルのディレクトリを取得する方法を教えて下さい。 (3)自分自身のMDBファイルは、最適化できませんよね。 DAOで、閉じてるMDBファイルをコピーするしかないのかな?

  • フォルダをコピー フォルダの中に入れたい FSO

    vbaです。よろしくお願いします。 Sub Sample() Dim myFSO As Object Dim MyPath As String MyPath = "C:\Users\ああああ\Desktop\" Set myFSO = CreateObject("Scripting.FileSystemObject") myFSO.CopyFolder MyPath & "コピーしたフォルダーを入れるフォルダー", MyPath & "コピーするフォルダ" Set myFSO = Nothing End Sub こんな感じで、デスクトップにある、"コピーするフォルダ"をコピーして、 デスクトップにある、"コピーしたフォルダーを入れるフォルダー"の中に入れたいのですが 上記のコードを実行しても何も起きません。 コピーしたフォルダーを入れるフォルダーの中身を見ても、空です。 ”コピーしたフォルダーを入れるフォルダー”の中に、"コピーするフォルダ" を入れる方法を教えてください。

  • VBAの覚え方・勉強の仕方

    自分はVBAを覚える・勉強するために テキストファイルにサンプルコードを作って一つのフォルダに保存しています。 サンプルコードとは Sub ファイル名を取得する() MsgBox CurrentProject.Name End Sub をテキストに書いて保存して、ファイル名を 「Access_自身のファイル名を取得する.txt」にしています。 現在200個くらい作りましたが、 管理ができなくなってきてしまいました。 というのも、同じようなサンプルコードを作ってしまったり、 フォルダ内検索してるのに欲しいコードがヒットしなかったりです。 みなさんはどのようにVBAのお勉強をしているのでしょうか? サンプルコードを作られている方は、どのように管理されてますか? アクセスで「サンンプル管理システム」などを作って管理してるのでしょうか?

  • 定数にFullNameは使えないのですか?

    アクセスで、 Sub aaa() Const sPath As String = CurrentProject.FullName MsgBox sPath End Sub をすると、「定数式が必要です。」問われるのですが、上記のように定数に自身のfaiある名を入れたいのですが、無理なのでしょうか?

  • VBAでファイルのシートをコピーしたい。

    VBAでファイルのシートをコピーしたい。 現在、FileCopyでEXCELファイルをコピーしていますが、特定のシートだけコピーしたいのですが、、 (現在の一部です)  FileCopy fs.FoundFiles(i), "C:\集計" どのように書き換えればよいのでしょうか? 宜しくお願いします。

専門家に質問してみよう