|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
1、显然你的文件名排序是有要求的,不是简单的红黄蓝,而是【按文件名所述的日期排序】,所
以你问题描述不清我给你的代码就用不成。
2、下标越界,因为数组下标默认是0开始即0-9,而dic.count是10。
3、你须明确你的工程需要什么,才能决定用什么代码实现,否则无用功。
4、我再强调一次,字典本身不能排序,要排序放到数组中。
5、调试的时候用debug.print比 msgbox方便一些,会跟踪调试最好,想写长代码就先学调试,否
则累死。
6、关于排序方法:你的排序要求,借用表格的“分列”和“排序”功能,逻辑上好理解一些,不知道
你为什么不用。如果纯代码,涉及到字符串处理和排序算法,很累的,没有功底还是别碰为好。
下面有个借用单元格排序的法子 ,纯代码排序太累,要拆字符串,要循环比较,我不想弄。
- Sub asdf()
- Dim FileArr, I, Brr()
- Dim regx
- Set regx = CreateObject("vbscript.regexp")
- Set dic = CreateObject("Scripting.Dictionary")
- FilePath = ThisWorkbook.Path & ""
- Filename = Dir(FilePath & "*.xls")
- Do While Len(Filename)
- If Filename <> ThisWorkbook.Name Then
- dic(Filename) = ""
- End If
- Filename = Dir
- Loop
- ReDim FileArr(dic.Count, 0)
- For I = 0 To dic.Count - 1
- 'Debug.Print dic.keys()(I) '要求在不借助单元格辅助的情况下依次按日期顺序显示文件名,且要求同一天的白班排在前面,夜班排在后面。日期中单个的数字前面不能再加零。
- FileArr(I, 0) = dic.keys()(I)
- Next
- 'FileArr = dic.keys()
- Application.DisplayAlerts = False
- Set sh = ThisWorkbook.Worksheets.Add
- sh.Name = "123"
- sh.Range("A1").Resize(10, 1) = FileArr
- sh.Range("B1").Resize(10, 1) = FileArr
- sh.Range("B1").Resize(100, 1).TextToColumns Destination:=Range("B1"), Other:=True, OtherChar:="月"
- sh.Range("C1").Resize(100, 1).TextToColumns Destination:=Range("C1"), Other:=True, OtherChar:="日"
- sh.Range("A1").Resize(100, 10).Sort Key1:=Range("B:B"), key2:=Range("C:C"), key3:=Range("D:D")
- FileArr = sh.Range("A1").Resize(dic.Count, 1)
- sh.Delete
- For I = 1 To UBound(FileArr, 1)
- Debug.Print FileArr(I, 1)
- Next
- Application.DisplayAlerts = True
- Stop
- End Sub
复制代码
|
|