Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1120 / 13645 ツリー ←次へ | 前へ→

【76227】フォルダーからファイルをコピーする ペンネーム船長 14/10/18(土) 12:35 質問[未読]
【76228】Re:フォルダーからファイルをコピーする γ 14/10/18(土) 13:18 発言[未読]
【76229】Re:フォルダーからファイルをコピーする γ 14/10/18(土) 13:45 発言[未読]
【76230】Re:フォルダーからファイルをコピーする ペンネーム船長 14/10/18(土) 20:53 回答[未読]
【76231】Re:フォルダーからファイルをコピーする γ 14/10/18(土) 21:09 発言[未読]
【76232】Re:フォルダーからファイルをコピーする ペンネーム船長 14/10/18(土) 23:20 回答[未読]
【76233】Re:フォルダーからファイルをコピーする γ 14/10/18(土) 23:48 発言[未読]
【76234】Re:フォルダーからファイルをコピーする γ 14/10/19(日) 5:51 発言[未読]
【76236】Re:フォルダーからファイルをコピーする ペンネーム船長 14/10/19(日) 14:02 回答[未読]
【76237】Re:フォルダーからファイルをコピーする γ 14/10/19(日) 14:24 発言[未読]
【76238】Re:フォルダーからファイルをコピーする ペンネーム船長 14/10/19(日) 17:37 お礼[未読]

【76227】フォルダーからファイルをコピーする
質問  ペンネーム船長  - 14/10/18(土) 12:35 -

引用なし
パスワード
   以下のコードでエラーが出ます。
アドバイスをお願いします。

Private Sub CommandButton1_Click()
  Dim fso     As Object  'ファイルシステムオブジェクト
  Dim fileObj   As Object  'ファイルオブジェクト
  Dim K As Range
  
  Set K = Range("A2") ’管理番号
  'メインオブジェクトの生成
  Set fso = CreateObject("Scripting.FileSystemObject")
            
  'ファイルオブジェクト取得
  'Set fileObj = fso.GetFile("C:\Users\○●\Desktop\test元\*部品 K & *.xls") '←NGナゼ?
 
  'ファイルのコピー(上書き)
  fileObj.Copy "C:\Users\○●\Desktop\test先\"
  
  'オブジェクト変数のクリア
  Set fso = Nothing
  Set fileObj = Nothing

End Sub

注)部品とKとの間には半角スペースがあります
下記もNGでした
  Set fileObj = fso.GetFile("C:\Users\○●\Desktop\test元\ & * & "鉄骨" & " " & K & * & .xls")

【76228】Re:フォルダーからファイルをコピーする
発言  γ  - 14/10/18(土) 13:18 -

引用なし
パスワード
   それは、ワイルドカード指定を許さない仕様だからでしょう。
具体的ファイル名を指定する必要があります。

下記のいずれかの方法を使うことになるでしょう。
(1)Folderオブジェクト の Filesプロパティで全ファイルのコレクションを取得して、
  ファイル名を Likeを使って判別する
(2)Dir関数を使用。(ワイルドカード指定が可能です)

【76229】Re:フォルダーからファイルをコピーする
発言  γ  - 14/10/18(土) 13:45 -

引用なし
パスワード
   >下記のいずれかの方法を使うことになるでしょう。
二つ以外に無いと言っている訳じゃないです。さしあたりということです。
コマンドプロンプトでCopyコマンド使ってもいいわけです。
ワイルドカードが使えます。

【76230】Re:フォルダーからファイルをコピーする
回答  ペンネーム船長  - 14/10/18(土) 20:53 -

引用なし
パスワード
   下記もNGでした。
どこが間違っているのでしょうか。

Private Sub CommandButton1_Click()
  Dim fso     As Object  'ファイルシステムオブジェクト
  Dim strSrc   As String  'コピー元
  Dim strDst   As String  'コピー先
  Dim K As Range
          
  Set K = Range("A2")
  'メインオブジェクトの生成
  Set fso = CreateObject("Scripting.FileSystemObject")
          
  'コピー元ファイルパスの設定
  strSrc = "C:\Users\○●\Desktop\test元\*部品 K*.xls"
  
  'コピー先フォルダパスの設定
  strDst = "C:\Users\○●\Desktop\test先\"
          
  'ファイルのコピー(上書き)
  fso.CopyFile strSrc, strDst
          
  'オブジェクト変数のクリア
  Set fso = Nothing
End Sub

【76231】Re:フォルダーからファイルをコピーする
発言  γ  - 14/10/18(土) 21:09 -

引用なし
パスワード
   ▼ペンネーム船長 さん:
>下記もNGでした。
エラーになるなら、エラーメッセージを書いてください。
質問する際には、重要情報ですから、よろしくお願いします。

私の手元では成功します。
C:ドライブなのでセキュリティの関係があるのかも知れません。
D:ドライブでテストしてみては?

【76232】Re:フォルダーからファイルをコピーする
回答  ペンネーム船長  - 14/10/18(土) 23:20 -

引用なし
パスワード
   失礼しました。

 fso.CopyFile strSrc, strDst  のところがエラーになります(黄色になります)

