アクセス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エクセルマクロ(vba)のFSO.OpenTextFileを利用したファイルへの追記について

FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。
特定のファイルがあれば、FSO.OpenTextFileを使って追記します。

ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。
何が原因なのでしょうか?

以下がそのプログラムです。

アドバイスをよろしくお願いします。

Dim excel_folder

excel_folder = ThisWorkbook.Path
excel_folder = excel_folder & "\log.txt"

Set objShell = CreateObject("Wscript.Shell")

Dim FSO

Set FSO = CreateObject("Scripting.FileSystemObject")

Dim stream, data_text

If FSO.fileexists(excel_folder) Then
Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True)
Else:
Set stream = FSO.CreateTextFile(Filename:=excel_folder, Overwrite:=True)
End If

data_text = "test"

stream.writeLine (data_text)

stream.writeLine (vbCrLf)
stream.Close

FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。
特定のファイルがあれば、FSO.OpenTextFileを使って追記します。

ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。
何が原因なのでしょうか?

以下がそのプログラムです。

アドバイスをよろしくお願いします。

Dim excel_folder

excel_folder = T...続きを読む

Aベストアンサー

Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True)

Set stream = FSO.OpenTextFile(excel_folder, 8, True)
としてみたらどうでしょうか
この場合、ファイルが存在しない場合、新しくファイルを作るので、
ファイルの存在確認は必要ないような気がします。

Q実行時エラー '3464': 抽出条件でデータ型が

フォームにフィルタをかけようとすると
実行時エラー '3464': 抽出条件でデータ型が一致しません。

になります。

Private Sub Form_Load()
Me.Form.Filter = "フィールド1 =200"
Me.Form.FilterOn = True
End Sub

コードはこれです。
フィールド1はテキスト型です。
何がダメなのでしょう?

Aベストアンサー

Me.Form.Filter = "フィールド1 =200"

Me.Form.Filter = "フィールド1 ='200'"
に変更してください。
フィールドのデータ型によって
テキスト型→ ' で括る
日付/時刻型→ # で括る
数値型 → 何も括らない。
と合わせる必要があります。

QFSO.CopyFileでのエラー無視方法

コピー元フォルダにあるxlsファイルを全てコピー先のフォルダにコピーするVBAを作っています。
既にコピー先フォルダに同名のファイルがある場合は上書きせずスキップし、
コピー先フォルダに無いファイルだけコピーしたいのですが、

Sub test()
Dim FSO As Object
Dim md As String

Set FSO = CreateObject("Scripting.FileSystemObject")
Set md = Format (Date, "MMDD")

FSO.CopyFile "C:\コピー元\*.xls", "C:\コピー先\"& md ,False

Set FSO = Nothing
End Sub

FSO.CopyFileをFalseにするとコピー先に同名のファイルがある場合に
エラーで止まってしまいます。
このエラーを無視してコピーを続ける方法はありますでしょうか。

今回は確認ダイアログなど一切出さずに処理する方法が知りたいのですが、
今後の為に同名のファイルがあれば上書き確認ダイアログを出し、
処理を分岐させる方法もありましたらヒントだけでも教えて頂けると嬉しいです。

作成はExcel2010ですが、Excel2002でも動作するように作りたいです。
よろしくお願いいたします。

コピー元フォルダにあるxlsファイルを全てコピー先のフォルダにコピーするVBAを作っています。
既にコピー先フォルダに同名のファイルがある場合は上書きせずスキップし、
コピー先フォルダに無いファイルだけコピーしたいのですが、

Sub test()
Dim FSO As Object
Dim md As String

Set FSO = CreateObject("Scripting.FileSystemObject")
Set md = Format (Date, "MMDD")

FSO.CopyFile "C:\コピー元\*.xls", "C:\コピー先\"& md ,False

Set FSO = Nothing
End Sub

FSO.CopyFileをFalseにするとコピー先に同...続きを読む

Aベストアンサー

