Excel 将文件夹名称存储到数组中,并按字母顺序对VBA进行排序

Excel 将文件夹名称存储到数组中,并按字母顺序对VBA进行排序,excel,vba,Excel,Vba,我有以下代码,用于将每个文件名拉入特定路径,并将其放入数组中。出于某种原因,尽管文件资源管理器中的文件是按字母顺序排序的,但代码会使它们失去顺序。我的方法是首先将文件名存储到数组中,然后对数组进行排序。有没有更好的办法 此外,出于某种原因,带有Debug.Print arr1(i)的行只向即时窗口打印空白。请告知 Dim arr1(1000) As String, item As Variant Dim x As Long, y As Long, k As Integer Dim TempTxt

我有以下代码,用于将每个文件名拉入特定路径,并将其放入数组中。出于某种原因,尽管文件资源管理器中的文件是按字母顺序排序的,但代码会使它们失去顺序。我的方法是首先将文件名存储到数组中,然后对数组进行排序。有没有更好的办法

此外,出于某种原因,带有Debug.Print arr1(i)的行只向即时窗口打印空白。请告知

Dim arr1(1000) As String, item As Variant
Dim x As Long, y As Long, k As Integer
Dim TempTxt1 As String
Dim TempTxt2 As String
Dim FolderPath As String, path As String, count As Integer
Dim size As Integer, i As Integer

Set oFSO = CreateObject("Scripting.FileSystemObject")

Set oFolder = oFSO.GetFolder("X:\test\testfolder")

For Each oFile In oFolder.Files

    arr1(i) = Left(oFile.Name, Application.WorksheetFunction.Find(".", oFile.Name) - 1)

    i = i + 1

    Debug.Print arr1(i)

Next oFile


'Alphabetize Sheet Names in Array List
  For x = LBound(arr1) To UBound(arr1)
    For y = x To UBound(arr1)
      If UCase(arr1(y)) < UCase(arr1(x)) Then
        TempTxt1 = arr1(x)
        TempTxt2 = arr1(y)
        arr1(x) = TempTxt2
        arr1(y) = TempTxt1
      End If
     Next y
  Next x
Dim arr1(1000)作为字符串,项作为变量
尺寸x为长,y为长,k为整数
将Xt1设置为字符串
将Xt2设置为字符串
Dim FolderPath为字符串,path为字符串,计数为整数
将大小设置为整数,将i设置为整数
Set of so=CreateObject(“Scripting.FileSystemObject”)
文件夹集合=oFSO.GetFolder(“X:\test\testfolder”)
对于oFolder.Files中的每个文件
arr1(i)=左(oFile.Name,Application.WorksheetFunction.Find(“.”,oFile.Name)-1)
i=i+1
调试.打印arr1(i)
下一个文件
'按字母顺序排列阵列列表中的工作表名称
对于x=LBound(arr1)到UBound(arr1)
对于y=x至UBound(arr1)
如果UCase(arr1(y))

根据我的评论,在此处输入代码

;我认为使用
ArrayList
及其
排序功能可能会让您受益匪浅。尝试:

Sub Test()

Dim oFSO As Object, oFolder As Object, arr As Object

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("X:\test\testfolder")
Set arr = CreateObject("System.Collections.ArrayList")

For Each oFile In oFolder.Files
    arr.Add oFSO.GetBaseName(oFile)
Next oFile

arr.Sort

End Sub

既然您一个接一个地输入名称,我们不妨在
ArrayList
中这样做。然后,
.Sort
方法将按升序对列表进行排序。

关于
调试.Print
问题,将该行移到
i=i+1
之前。为了让您知道这一点,您还可以将所有内容插入一个
ArrayList
中,该列表具有一个可以调用的
Sort
方法。如果你一个接一个地输入这些名称,你还可以将它们输入这个
ArrayList
,它也不需要任何起始维度。谢谢你的输入!不幸的是,当我运行这个时,我得到了“运行时错误'7':内存不足”。有什么建议吗?刚好超过80-90个文件。我创建了一个只有4个文件的测试文件夹,但仍然抛出相同的错误提示,
CStr(Split(ofile.Name,“.”(0))
东西不应该在那里。您希望它只是o.GetBaseName(oFile)的
(还有,去掉匈牙利符号!!)