75464


元々は、マクロが入っているフォルダの中にある、エクセルフォイルを読み込んで、  
処理を進めていくプログラムだったのですが、自分で、任意のフォルダを選択して、  
その中に、入っているすべてのファイルの値を取得できるように変えたら、400エラーが出てしまいました。  
ご教授お願いいたします。

[code]

    Sub 単体テスト仕様書マクロ()
    Dim wFile       As String
    Dim wFilePath   As String
    Dim i           As Long
     
    'Excelファイルが存在していたらファイル名を返す
    wFile = Dir(ActiveWorkbook.Path & "\*.xlsx")
    Sheets("単体テスト仕様書").Range("A2:D31").ClearContents
    '先頭行を指定
    i = 2
    
      Dim folderPath As Variant
      With Application.FileDialog(msoFileDialogFolderPicker)
      .Show
      folderPath = .SelectedItems(1)
      End With
     
    '選択したフォルダに存在するExcelファイルを全て読み込む
    Do While folderPath <> ""
         
        '開くExcelファイルのフルパスを取得
        wFilePath = ActiveWorkbook.Path & "\" & folderPath
         
        '機能（ﾌﾟﾛｸﾞﾗﾑ）名・テスト件数・完了数・不具合件数を取得し配列に格納する（区切り文字：|）
        strData = Split(File_Load(wFilePath), "|")
         
        '機能（ﾌﾟﾛｸﾞﾗﾑ）名
        Cells(i, 1) = strData(0)
         
        'テスト件数
        Cells(i, 2) = strData(1)
         
        '完了数
        Cells(i, 3) = strData(2)
        
        '不具合件数
        
        Cells(i, 4) = strData(3)
          
         
        '次のExcelファイルを取得
        wFile = Dir()
         
        '行数をカウント
        i = i + 1
     
    Loop
     
        MsgBox "完了"
    End Sub
    
    Function File_Load(ByVal wFilePath As String) As String
    
        Dim wb          As Workbook
        Dim wItem       As Variant
        Dim i           As Long
        Dim FoundCell   As Object
    
        Set wb = Workbooks.Open(wFilePath)
    
        wItem = Array("機能（ﾌﾟﾛｸﾞﾗﾑ）名", "テスト件数", "完了数", "不具合件数")
    
        For i = LBound(wItem) To UBound(wItem)
    
            Set FoundCell = wb.Worksheets(1).Cells.Find(What:=wItem(i))
    
            If FoundCell Is Nothing Then
                wItem(i) = ""
            Else
                wItem(i) = FoundCell.Offset(1, 0).Value
            End If
    
        Next i
    
        wb.Close SaveChanges:=False
    
        File_Load = Join(wItem, "|")
    
    
    End Function
    
[/code]


CC BY-SA 4.0
2021-04-23T01:13:50.477
75457
2021-04-23T02:34:59.780
2021-04-23T01:16:07.973
3060
44819
question
vba
フォルダを指定するダイアログを出して、選択したフォルダのファイルをすべて読み込む用に変更したら、400エラーが出てしまいました。


`folderPath`にはフォルダパスが入ります。  
例えば開いているExcelマクロ有効ファイルが`C:\hoge\fuga.xlsm`に保存されていて  
ダイアログで選択したフォルダが`C:\fuga`だとすると  
`wFilePath = ActiveWorkbook.Path & "\" & folderPath`で代入される`wFilePath`変数の値は  
`C:\hoge\C:\fuga`という **無効なパス** になります。

選択したフォルダ内部のファイル一覧を取得するにはDir関数を使用してください。  
<http://officetanaka.net/excel/vba/file/file07.htm>

[code]

    'Excelファイルが存在していたらファイル名を返す
    'この行は不要 wFile = Dir(ActiveWorkbook.Path & "\*.xlsx")
    
    Sheets("単体テスト仕様書").Range("A2:D31").ClearContents
    '先頭行を指定
    i = 2
    
    Dim folderPath As Variant
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        folderPath = .SelectedItems(1)
        'TODO キャンセル時の処理を入れた方が良いと思います
    End With
    
    wFile = Dir(folderPath & "\*.xlsx")
    
    '選択したフォルダに存在するExcelファイルを全て読み込む
    Do While wFile <> "" 
    
        '開くExcelファイルのフルパスを取得
        wFilePath = folderPath & "\" & wFile
    
        '機能（ﾌﾟﾛｸﾞﾗﾑ）名・テスト件数・完了数・不具合件数を取得し配列に格納する（区切り文字：|）
        strData = Split(File_Load(wFilePath), "|")
    
[/code]


CC BY-SA 4.0
2021-04-23T02:34:59.780
75464
2021-04-23T02:34:59.780
9820
75457
answer