「実行時エラー53 ファイルが見つかりません。」

です。

恐らく、  \*部品 K*.xls  が間違っているのではないかと思っていますがいかがでしょうか。

私のPCはソニーvaioなのですが、DドライブがDVDに割り当てられていて
Cドライブしか使えません。
 
Cドライブで試すしかないのです。・・・スミマセン・・・

【76233】Re:フォルダーからファイルをコピーする
発言  γ  - 14/10/18(土) 23:48 -

引用なし
パスワード
   ▼ペンネーム船長 さん:
> fso.CopyFile strSrc, strDst  のところがエラーになります(黄色になります)
>
>「実行時エラー53 ファイルが見つかりません。」
>
>恐らく、  \*部品 K*.xls  が間違っているのではないかと思っていますがいかがでしょうか。
いかがと言われても、私にはわかりません。
何も確認できる手段がありませんから。
ご自分で確認してください。

strSrc = "C:\Users\○●\Desktop\test元\*部品 K*.xls"
としたとき、
Debug.Print Dir(strSrc)
とすると、イミディエイトウインドウには何が表示されますか?
ワイルドカードとしても、それにマッチするファイルがなければ、
エラーになるのが正しい振る舞いです。

なお、ドライブの話は、
要は、システム情報を保護するためにセキュリティが
強化されている部分に書き込んでいないか、という話です。
そうでなければ問題ありません。

【76234】Re:フォルダーからファイルをコピーする
発言  γ  - 14/10/19(日) 5:51 -

引用なし
パスワード
   >strSrc = "C:\Users\○●\Desktop\test元\*部品 K*.xls"
>としたとき、
>Debug.Print Dir(strSrc)
>とすると、イミディエイトウインドウには何が表示されますか?
>ワイルドカードとしても、それにマッチするファイルがなければ、
>エラーになるのが正しい振る舞いです。
誤解を招く記述でした。
Dir関数は""を返します。
エラーになるのは、
  fso.CopyFile strSrc, strDst
です。

【76236】Re:フォルダーからファイルをコピーする
回答  ペンネーム船長  - 14/10/19(日) 14:02 -

引用なし
パスワード
   変数KをStringに設定し、下記のところを書き直すと、メッセージボックスでの確認では,test元にあるのエクセル名と一致したのですが,やはり、実行時エラー53 ファイルが見つかりませんとなります。後少しってところまで前進してるのでしょうか。                    
                    
Private Sub CommandButton1_Click()                    
  Dim fso     As Object  'ファイルシステムオブジェクト                    
  Dim strSrc   As String  'コピー元                    
  Dim strDst   As String  'コピー先                    
  Dim K As String                    
                                      
  K = Range("A2")                    
  'メインオブジェクトの生成                    
  Set fso = CreateObject("Scripting.FileSystemObject")                    
                                      
  'コピー元ファイルパスの設定                    
  strSrc = "C:\Users\○●\Desktop\test元\*部品 " & K & " *.xls" '←ここ  を書き直しました                    
  MsgBox strSrc                    
                              
  'コピー先フォルダパスの設定                    
  strDst = "C:\Users\○●\Desktop\test先\"                    
                                      
  'ファイルのコピー(上書き)                    
  'Debug.Print fso.CopyFile; strSrc, strDst ’←デバグプリントをやってみ  ましたが、引数の数が一致しませんと出ました。実行時エラー450                    
  fso.CopyFile strSrc, strDst                    
                                      
  'オブジェクト変数のクリア                    
  Set fso = Nothing                    
                    
End Sub

【76237】Re:フォルダーからファイルをコピーする
発言  γ  - 14/10/19(日) 14:24 -

引用なし
パスワード
   こんにちは。
私、変数Kにはまったく注目していませんでした。失礼。
""の中に変数があるなどとは想像できなかった。
fso.CopyFileを提言できなかったことを含め、忸怩たるものがあります。
回答者の資格にちょっと疑問符が付きますな。

さて、
(1)まずは変数を使わずに単なる文字列でファイル名(*を含む)を指定して、
  コピーができることを確認して下さい。
  そこが出発点です。
(2)そのあと変数を使って、ファイル名という文字列(*を含む)を構成することに
  トライして下さい。
(3)文字列の作成だけに限定して、
  別の簡単なプロシージャでトライしたほうがいいでしょう。
  気をつけるのはスペースの全角半角です。

やることは決まっているのですから、注意深く実行するだけです。
頑張ってください。

【76238】Re:フォルダーからファイルをコピーする
お礼  ペンネーム船長  - 14/10/19(日) 17:37 -

引用なし
パスワード
   γさん
実に基本ではありますが大切なご指摘有難う御座います。
(1)から(3)をやってみました。
意図した通りに動きましたー!!!
後から比較すると部品と”の間に半角スペースが2つ入っていたのが障害になっていたことが分りました。
こんなことにも多くの時間を費やしてしましました。
γさんにもおつきあいさせてしまって申し訳ありませんでした。
しかし、地道に確認する事の大切さを思い知った体験でした。
重ねてお礼申し上げます。

1120 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free