
フォルダ内にあるファイル(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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/03 16:07
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAとロングファイル名
その他(プログラミング・Web制作)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
-
4
ショートファイルネーム→ロングファイルネームへの変換
Visual Basic(VBA)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
7
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
8
EXcelのマクロで相対パスでファイルを開く
その他(Microsoft Office)
-
9
エクセルVBAでショートカットリンクの変更をするには
PowerPoint(パワーポイント)
-
10
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
11
VBA で、スペースを含むファイル名をコピーしたい。
Excel(エクセル)
-
12
ExcelでVBAを使用した際に、『パス名が無効です』とエラーになります。
Excel(エクセル)
-
13
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
-
14
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
15
文字列内で括弧を使うには
Visual Basic(VBA)
-
16
エクセルでエラーが出て困っています。
Excel(エクセル)
-
17
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
18
Excelの入力規則で2列表示したい
Excel(エクセル)
-
19
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
20
<EXCEL> セルが非表示になったらチェックボックスも非表示にする方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Adobe Reader について
-
VBAでファイルパスが長すぎてコ...
-
SDカード(16GB)に保存した動画...
-
破損したファイルの復元方法
-
ASP.NETで、別サーバーへファイ...
-
Refreshで落ちる
-
BASP21のアップロードについて
-
複数のテキストファイルをexcel...
-
Excelでdatファイルを作成??
-
Excelでのデータ挿入が上手くで...
-
Eclipseについて教えてください。
-
イラストレーターの保存先変更...
-
CDをSDカードに保存する方法を...
-
カノンロックのTAB譜
-
カスタムコントロールのOCAファ...
-
テキストファイルを開かずに中...
-
FTPで、フォルダコピー
-
Sculptris Alpha 6
-
Matlabでの図の最大化の方法
-
複数のファイルを同時検索し、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Access エラー 3051
-
【Excel VBA】PDFを作成して,...
-
VBAでファイルパスが長すぎてコ...
-
FFFTPでサーバに新規フォルダが...
-
Refreshで落ちる
-
ExcelVBAで、隠しフォルダにあ...
-
VBSで指定したフォルダにファイ...
-
エクセルVBA フォームを開く時...
-
ASP.NETで、別サーバーへファイ...
-
Excel VBA シートを指定して...
-
OCXのライセンス
-
VBAでFTPファイル転送がうまく...
-
ASP上でFileSystemObjectのDele...
-
ADODB.Recordsetを使用してExce...
-
EXCEL VBA ファイルが開かれて...
-
vba エクセルダウンロードファ...
-
BASP21のアップロードについて
-
BitBlt関数について
-
VB2005 で encoding="Shift_JIS...
-
XMLDOMのsaveメソッドのエラー
おすすめ情報