フォルダから不特定のファイル名「FoundFiles(i)」を取得してそのブックを開きます。セルA1が空の場合は、開いた場所と異なるフォルダにそのブックを保存させたいと、なんとか、かんとか作ってみたのですが、保存したファイル名がFoundFiles(i).csvになってしまいます。
もともとcsvを読み込んでいるので、拡張子はcsvで良いのですが、その開いたブック名を取得する方法を教えてください。
いろいろ考えて、変えては見たのですがうまくいきません。
使用しているオフィスはExcel2000です。宜しくお願いします。
↓前後は省略していますが、こんな感じです。
Workbooks.Open Filename:=.FoundFiles(i)
Select Case ThisWorkbooks
Case Range("A1") = ""
ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\デスクトップ\空\FoundFiles(i)"
No.4ベストアンサー
- 回答日時:
#2です。
.FoundFiles(i) からファイル名を取り出すなら DIR関数でも良いかと思います。
ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\デスクトップ\空\" & Dir(.FoundFiles(i))
ちなみに FileSearch は問題ありありでOSが変わった時とかに結構苦労しました。
http://support.microsoft.com/kb/259738/ja
http://support.microsoft.com/kb/305342/ja
http://support.microsoft.com/kb/920229/ja
No.5
- 回答日時:
補足の補足みたくなりますが
Dir関数にも実は困ったバグがあります
http://officetanaka.net/excel/vba/tips/tips69.htm
で、確実なのは、Scripting.FileSystemObjectを使って自作するのが確実です
後はFor Eachで、そのFilesをぐるぐるまわして行けば、ファイル名でも拡張子でも、好きに調べられます
あと、他の方からも指摘がありましたがタイプミスがあるようですね
VBEで ツール→オプション→編集のタブ 宣言を強要するにチェック
今作っているマクロにはモジュールの一番上に Option Explicit
と書いて、一度コンパイルしてみてください
コンパイルは デバッグ→一番上です
Dir関数のこと、色々教えてくださりありがとうございました。Scripting.FileSystemObjectを使ったやり方は今後の課題とさせていただきます。(正直・・・使い方がわからないのでこれから勉強していきます。)
No.3
- 回答日時:
No2の回答にもあるように提示のコードは質問の件云々以前の問題もあるように思えますが
それなりに動作しているということは、たぶんタイプミスなのでしょう。
で、本題。
原因は.FoundFiles(i)にはファイル名だけではなく、パス名も入っているからです。
ですから別フォルダーに保存したいときは、その中からファイル名だけ取り出す必要があります。
ファイル名取り出しの部分だけかくと以下のようになります。
'------使用変数--------------------------------
Dim myFullPath As String
Dim myFileName As String
Dim S As String
'--------- ファイル名取り出し ----------------
myFullPath = .FoundFiles(i)
S = StrReverse(myFullPath)
myFileName = Right(myFullPath, InStr(S, "\") - 1)
'----------------------------------------------------
取り出したあと、
ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\デスクトップ\空\" & myFileName
とすればいいわけです。
.FoundFiles(i) には必ず、”.”を付加すること
老婆心ながら一言。
寄せられた回答をサクサクと修正できるスキルがある場合は別として、
そうでない場合は、前後を省略することなくそこら辺りのコードをある程度は提示した方がいいと思いますよ。
なぜなら、提示の部分ではなくその省略した部分に原因があるかも知れないからです。
以上。
No.2
- 回答日時:
省略されていて良く解りませんけど、保存する際のファイル名以外は正常に動いているのでしょうか?
Select Case ThisWorkbooks
Case Range("A1") = ""
ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\デスクトップ\空\FoundFiles(i)"
この Case を正常に抜けて保存されているならば不思議です。
ThisWorkbook(s)←なんてありませんし、、、
Select Case ActiveWorkbook.Worksheets(1).Range("A1").Value
Case ""
ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\デスクトップ\空\FoundFiles(i)"
ならまだ納得も出来ますけど。
---
こういったケースは Open 時に変数に入れてやるとアクティブか否かに関係なく操作できるので便利です。
あと、FileSearch は難ありで個人的に苦労しましたので DIR を使ったサンプルを載せておきます。
エラー処理はしてません。(指定した移動先フォルダが無いなど)
Sub Test()
Dim fName As String, cfName As String
Dim wb As Workbook, flg As Boolean
fName = Dir("C:\Work\*.csv")
Do While fName <> ""
fName = "C:\Work\" & fName '移動元のフルパス
Set wb = Workbooks.Open(fName)
cfName = "C:\空\" & wb.Name '移動先のフルパス
flg = (wb.Worksheets(1).Range("A1").Value = "")
wb.Close
If flg Then Name fName As cfName
fName = Dir()
Loop
End Sub
保存する際のファイル名以外は正常に動いているのでしょうか?
→今の環境では正常に動いていますが・・・・
DIR を使ったサンプルありがとうございました。
こちらのやり方で作り直してみます。
FileSearch を使ったやり方は問題が多いと皆様から教えていただき本当に勉強になりました。
今まで簡単なものしかつくっていなかったので、今回は大苦戦でした。
まだまだ問題山積ですがあちこち調べながらつくって行きたいとおもいます。
本当にありがとうございました。
No.1
- 回答日時:
>ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\デスクトップ\空\FoundFiles(i)"
変数名を "" で囲ってしまえば文字列ですから、実行結果は正常です。
ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\デスクトップ\空\" & FoundFiles(i)
この回答への補足
\" & FoundFiles(i)として、試して見ましたが、subまたはファンクションが定義されていませんと出てしまいます。
\" & .FoundFiles(i)とするとフォルダが存在しません。のようなメッセージが出てしまいます。
どうしたら良いものでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
VBA★PDFをPDFアプリで印刷し...
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルVBAで一つ上の階層...
-
C++でネットワークパスのファイ...
-
outlook開けない
-
【VB.NET】App.configにファイ...
-
VBS パスに変数を入れたい
-
エクセルのマクロで特定フォル...
-
ExcelのVBAで上書き保存を確...
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
VBAでの共有パスにつきまして
-
アプリケーションのインストー...
-
xcopyコマンドの進行状況を表示...
-
Excel2010VBAでエラーが出る相...
-
Excel VBAでテキストファイルを...
-
VBAでファイル名の取得方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
エクセルのマクロで特定フォル...
-
エクセルVBAで一つ上の階層...
-
VBA★PDFをPDFアプリで印刷し...
-
開いているファイルを削除し、...
-
ExcelVBAの使い方 ¥の使い方...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
コマンドプロンプトのコピー関...
-
C#でのProcess.Startと変数path
-
ExcelのVBAで上書き保存を確...
-
実行ファイルのパスを取得したい
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
VBAで、VBのapp.pathと同じ機能...
-
【Excel VBA】Power Qurry のソ...
おすすめ情報