none
フォルダのパス取得と、フォルダ内のファイルに対する一括処理について RRS feed

  • 質問

  • ダイアログで選択したフォルダのパスが取得できなくて困っています。ステップインで見てみると、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

    2020年8月15日 5:56

回答

  • こちらの環境(Windows10(64bit) Excel2016(32bit)では正常に動作しました。

    Application.FileDialogは古いExcelでは動作しません。そこでエラーになるのはExcelのバージョンが極端に古いのかもしれません。

    2020年8月20日 6:26

すべての返信