質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1044閲覧

大量のファイルを指定サイズ毎にまとめて分割するスクリプトエラー

rache130

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/01/23 09:02

編集2020/01/23 09:04

前提・実現したいこと

実行までは進みますがパスが見つからないとエラーメッセージが出ます。
デバックを見ると「lMax = .GetFolder(sTargetFolderPath).Files.Count」の部分に問題が有るようですが、VBAに関してコピペする程度の知識しかない為解決できません。

発生している問題・エラーメッセージ

実行時エラー'76': パスが見つかりません。

該当のソースコード

VBA

1 2 3Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 4 5'========================================================== 6' 画像を一定のサイズ毎にフォルダに振り分ける 7'========================================================== 8Public Sub partedFilesBySize() 9 Dim objFile As Object 10 Dim File_List As Variant 11 Dim lFileSize As Long 12 Dim lTotalSize As Long 13 Dim lLimitSize As Long 14 Dim sTargetFolderPath As String 15 Dim sSaveFolderPath As String 16 Dim sSavePath As String 17 Dim iFolderCnt As Integer 18 Dim sBuf As String 19 20 ' 実行結果の表示 21 Dim lCnt As Long 22 Dim lMax As Long 23 24 sTargetFolderPath = InputBox("振り分け元のフォルダパスを入力して下さい") 25 lLimitSize = InputBox("上限とするサイズを入力して下さい(単位:Mbyte)") * 1000000 26 27 If sTargetFolderPath <> "" And lLimitSize > 0 Then 28 MsgBox "処理を開始致します。" & vbCrLf & _ 29 "処理済みのデータはデスクトップ上に保存されます。" 30 31 sSaveFolderPath = createFolder(CreateObject("WScript.Shell").SpecialFolders.Item("Desktop") & "\processed_img") 32 iFolderCnt = 1 33 lCnt = 1 34 35 With CreateObject("Scripting.FileSystemObject") 36 lMax = .GetFolder(sTargetFolderPath).Files.Count 37 38 For Each objFile In .GetFolder(sTargetFolderPath).Files 39 Application.StatusBar = lCnt & " / " & lMax & " 件 処理済み" 40 sBuf = objFile.Name 41 ' ファイルサイズを取得 42 lFileSize = FileLen(sTargetFolderPath & "\" & sBuf) 43 44 45 ' 以下のいずれかの条件に一致する場合に保存先フォルダを作成する 46 ' 1 : lTotalSize(合計サイズ)の内容が0(ループ開始時)の場合 47 ' 2 : 合計サイズ + 次ファイルの容量が設定上限を超える場合 48 If lTotalSize = 0 Or (lTotalSize + lFileSize) > lLimitSize Then 49 50 sSavePath = createFolder(sSaveFolderPath & "\" & Format(iFolderCnt, "0000")) 51 lTotalSize = lFileSize 52 iFolderCnt = iFolderCnt + 1 53 54 Else 55 56 lTotalSize = lTotalSize + lFileSize 57 58 End If 59 60 ' ファイルコピー 61 FileCopy sTargetFolderPath & "\" & sBuf, sSavePath & "\" & sBuf 62 63 lCnt = lCnt + 1 64 DoEvents 65 Sleep 1 66 Next 67 End With 68 69 End If 70 71 MsgBox "サイズ振り分けが完了しました!" 72End Sub 73 74'========================================================== 75' フォルダ生成 76' 対象のフォルダが既に存在する場合は何もしない 77'========================================================== 78Public Function createFolder(path As String) As String 79 80 If Dir(path, vbDirectory) = "" Then 81 MkDir path 82 End If 83 84 createFolder = path 85End Function 86 87

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuskeccho

2020/01/25 08:09

コードが https://rabbitfoot.xyz/file-distribute/ ↑ここのソースをただコピペしただけのようですが、 ステップ実行はしてみたのでしょうか? >> デバックを見ると「lMax = .GetFolder(sTargetFolderPath).Files.Count」の部分に問題が有るようですが、 ここでエラーが発生したということですか?
guest

回答2

0

自己解決

自己解決しました。回答をくださった皆さんありがとうございます

投稿2020/01/25 09:39

rache130

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/01/25 14:00

どのように解決したかの報告をお願いします
guest

0

手元で試してみましたが、エラーにはなりませんでした。
メッセージどおりに、パスの指定が誤っているのではないでしょうか。

因みに指定するパスはフルパスでないと駄目だと思います。
※実行している場所からの相対パスでも良いですけど、面倒でしょうし。

投稿2020/01/23 09:23

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問