2015-12-13 68 views
0

我正在從VBA Excel中的目錄中讀取文件。 閱讀後,我正在寫入單元格中的文件。 問題是以文件名升序搜索目錄。但我需要在部分文本(號碼的文件名內)在VBA中,如何通過文本值排序在dir中找到文件

的爲了打印對於離:

image_100 
image_120 
image_1205 
image_123 

我需要溶液打印像

image_100 
image_120 
image_123 
image_1205 

[上升按照最後的值) 任何幫助朋友?

謝謝, kamal。

+2

您是否嘗試過收集所有日。 e文件名首先到數組中然後自定義排序數組然後處理它們? – Jeeped

回答

0

實現這一目標將是把那種值到另一列的一種方式(我假定文件名是在A列,本例中使用B列的排序字段)

Public Sub ReOrderFiles() 

    Columns("B:B").Clear 

    Dim sht As Worksheet 
    Set sht = ThisWorkbook.Worksheets("Sheet1") 

    Dim LastRow As Long 
    LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row 

    Dim dr As Range 
    Set dr = Range("A1:A" & LastRow) 
    dr.Select 

    Dim target As Range 

    Dim c As Range 
    For Each c In dr.Cells 

     Set target = Range("B" & c.Row) 
     target.Select 
     If Len(c.Value2) > 0 Then 
      Selection.Value = "Sort" & onlyEndDigits(c.Value2) 
     End If 
    Next 

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1"), _ 
     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Sheet1").Sort 
     .SetRange Range("A:B") 
     .Header = xlNo 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

    Columns("B:B").Clear 

End Sub 

的在最終得到的數字功能可以

Function onlyEndDigits(s As String) As String 
    Dim retval As String 
    Dim Start As Integer 

    retval = "" 
    Start = 1 

    Dim i As Integer 
    For i = Len(s) To 1 Step -1 
     If Mid$(s, i, 1) >= "0" And Mid$(s, i, 1) <= "9" Then 
      Start = i 
     Else 
      Exit For 
     End If 
    Next 

    For i = Start To Len(s) 
     retval = retval + Mid(s, i, 1) 
    Next 

    onlyEndDigits = retval 
End Function 

注意這個函數會忽略的是,在其他地方的文件名出現任何數字

+0

在VBA中,'Mid(s,i)'足以讓所有從** i **到** s ** **的結尾,但我感覺[Dir函數](https:// msdn .microsoft.com/en-us/library/office/gg278779.aspx)實際上會返回類似於** Image_120.jpg **或** Image_123.png **。 – Jeeped

+0

@Jeeped - 好點。根據OP的樣本數據,我假定他們已經刪除了擴展名,但是我完全忘記了能夠省略使用Mid() – CHill60

+0

感謝Chili的長度... –

相關問題