アクセス2003vbaです。
自身のファイルのコピーを作成したいのですが

Sub Sample()
FileCopy CurrentProject.FullName, "C:\あああ.mdb"
End Sub

を実行すると
「実行時エラー'70' 書き込みできません」
になってしまいます。

もしかして同じフォルダ内じゃないと駄目なのですか?(「C:」)
何か間違っていますか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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」のようなプロパティ、或いは同時に宣言した
変数などを指定することはできませんので、合わせて参考まで。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/17 12:30

勘違いしてたらすみません↓


これで出来ないでしょうか。。

Private Const cnsSOUR = "C:\あああ.mdb" ' 元ファイル
Private Const cnsDEST = "C:\いいい.mdb" ' 先ファイル

Sub Sample()
FileCopy cnsSOUR, cnsDEST
End Sub
    • good
    • 0
この回答へのお礼

ご提示のコードでできました!
ありがとうございます。

しかし元ファイルをカレントファイルで取得したい場合どういった方法があるでしょうか?

やはり
Private Const cnsSOUR = CurrentProject.FullName
だと
「定数式が必要です」
となってしまいます。

お礼日時:2009/05/16 00:23

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFilecopyステートメントでエラー

今VB6SP5を用いてRAS接続で
サーバーへファイルをコピーするプログラムを
作っています
ファイルのコピー方法はFilecopyステートメントを使用
この時ファイルコピーでエラーになる事があるのですが
原因は何が考えられますか
サーバはWindows 2000 SP4
クライアントも同様 Windows2000 SP4

以上です

Aベストアンサー

>偶数回目は成功するのでファイル共有なのではと思っています
たしかに偶数回目で成功するのであれば、そうかもしれないと思ったのですが、、、
以下の実験をしたところ、不安はまだ消えず。。。


FileCopyの仕様
FileCopy source, destination

sourceに存在しないファイルを指定したとき
エラー番号:53/ファイルが見つかりません。

sourceに排他されているファイルを指定したとき
エラー番号:70/書き込みできません。

destinationが存在しない(参照できない)フォルダを指定したとき
(フォルダ(共有フォルダ)を参照できないとき:これはセッション問題も含みます。)
エラー番号:52/ファイル名または番号が不正です。

という結果を得ました・・・・

イメージ的にはsourceが不正なときに、53のエラーが出てほしかったんだけどなぁ・・・


そこでさらに実験願います。
・圧縮ファイルを作成したあと、、、
※その圧縮ファイルではなく、既存の別のファイルをネットワーク上のサーバにコピーできますか?
※その圧縮ファイルを、ローカルのマシンのどこかのフォルダにコピーできますか?
この2点で、source側かdestination側のどちらに問題があるかがわかると思います。

>偶数回目は成功するのでファイル共有なのではと思っています
たしかに偶数回目で成功するのであれば、そうかもしれないと思ったのですが、、、
以下の実験をしたところ、不安はまだ消えず。。。


FileCopyの仕様
FileCopy source, destination

sourceに存在しないファイルを指定したとき
エラー番号:53/ファイルが見つかりません。

sourceに排他されているファイルを指定したとき
エラー番号:70/書き込みできません。

