Tạo tên file "liên tục"

Liên hệ QC

cuongdv

Thành viên mới
Tham gia
26/11/08
Bài viết
38
Được thích
6
+-+-+-+ Giả sử mình đang có 1 file excel: N_1.xls, bây giờ mình muốn khi khi chạy 1 macro ở file này (N_1) thì sẽ tạo ra 1 file khác cùng folder với tên là N_2.xls (giống như save As). Từ N_1.xls, N_2.xls sẽ tạo ra được N_3.xls,...... (khi ở trong folder đó nếu N_xx là lớn nhất thì khi ở bất kỳ 1 file nào cũng sẽ tạo ra đc 1 file N_xx+1, xx+1 là 1 số hữu hạn, vd là 5)
Bạn nào có thể giúp mình với, cảm ơn nhiều!
 
+-+-+-+ Giả sử mình đang có 1 file excel: N_1.xls, bây giờ mình muốn khi khi chạy 1 macro ở file này (N_1) thì sẽ tạo ra 1 file khác cùng folder với tên là N_2.xls (giống như save As). Từ N_1.xls, N_2.xls sẽ tạo ra được N_3.xls,...... (khi ở trong folder đó nếu N_xx là lớn nhất thì khi ở bất kỳ 1 file nào cũng sẽ tạo ra đc 1 file N_xx+1, xx+1 là 1 số hữu hạn, vd là 5)
Bạn nào có thể giúp mình với, cảm ơn nhiều!
Bạn sử dụng code này nhé:
PHP:
Sub Save_Copy_As()
    Dim FileS As FileSearch, Max As Integer, i As Byte, So As Integer, Temp As String
    Set FileS = Application.FileSearch
    With FileS
        .NewSearch
        .Filename = "*.xls"
        .LookIn = ThisWorkbook.Path
        .SearchSubFolders = False
        .Execute
    End With
    With ThisWorkbook
        Max = Val(Right(.Name, Len(.Name) - InStr(.Name, "_")))
        Temp = "_" & Max
    End With
    For i = 1 To FileS.FoundFiles.Count
        So = Val(Right(FileS.FoundFiles(i), Len(FileS.FoundFiles(i)) - InStr(FileS.FoundFiles(i), "_")))
        If So > Max Then Max = So
    Next i
    ThisWorkbook.SaveCopyAs Replace(ThisWorkbook.FullName, Temp, "_" & Max + 1)
End Sub
Với code này, tên tập tin phải được đặt dạng A_n. Trong đó:
- A là một nhóm ký tự bất kỳ (có thể dùng để đặt tên file) nhưng không được chứa ký tự "_".
- n là một số nguyên bất kỳ trong phạm vi kiểu Integer (-32768 đến 32766) (sở dĩ là 32766 mà không phải là 32767 vì 32767+1=32768 => tràn số)
 

File đính kèm

Upvote 0
Bạn sử dụng code này nhé:
PHP:
Sub Save_Copy_As()
    Dim FileS As FileSearch, Max As Integer, i As Byte, So As Integer, Temp As String
    Set FileS = Application.FileSearch
    With FileS
        .NewSearch
        .Filename = "*.xls"
        .LookIn = ThisWorkbook.Path
        .SearchSubFolders = False
        .Execute
    End With
    With ThisWorkbook
        Max = Val(Right(.Name, Len(.Name) - InStr(.Name, "_")))
        Temp = "_" & Max
    End With
    For i = 1 To FileS.FoundFiles.Count
        So = Val(Right(FileS.FoundFiles(i), Len(FileS.FoundFiles(i)) - InStr(FileS.FoundFiles(i), "_")))
        If So > Max Then Max = So
    Next i
    ThisWorkbook.SaveCopyAs Replace(ThisWorkbook.FullName, Temp, "_" & Max + 1)
End Sub
Với code này, tên tập tin phải được đặt dạng A_n. Trong đó:
- A là một nhóm ký tự bất kỳ (có thể dùng để đặt tên file) nhưng không được chứa ký tự "_".
- n là một số nguyên bất kỳ trong phạm vi kiểu Integer (-32768 đến 32766) (sở dĩ là 32766 mà không phải là 32767 vì 32767+1=32768 => tràn số)

1 lần nữa xin cảm ơn bạn đã giúp mình, còn 1 ý nữa trong câu hỏi là: mình muốn dừng lại ở N_5 thì code sẽ sửa lại như thế nào ah.

"Được voi đòi tiên", nếu khi file là N_5 thì sẽ "tràn", như vậy sẽ có 1 MsgBox cảnh báo và sẽ chuyển file Temp đó vào 1 folder khác với tên tương tự kiểu vòng lặp của File đó? Câu hỏi có khả thi không nhỉ??
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom