トップ回答者
フォルダのパス取得と、フォルダ内のファイルに対する一括処理について

質問
-
ダイアログで選択したフォルダのパスが取得できなくて困っています。ステップインで見てみると、If.Showの文でダイアログを選択すると、「オブジェクト変数またはwithブロック変数が設定されていません」と出ます。オブジェクトは指定されていると思うのですがどうしてこのようなエラーが出るのでしょうか?以前はここまでできていました‥
また、with Create以下の文を行うと、コードが書いてあるシートに処理がなされてしまい、目的のブックのシートに処理がなされないです。どう書き直せば良いでしょうか?
よろしくお願いします。
以下コードになります。
Sub 一括処理()
Dim bkWork As Workbook '作業用ワークブック
Dim bkSrc As Workbook 'コピー元ワークブック
Dim folderPath As String '処理対象のフォルダパス
Dim itm As Object
'Excelファイルが保存されているフォルダを選択
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False '複数選択しない
.Title = "Excelファイルが保存されているフォルダを選択"
If .Show = True Then
folderPath = .SelectedItems(1) '選択したフォルダのパスを変数に格納
Else
Exit Sub 'フォルダが選択されなかった場合は処理終了
End If
End With
'ファイルの処理にFileSystemObjectオブジェクトを利用
With CreateObject("Scripting.FileSystemObject")
'指定したフォルダ内のファイルを順番に処理
For Each item In .GetFolder(folderPath).Files
'処理対象となるファイルの拡張子を指定
Select Case LCase(.GetExtensionName(itm.Path))
Case "xls", "xlsx", "xlsm", "csv"
With Workbooks.Open(folderPath)
Call test
Application.DisplayAlerts = False '上書き保存して閉じる
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
End With
End Select
Next
End With
MsgBox "処理が終了しました", vbInformation
End Sub
回答
-
こちらの環境(Windows10(64bit) Excel2016(32bit)では正常に動作しました。
Application.FileDialogは古いExcelでは動作しません。そこでエラーになるのはExcelのバージョンが極端に古いのかもしれません。
- 回答としてマーク Resolve frustration 2020年8月21日 9:50
- 回答としてマークされていない Resolve frustration 2020年8月21日 9:50
- 回答としてマーク Resolve frustration 2020年8月21日 9:52
すべての返信
-
こちらの環境(Windows10(64bit) Excel2016(32bit)では正常に動作しました。
Application.FileDialogは古いExcelでは動作しません。そこでエラーになるのはExcelのバージョンが極端に古いのかもしれません。
- 回答としてマーク Resolve frustration 2020年8月21日 9:50
- 回答としてマークされていない Resolve frustration 2020年8月21日 9:50
- 回答としてマーク Resolve frustration 2020年8月21日 9:52
-
同じ表題・同じ内容のスレッドを 2 つ立ててますが、スレッドの乱立は止めてください。
2020年8月15日 5:56
2020年8月17日 3:18
前者はレスをもらっておきながら何もフィードバックせず装置状態。マナー的にどうかと思いますけど。
後者のスレッドのやり取りで解決したようですが、であればクローズしてください。それもマナーです。
Microsoft の管理者の方へ>統合するなど処置をお願いします。