Excel VBA質問箱 IV

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

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


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

【76495】セルの値のファイル名のファイルを移動させたい RS 14/12/16(火) 20:53 質問[未読]
【76497】Re:セルの値のファイル名のファイルを移動... γ 14/12/16(火) 21:16 発言[未読]
【76498】Re:セルの値のファイル名のファイルを移動... RS 14/12/16(火) 22:15 発言[未読]
【76500】Re:セルの値のファイル名のファイルを移動... γ 14/12/17(水) 7:13 発言[未読]
【76501】Re:セルの値のファイル名のファイルを移動... RS 14/12/17(水) 8:49 発言[未読]
【76503】Re:セルの値のファイル名のファイルを移動... γ 14/12/17(水) 21:40 発言[未読]
【76506】Re:セルの値のファイル名のファイルを移動... RS 14/12/17(水) 22:15 回答[未読]

【76495】セルの値のファイル名のファイルを移動さ...
質問  RS  - 14/12/16(火) 20:53 -

引用なし
パスワード
   列方向のセルに列挙されたファイルパス名のファイルを移動させるマクロを作ろうと
しており、以下のコードを組んでみたのですが、ファイルは移動するのですがプロシージャの呼び出し、または引数が不正ですというエラーが出ます。
どのように改善したらよいでしょうか。

Sub ファイル移動マクロ()
   Dim objFileSys  As Object
   Dim strScriptPath As String
   Dim strMoveFrom  As Variant
   Dim strMoveTo   As String
   Dim Fn   As Variant  
   Target1 = "C:\Users\100221\Desktop\エクセルマクロ(VBA)\テストフォルダ\"
   Target2 = "C:\Users\100221\Desktop\エクセルマクロ(VBA)\バックアップフォルダ\"  
   Set objFileSys = CreateObject("Scripting.FileSystemObject")
   Set Fol = objFileSys.GetFolder(Target1)
   Set Fil = Fol.Files
  
   strScriptPath1 = (Target1)
   strScriptPath2 = (Target2)  
   For i = 6 To 200  
   Fn = Cells(i, 12).Value  
   strMoveFrom = objFileSys.BuildPath(Fn, "")
   strMoveTo = objFileSys.BuildPath(strScriptPath2, "")  
   objFileSys.MoveFile strMoveFrom, strMoveTo  
   Next
   MsgBox "ファイルをテストフォルダからバックアップフォルダに移動しました。"  
   Set objFileSys = Nothing
End Sub

【76497】Re:セルの値のファイル名のファイルを移...
発言  γ  - 14/12/16(火) 21:16 -

引用なし
パスワード
   こんにちは。
質問があります。
(Q1) Fil と、12列目のパス名との関係は?
(Q2) そのエラーが起きるのはどの行でしょうか。
   関連する変数名(Fnなど)はどのようなものですか?

【76498】Re:セルの値のファイル名のファイルを移...
発言  RS  - 14/12/16(火) 22:15 -

引用なし
パスワード
   回答が遅れまして失礼します。

Q1について
VBAについて理解不足で申し訳ないのですが、Filについては不要ではと考えています。
元のエクセルシートの特性上12列目の6行目以降に移動したいファイルパスを記入するようにしています。

Q2について
objFileSys.MoveFile strMoveFrom, strMoveToの行でエラーとなっているようで、
テストフォルダからバックアップフォルダにファイルが移動した後にエラーが起きています。
理解不足で曖昧な回答で申し訳ありません。
Fnには指定したセルの値(値はファイルのパス名)を列方向で6行目から200行目まで取得したいと考えています。

【76500】Re:セルの値のファイル名のファイルを移...
発言  γ  - 14/12/17(水) 7:13 -

引用なし
パスワード
   ▼RS さん:
>Q1について
>VBAについて理解不足で申し訳ないのですが、Filについては不要ではと考えています。
>元のエクセルシートの特性上12列目の6行目以降に移動したいファイルパスを記入するようにしています。

了解です。使っていないなら不要ですね。
(もし、特定のフォルダに入っているすべてのファイルということなら、
 むしろFilを使ったほうが正確だし、手間が省けるでしょう。)

>Q2について
>objFileSys.MoveFile strMoveFrom, strMoveToの行でエラーとなっているようで、
>テストフォルダからバックアップフォルダにファイルが移動した後にエラーが起きています。
>理解不足で曖昧な回答で申し訳ありません。
>Fnには指定したセルの値(値はファイルのパス名)を列方向で6行目から200行目まで取得したいと考えています。

200行目まですべて埋まっていますか?
200行というのは最大限の目安であって、入っていない行もあるということなら、
そこで、同様のエラーメッセージが出ますね。確認してください。

【76501】Re:セルの値のファイル名のファイルを移...
発言  RS  - 14/12/17(水) 8:49 -

引用なし
パスワード
   助言ありがとうございます。
確認したところ、6〜200行の間に空白のセルがありました。
セルを連続で参照する過程で、空白のセルの値を参照した時点で.Movefileのパスがエラーを返しているという理解でよいのでしょうか。

この空白のセルを無視して、200行目までセルの値を参照してそのパス名のファイルを移動させたいのですが、その場合はどのように考えたらよいのでしょうか。

【76503】Re:セルの値のファイル名のファイルを移...
発言  γ  - 14/12/17(水) 21:40 -

引用なし
パスワード
   こんばんは。

> 空白のセルの値を参照した時点で
> .Movefileのパスがエラーを返しているという理解でよいのでしょうか。

そうだと思いますよ。
ご自分で試してみたらどうでしょうか。

Sub test2()
  Dim Target2 As String
  Dim strMoveTo As String
  Dim strScriptPath2 As String
  Dim objFileSys As Object

  Set objFileSys = CreateObject("Scripting.FileSystemObject")
  strScriptPath2 = "C:\Users\100221\Desktop\ ・・以下略 ・・"

  strMoveTo = objFileSys.BuildPath(strScriptPath2, "")
  objFileSys.MoveFile "", strMoveTo
End Sub


> この空白のセルを無視して、200行目までセルの値を参照してそのパス名のファイルを
> 移動させたいのですが、その場合はどのように考えたらよいのでしょうか。

余り難しく考えないようにして下さい。
空白でない時だけ実行すればいいのですよね。
例えば以下のようにするといいでしょう。

  Fn = Cells(i, 12).Value
  If Fn <> "" Then
    strMoveFrom = objFileSys.BuildPath(Fn, "")
    strMoveTo = objFileSys.BuildPath(strScriptPath2, "")
    objFileSys.MoveFile strMoveFrom, strMoveTo
  End If

== 以上 ===

なお、細かい事ながら、意図がわからないところがあります。
(1)
> strScriptPath1 = (Target1) 
 変数を変える必要はありません。
(2) 
> strMoveFrom = objFileSys.BuildPath(Fn, "")
 普通は、フォルダ名に、ファイル名を連結するときなどに使います。 
 strMoveFrom = objFileSys.BuildPath(Fn, "")ならば、
 単に
 strMoveFrom = Fn
 で良いはずです。

なにかコードをつぎはぎしているので、本来の意図と離れたコードに
なっているようにお見受けします。頑張ってください。
 

【76506】Re:セルの値のファイル名のファイルを移...
回答  RS  - 14/12/17(水) 22:15 -

引用なし
パスワード
   γさん
ご回答ありがとうございます!
いただいた助言とコードを咀嚼して理解を進めながら組みなおしたいと思います。

おっしゃられているようにコードをツギハギしながら構築しているため
チグハグなコードになっていると存じます。当然のこととお叱りを受けそうですが、コードの本質を理解するように勤めたいと思います。

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