Функция возврата нескольких значений

Мне нужно получить некоторую информацию о некоторых файлах, поэтому я пытаюсь создать функцию, которая возвращает 3 таких информации:

sub main()
    File = getFile(path) 'future code to list all file information on range

end sub


Function getFile(ByVal path as String)

Dim result() as String
Dim Arquivo as File

Set Folder = FSO.getFolder(Path)

For Each File in Folder.Files
    result(n) = File.Name
    result2(n) = File.DateLastModified
    result3(n) = File.ParentFolder
Next    

getFile = Result(), Result2(),Result3()???

End function

Можно ли вернуть информацию о 3 файлах в одной функции?

Вернуть массив массивов?

BigBen 18.03.2022 20:06

поэтому я должен получить n = 1 для имени файла, n = 2 дата изменения файла, n = 3 папка с файлом, n = 4 имя файла и так далее? и использовать только результат(n).

kdh90 18.03.2022 20:12
getFile = Array(Result(), Result2(), Result3())?
BigBen 18.03.2022 20:14

getFile должен быть вариантом?

kdh90 18.03.2022 20:25

Если вы используете Array, то да (как в настоящее время неявно).

BigBen 18.03.2022 20:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пожалуйста, попробуйте следующую адаптированную функцию:

Function getFile(ByVal path As String) As Variant
 Dim fso As Object, folder As Object, file As Object
 Dim arrName, arrDat, arrPar, n As Long

 Set fso = CreateObject("Scripting.FileSystemObject")
 Set folder = fso.GetFolder(path)
 ReDim arrName(folder.files.count - 1)
 ReDim arrDat(folder.files.count - 1)
 ReDim arrPar(folder.files.count - 1)

 For Each file In folder.files
    arrName(n) = file.name
    arrDat(n) = file.DateLastModified
    arrPar(n) = file.parentfolder
    n = n + 1
 Next
 getFile = Array(arrName, arrDat, arrPar)
End Function

Проверить это можно следующим образом:

Sub main()
   Dim file As Variant, path As String
   
   path = "the folder path" 'please use here a real path...
   file = getFile(path) 'future code to list all file information on range
    Debug.Print file(0)(0), file(1)(0), file(2)(0)
End Sub

Получить информацию о файле

Option Explicit

Sub GetFileInfoTEST()
    
    Const FolderPath As String = "C:\Test"
    Const wsName As String = "Sheet1"
    Const FirstCellAddress As String = "A2"
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim ws As Worksheet: Set ws = wb.Worksheets(wsName)
    
    Dim FileInfo As Variant: FileInfo = GetFileInfo(FolderPath)
    Dim rCount As Long: rCount = UBound(FileInfo, 1)
    If IsEmpty(FileInfo) Then Exit Sub
    
    With ws.Range(FirstCellAddress).Resize(, UBound(FileInfo, 2))
        .Resize(rCount).Value = FileInfo
        .Resize(ws.Rows.Count - .Row - rCount + 1).Offset(rCount).ClearContents
        .EntireColumn.AutoFit
    End With
    
End Sub

Function GetFileInfo( _
    ByVal FolderPath As String) _
As Variant

    Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(FolderPath) Then Exit Function
    
    Dim fsoFolder As Object: Set fsoFolder = fso.GetFolder(FolderPath)
    Dim fCount As Long: fCount = fsoFolder.Files.Count
    If fCount = 0 Then Exit Function
    
    Dim Data As Variant: ReDim Data(1 To fCount, 1 To 3)
    
    Dim fsoFile As Object
    Dim r As Long
    
    For Each fsoFile In fsoFolder.Files
        r = r + 1
        Data(r, 1) = fsoFile.Name
        Data(r, 2) = fsoFile.DateLastModified
        Data(r, 3) = fsoFile.ParentFolder
    Next fsoFile
    
    GetFileInfo = Data

End Function

Я отредактировал код, чтобы правильно отображать даты на листе. Попробуйте еще раз.

VBasic2008 18.03.2022 21:09

Другие вопросы по теме