#1です。ループを回していないのですね、失礼しました。
On error resume nextで通用するのは、ファイル毎にループ処理してコピーしているケースです。
ファイル毎にループを回し、既存かどうかの問い合わせをして処理する一例です。
ご参考まで。

Sub test()
Dim FSO As Object, targetFolder As Object, targetFile As Object
Dim folderName As String, destFilePath As String, answer As String

folderName = "C:\コピー元\"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set targetFolder = FSO.getfolder(folderName)
For Each targetFile In targetFolder.Files
'拡張子判別のところは必要によりアレンジして下さい
If UCase(FSO.GetExtensionName(targetFile)) = "XLS" Then
destFilePath = "C:\コピー先\" & Format(Date, "MMDD") & "\" & targetFile.Name
If FSO.FileExists(destFilePath) Then
'既存なら問い合わせせずにパスする場合は、Thenの時の処理をコメントアウトして下さい。
answer = MsgBox(targetFile.Name & " がCopy先に存在します。上書きしますか?", vbYesNo)
If answer = vbYes Then FSO.CopyFile targetFile, destFilePath, True
Else
FSO.CopyFile targetFile, destFilePath, False
End If
End If
Next targetFile
Set FSO = Nothing
End Sub

#1です。ループを回していないのですね、失礼しました。
On error resume nextで通用するのは、ファイル毎にループ処理してコピーしているケースです。
ファイル毎にループを回し、既存かどうかの問い合わせをして処理する一例です。
ご参考まで。

Sub test()
Dim FSO As Object, targetFolder As Object, targetFile As Object
Dim folderName As String, destFilePath As String, answer As String

folderName = "C:\コピー元\"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set targetFolder = FSO...続きを読む

Q実行時エラー'-2147467259(80004005)':

エクセルからADOでアクセスに繋ごうとしたときに
実行時エラー'-2147467259(80004005)':
マシン'マシン名'のユーザー'Admin'がデータベースを開けない状態、またはロックできない状態にしています。

というエラーが出てしまいます。

書いているコードは以下です。

Public cn As ADOdb.Connection
Set cn = New ADOdb.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"



test.mdb自体はテーブルもクエリもフォームも何も開いていない状態です。
一度アクセスを終了させて再起動させればうまくできるのですが、何が原因でこのメッセージが出るのでしょうか?
もしわかれば教えてください。
よろしくお願いします。

Aベストアンサー

Accessで、test.mdbを開いた状態(テーブルも、クエリも、フォームも何も開かない状態)で、ExcelからADOで接続しようとすると、
「-2147467259"は既に使用されているので、使用できませんでした。」
というエラーが再現されました。(当方Office2000Pro)
そういうものなのでしょう。
何をなさりたいのですか?
AccessからExcelを起動して、データの移し替えをしたり、レポート代わりに印刷させたりという方法ではダメなのでしょうか?
何をしたいかという、切り口で質問をされてはいかがですか。

QVBA FSOを使用したファイル/フォルダリスト生成のプログラム記述

●背景
従来ファイル/フォルダリスト生成に関してはDirを使用していましたが、レベルアップのためにFileSystemObject(以下FSO)を使用してと考え、ネット上のいろいろな資料で「変数なの?コードなの?コレクション??・・・」等々悩み、自分なりにFSO生成/参照/変数設定/値取得・・・のコメントを追加し下記にてなんとか実行可能になりました(一先ずMsgBox表示までリスト化分はこれからです)。
ファイル/フォルダリスト生成の標準にしたく下記質問となりました。

Sub try_fso()
'---FSO定義
Dim fso As Object
'---FSO参照結果格納変数定義
Dim folderObj As Object
Dim fileObj As Object
Dim subfObj As Object
'---対象保存先
対象保存先 = Range("B6")
'----FSO生成と参照変数コレクション格納
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObj = fso.getFolder(対象保存先)
'----ファイル名参照結果取得
For Each fileObj In folderObj.Files
MsgBox fileObj.Name
Next
'----サブフォルダ名参照結果取得
For Each subfObj In folderObj.Subfolders
MsgBox subfObj.Name
Next
End Sub
'----B6=Y:\LogData\TRY