destinationが存在しない(参照できない)フォルダを指定したとき
(フォル...続きを読む

Qカレントレコードが無い事を判定させる方法

SQLを使ってmdb内のレコードセットを取得し、
無かったらエラーを返す、という処理を作成
する場合、カレントレコードが無い事を
判定するにはどうすれば良いでしょうか?
イメージは下記のような感じです。

レコードセット as DAO.Recordset

'レコードセット取得
 Set レコードセット = db.OpenRecordset(作成したSQL文)

'判定
If カレントレコード無 Then
MsgBox "エラーメッセージ"
Exit Sub
End If

Aベストアンサー

カレントレコード無は"レコードセット.RecordCount = 0"
で行けませんか?

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSに同時アクセス(編集)をしたい

教えてください。
ACCESSのDBに複数のユーザが同時にアクセスして、
データを追加・編集したいのですが、
やはり、不可能でしょうか?

Aベストアンサー

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」

というのがありますから、最初に作ったdb1をたどり、リンクしたいテーブルを
選択します。

こうすることにより、db2にdb1のテーブルがリンクされ(リンクテーブルと
呼ばれます。アイコンが通常のテーブルと違います。)、db1に格納された
データをdb2で編集することができます。

db2で、db1からのリンクテーブルを元にクエリーを作成することもできます。
リンクテーブルに対してできないことはテーブル構造の変更くらいで
他のことはだいたいできると思っていいかと思います。

このような形をとれば、ローカルエリアネットワーク内の複数のコンピュータ
から同時に同じアクセスデータベースにアクセスすることは可能かと思います。

このやり方にはおそらく問題もあるだろうと思うのですが、昔私がやって
いた頃は、特段支障もなく業務を行なうことができました。問題は、これを
読んだ他の誰かが指摘してくださるかと思います。

同じレコードに複数ユーザが同じタイミングでアクセスするとややこしい
ことになります。これを回避するためには、db2にワークテーブルを備えておき、
リンクテーブルからレコードを一度db2に格納し、編集を終了したのちに
リンクテーブルのレコードを削除し、ワークテーブルで編集したレコードを
リンクテーブルに追加する、などのルーティンをマクロやVBAで構築するのが
よいかと思います。私はそのようにしていました。

他に、ADOを使う方法などもあります。方法はいくつかありますから、
少し研究してみるといいですよ。(^-^)

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」
...続きを読む

QACCESSで作成したアプリケーションがACCESSランタイムで動かない?

ACCESSで作成したアプリケーションがあるのですが、顧客の要望でランタイムで運用したいと思っています。

ところが動作確認をすると、あるフォームを開く際に「実行時エラーが発生したため、このアプリケーションの実行は中断しました。
アプリケーションを続行できません。システムはシャットダウンされます。」

というダイアログを表示して、OKボタンを押すとアプリケーションが落ちてしまいます。

ランタイムではないACCESSでは問題なく動作するのですが、ランタイムでは何が違うのかわかりません。

動作環境
OS:WindowsXP
ACCESSランタイムは2003と2000 SR-1、ランタイムでないACCESSでも2003と2000 SR-1を試していますが、いずれの場合でもランタイムで上記の症状が発生し、ランタイムでない場合は発生しません。
Microsoft Jetは4.0にしてあります。

断片的なヒントでも結構です。また参考になるサイトでも結構ですのでご教示をお願いいたします。

Aベストアンサー

Accessの内部エラーが発生しているのですぐ落ちてしまう。
ランタイム条件によってフォームが実行される時に有効なコードが誤っているとか。(フォーム中のコードが削除したテーブルを開こうとしている。実行時のコードで誤ったロジックが含まれる。みたいな誤り)
エラーがコード内で発生しているがエラー処理を実装していないので落ちてしまうとか。

Qエクセル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

Aベストアンサー

thisworkbook.SaveCopyAs "C:\CopyTest2.xls"

QACCESS、VBAでEXCELファイルをコピーはできますか

ACCESS、VBAでEXCELファイルをコピーはできますか。
同じフォルダーにあるEXCELファイル:Aファイルを削除してA_BACKファイルをAファイルとしてコピーしたい。
宜しくお願いします。

Aベストアンサー

Excelファイルの複製でしたら、FileCopyを使用すれば可能だと思います:
http://www.tsware.jp/tips/tips_302.htm

ご質問の内容であれば、仮にcドライブ直下であれば以下のようになります:
FileCopy "c:\A_BACK.xls", "c:\A.xls"


なお、古いファイル「A.xls」を明示的に削除しなくても、上書きされます。
逆にいうと上書き時に確認Msgが出ないので、その確認もしたい場合は、
FileExistを使用してファイルの有無を確認するコードを作る必要があります。
http://www.tsware.jp/tips/tips_103.htm


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング