
フォルダ内にあるファイル(xlsx)を1つのファイルごとに分類したいため、
そのファイル名と同名のフォルダを元のフォルダ内に新たに作成し、そこに保存したいという
下記のマクロを見つけて動かしてみたのですが、
FileCopy FPath & "\" & TargetFile, FPath & "\" & DName & "\" & TargetFile
の箇所でファイルが存在しないと出ました。
色々と調べた結果、サーバーの中にあるファイルを作ろうとしているのですが
サーバーの階層が深く取得するパス名が300文字になっていたので
Dir関数だとエラーになることが判明し、対策として
ショートパスへ変換する方法やFSOを使って行えば解決するという所までは
調べたのですが、上手くいきません。
分かる方がいればアドバイスを頂ければと思い質問をさせて頂きました。
宜しくお願い致します。
Sub フォルダ作成()
Dim FPath, TargetFile, DName
FPath = Range("A1").Value
'セルのA1にサーバーのパスを記載しています
\\TEST\TESTファイル\管理項目\管理簿\各担当部署\確認事項\
上記の記載は例ですが本来の記載はかなり長く、260文字くらいあります。
If FPath = "" Then Exit Sub
TargetFile = Dir$(FPath & "\*.xlsx")
Do While TargetFile <> ""
DName = Left(TargetFile, InStrRev(TargetFile, ".") - 1)
MkDir FPath & "\" & DName
ファイル名と同名のフォルダをサーバーに作成するのは成功しています。
FileCopy FPath & "\" & TargetFile, FPath & "\" & DName _
& "\" & TargetFile
上記の部分でエラーが出ており、パス名が長いためエラーになっています。
Kill FPath & "\" & TargetFile
TargetFile = Dir$
Loop
End Sub
Dim fso As New FileSystemObject
ファイルオブジェクトを使い、ショートパスにすればという
所までは調べたのですが、そこからどう繋げていいか不明なので
お手数ですがご教授願えないでしょうか?
No.1ベストアンサー
- 回答日時:
このご質問の回答としては、私は、以下のコードを提示しますが、何か別の方法があったような気がしてなりません。
Function shortName(ByVal FileName As String)
'ショートネイム用のユーザー定義関数
Dim objFS As Object
Dim objFile As Object
Set objFS = CreateObject("Scripting.FileSystemObject")
If Right(FileName, 1) <> "\" Then 'フォルダーとファイルの区分け
Set objFile = objFS.GetFile(FileName)
Else
Set objFile = objFS.GetFolder(FileName)
End If
shortName = objFile.shortPath
End Function
使用例:
Sub TestLongFileName()
Dim fn As String
Dim dst As String
fn = "---long Name file ----"
fn = shortName(fn)
If Dir(fn) = "" Then
MsgBox "ファイルが見つかりません", vbCritical
Exit Sub
End If
dst = ""---long Name Path ----"" '末尾に¥を入れないとエラーが出ます。
dst = shortName(dst)
FileCopy fn, dst
' ' Shell ("cmd.exe /c Copy " & fn & " " & dst)
End Sub
返答ありがとうございます。
元のマクロと組み込んでショートネイム用のユーザー定義関数を使い
ファイルのパスを取得することは出来ました。
細かい所の調整は行って色々と試したいと思います。
アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAとロングファイル名
その他(プログラミング・Web制作)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
-
4
ショートファイルネーム→ロングファイルネームへの変換
Visual Basic(VBA)
-
5
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
6
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
7
ExcelでVBAを使用した際に、『パス名が無効です』とエラーになります。
Excel(エクセル)
-
8
エクセルでエラーが出て困っています。
Excel(エクセル)
-
9
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
10
「パス名が無効です」の発生原因
Visual Basic(VBA)
-
11
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
12
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
13
【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在
Excel(エクセル)
-
14
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
15
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VLOOKUP FALSEのこと
-
if関数の複数条件について
-
同じ名前(重複)かつ 日本 ア...
-
excel
-
【マクロ】数式を入力したい。...
-
表計算ソフトでの様式の呼称
-
空白のはずがSUBTOTAL関数でカ...
-
【関数】=EXACT(a1,b1) a1とb1...
-
【マクロ画像あり】❶1つの条件...
-
エクセルの文字数列関数と競馬...
-
【画像あり】【関数】指定した...
-
エクセルでフィルターした値を...
-
エクセルに写真が貼れない(フ...
-
エクセルのライセンスが分かり...
-
【関数】3つのセルの中で最新...
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
【マクロ】【画像あり】❶ブック...
-
【マクロ】既存ファイルの名前...
-
【マクロ】【画像あり】4つの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Access エラー 3051
-
エクセルVBA フォームを開く時...
-
【Excel VBA】PDFを作成して,...
-
OCXのライセンス
-
VBAでFTPファイル転送がうまく...
-
FFFTPでサーバに新規フォルダが...
-
VBAでファイルパスが長すぎてコ...
-
ブラウザでASPファイルを開こう...
-
ASPのファイルを他のサーバにコ...
-
Refreshで落ちる
-
【python】pandasでExcel(...
-
フォルダ参照ではなくファイル...
-
Cソースにホスト変数を宣言した...
-
グーグルドライブからコピーし...
-
共有ファイルにあるマクロの同...
-
web.configファイル内、valueに...
-
マクロ教えてください。
-
OpenOfficeの書式エラーの質問...
-
VBSで指定したフォルダにファイ...
-
BitBlt関数について
おすすめ情報