■質問/お願い
 FSOの全体理解がまだ出来ていません。
 上記プログラム記述で「変数定義」「コメント」「コード」等々で何かおかしい所
 修正すべき所等々・・・アドバイスをお願いします。

●背景
従来ファイル/フォルダリスト生成に関してはDirを使用していましたが、レベルアップのためにFileSystemObject(以下FSO)を使用してと考え、ネット上のいろいろな資料で「変数なの?コードなの?コレクション??・・・」等々悩み、自分なりにFSO生成/参照/変数設定/値取得・・・のコメントを追加し下記にてなんとか実行可能になりました(一先ずMsgBox表示までリスト化分はこれからです)。
ファイル/フォルダリスト生成の標準にしたく下記質問となりました。

Sub try_fso()
'---FSO定義
Dim fs...続きを読む

Aベストアンサー

返事、ありがとうございました。
お話の様子では、失礼ですが、相当、年齢の上の方にお見受けしました。
何か、気づかずに失礼な発言がありましたら、申し訳ありません。

>(自分はVBAから外には出ない/出られない/と思います。)
この意味がわかりました。でも、まだ、明日があると思うのでしたら、少しでも、新しいものを探し求めていくのは、楽しいことだと思います。

私のPCの師匠の一人(ひとりしかいないけれども)、定年で仕事を辞めてから、PCインストラクターとなったわけですが、今は、70過ぎなのに、元気な上に、なぜ、そんなにそんな仕事があるのか、OSが、アップグレードするたびに講演しています。

コンピュータの経歴なんていうものは、お話を聞いていれば大方は分かるものです。ただ、そういうことをするのが好きな人と、単に「やる・やらされていた」という人とでは、ずいぶん違いがあるものです。この前、どこかの質問で、老眼だから、打ち間違えるとか言っていた人がいますが、そんなことは絶対にありえません。年齢や身体の衰えを理由にするなんて、恥ずかしいことです。

ところで、いまさらですが、元の質問の解決には、本当は至っていないのではないでしょうか。以下は、本日、手探りにも近いですが、作ってみました。ルートからなんというのは、保証出来かねますが、自力でやってみました。

#3の回答は中途だったので、今度は、FileSystemObjectで作ってみました。結局、これは必ずできるのものなのだ、という気持ちがないと作れるものではないのですね。

今気がついたけれども、プロシージャ名が、getFolderというのはヘンでした。
-------------------

Private Const TARGETFOLDER As String = "D:\ExcelFol\MacroTest\"
Dim x As Long
Dim y As Long

Sub getFolder()
 Dim objFS As Object, objFolder As Object
 Dim dest As String
 '万が一にも別のブックに書き込まないような回避策
 ThisWorkbook.Activate
 If WorksheetFunction.CountA(ActiveSheet.UsedRange) > 0 Then
  If MsgBox("データを削除します。", vbInformation + vbOKCancel) = vbCancel Then
   Exit Sub
  Else
   ActiveSheet.UsedRange.ClearContents
  End If
 End If
 Set objFS = CreateObject("Scripting.FileSystemObject")
 ' 構造表示
 x = 1: y = 1
 If Right$(TARGETFOLDER, 1) <> "\" Then
  MsgBox "TARGETFOLDERの末尾に、¥を付けてください", vbExclamation: Exit Sub
 End If
 Cells(x, y).Value = TARGETFOLDER
 x = x + 1: y = 1
 Set objFolder = objFS.getFolder(TARGETFOLDER)
 Call ShowFolder(y, objFolder)
End Sub

Sub ShowFolder(ByVal header As Long, ByVal objFolder)
 Dim objSubs As Object, oSb
 Dim i As Long
 Dim eaFiles As Object
 Set objSubs = objFolder.Subfolders
 i = 1: y = i
 For Each oSb In objSubs
  If i = objSubs.Count Then
   ' 最後のサブフォルダの場合
   Cells(x, header + y).Value = oSb.Name
   Set eaFiles = oSb.Files
   Call ShowFiles(header + y, eaFiles)
   x = x + 1
   Call ShowFolder(header + y, oSb)
  Else
   ' 最後「以外」のサブフォルダの場合
   Cells(x, header + y).Value = oSb.Name
   x = x + 1
   Set eaFiles = oSb.Files
   Call ShowFiles(header + y, eaFiles)
   
   Call ShowFolder(header + y, oSb)
  End If
  i = i + 1
 Next
End Sub
Sub ShowFiles(header, ByRef eaFiles)
 Dim ea
 For Each ea In eaFiles
  Cells(x, header + 1).Value = Dir(ea.Path)
  x = x + 1
 Next
End Sub

返事、ありがとうございました。
お話の様子では、失礼ですが、相当、年齢の上の方にお見受けしました。
何か、気づかずに失礼な発言がありましたら、申し訳ありません。

>(自分はVBAから外には出ない/出られない/と思います。)
この意味がわかりました。でも、まだ、明日があると思うのでしたら、少しでも、新しいものを探し求めていくのは、楽しいことだと思います。

私のPCの師匠の一人(ひとりしかいないけれども)、定年で仕事を辞めてから、PCインストラクターとなったわけですが、今は、70過ぎなのに...続きを読む

QVBAの実行時エラー'2522'について

前任者がAccess2003により作成したデータベースがあります。
CSVデータを取り込む仕組みがあるのですが、下記のエラーが出て困っています。

実行時エラー '2522':
このアクションまたはメソッドを実行するには[File Name/ファイル名]引数が必要です。

どうやらVBAによるエラーだと判明しましたが、それ以上はよくわかりません。
以下のような構文になっています。

Option Compare Database
----------
Private Sub CSV取込_Click()
TextConv strFileName, "マスター定義", "T_マスター"
End Sub
----------
Sub TextConv(strFle, strInp, strTbl)
Dim strSQL As String
strSQL = "DELETE * FROM " & strTbl
If MsgBox("テーブルデータを更新しますか?", 4, "テーブル更新") = vbYes Then
CurrentProject.Connection.Execute strSQL
DoCmd.TransferText acImportDelim, strInp, strTbl, strFle, True
MsgBox "テーブルデータを更新しました"
End If
End Sub
----------
Private Sub 参照_Click()
Dim strFileName As String
strFileName = GetFileName()
If Len(strFileName) > 0 Then
Me.filepath = strFileName
Else
MsgBox "取込対象ファイルを選択してください! "
End If
End Sub

以上のようになっています。
デバッグを実行すると「strFle」の値がEmptyになっているのでここだとは思うのですが、どうしたらよいかわかりません。
どなたかお知恵をお貸し願えませんでしょうか。
宜しくお願いします。

前任者がAccess2003により作成したデータベースがあります。
CSVデータを取り込む仕組みがあるのですが、下記のエラーが出て困っています。

実行時エラー '2522':
このアクションまたはメソッドを実行するには[File Name/ファイル名]引数が必要です。

どうやらVBAによるエラーだと判明しましたが、それ以上はよくわかりません。
以下のような構文になっています。

Option Compare Database
----------
Private Sub CSV取込_Click()
TextConv strFileName, "マスター定義", "T_マスター"
End ...続きを読む

Aベストアンサー

Private Sub CSV取込_Click()
  TextConv Me.filepath "マスター定義", "T_マスター"
End Sub
でしょうか?

> Option Compare Database
の次に
Option Explicit
を追加すると、このようなエラーは発見しやすくなります。

VBEの画面で
[ツール] - [オプション] - [編集]タブで
「変数の宣言を強制する」にチェックを入れると
新しく作成するモジュールでは
自動で「Option Explicit」が挿入されるようになります。

QこのコードはFSOを使ってるのでしょうか?

Sub フォルダ作成()
MkDir "C:\新しいフォルダ"
End Sub

で、フォルダが作成されますが、
上記のコードは省略されてるだけで
FileSystemObjectオブジェクトは使われていますか?

フォルダの操作は、FSOじゃないとできないと思っていましたが
上記のコードを見る限りFSOを使わなくても出来てるような気がして
混乱しています。

ご回答よろしくお願いします。

Aベストアンサー

いいえ。MkDirはFileSystemObjectのメンバではありません。

FSOは、CreateObjectでロードしてしまう場合が多いですが、VBAの参照設定で「Microsoft Scripting Runtime」にチェックを入れると実装されます。scrrun.dllのライブラリに含まれています。

一方MkDirなどはVBAのライブラリ(VBE6.DLL)に含まれています。VBAの標準のステートメントです。

QWord起動時のエラー「実行時エラー'5'」

実家のPCのエラーのご相談です。
あと1時間ほどで帰宅するのでその前にアドバイスをいただけると、、、

◆トラブル内容:

ワードを立ち上げようとすると
Microsoft Visual Basicのエラー表示がでます。
このエラーが出ないようにしたいのですが、
方法がわからず、お力添えをお願いします。

◆エラー内容:

実行時エラー'5':
プロシージャの呼び出し、または引数が不正です。

終了およびヘルプボタンのみ有効です。
ヘルプボタンを押すとヘルプの該当項目が表示されます。


◆ヘルプの内容:

プロシージャの呼び出し、または引数が不正です。(Error 5)
呼び出しの一部が完成できません。エラーの原因と対処方法を次に示します。

引数が許容値の範囲を超えている可能性があります。たとえば、Sin 関数で扱える値の範囲は決まっています。2,147,483,648 未満の値は有効ですが、2,147,483,648 ではエラーになります。
引数に指定できる値の範囲を確認します。

現在のプラットフォームで無効のプロシージャを呼び出そうとするときにも、このエラーが発生します。たとえば、Microsoft Windows または Macintosh のみで使用できるプロシージャなどがあります。
プロシージャについてのプラットフォーム固有の情報を確認します。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。

                          以上コピペ終わり


マクロで見たことのあるエラー表示ですが、エクセルマクロでは
デバッグで凌いだり、不要なマクロはモジュールの解放等と、多少の
対処法を学んだのですが、ワードマクロはまったく未経験でヘルプの内容も
理解出来ません。

親孝行の真似事でも出来れば、と質問致しました。
御力添えをお願いします。

実家のPCのエラーのご相談です。
あと1時間ほどで帰宅するのでその前にアドバイスをいただけると、、、

◆トラブル内容:

ワードを立ち上げようとすると
Microsoft Visual Basicのエラー表示がでます。
このエラーが出ないようにしたいのですが、
方法がわからず、お力添えをお願いします。

◆エラー内容:

実行時エラー'5':
プロシージャの呼び出し、または引数が不正です。

終了およびヘルプボタンのみ有効です。
ヘルプボタンを押すとヘルプの該当項目が表示されます。


◆ヘルプ...続きを読む

Aベストアンサー

これ・・・でしょうか?
http://support.microsoft.com/kb/267572/ja

QFSOを使わずに…

JavaScriptってActiveXコントロールで
FSO使わないでテキストファイル読み込む
ことって可能なんでしょうか?

…自分の疑問じゃないから、
これ以上の情報は無いのですけど、
ヨロシクお願いしまーす!m(_ _)m

Aベストアンサー

WebブラウザのClient-side JavaScriptだけでは、多分無理。
LiveWireを使って、Java Appletと連動させれば可能かも。

Q実行時エラー'424' オブジェクトが必要です???

いつもお世話になっております。
プロシージャに下記のように記入しましたところ、
表題の「実行時エラー'424' オブジェクトが必要です」と出てしまいます。小生独学の初心者です。よろしくご指南ください。

前略~
Dim sh1 As Worksheet
Set sh1 = Active.Worksheet
~後略

Aベストアンサー

[Active.Worksheet]とは書きません。

Set sh1 = ActiveSheet


人気Q&Aランキング

おすすめ情報