Sử dụng excel paste hàng loạt tên file (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

friendship293a

Thành viên mới
Tham gia
9/3/08
Bài viết
25
Được thích
0
Em có tìm được cái file copy hàng loat tên file vào excel trên diễn đàn giờ e có 1 list tên file trong excel rùi, sau đó e sửa lại tên file trong các file trong foder ý nhưng vẫn giữ thứ tự các file.
Em muốn nhờ bác nào sửa cho e file copy để nó có thể paste ngược lại được ạ. tức là sau khi em rename xong file ở trong foder giờ muốn chuyển tên file thành như cũ, các tên file thì đã được xuất luu vào excel bằng chương trình copy rồi ạ. file copy e đính kèm. cảm ơn mọi người đã dành thời gian giúp đỡ.
 

File đính kèm

Bạn sử dụng công cụ sau để thực hiện ý tưởng của bạn.
 

File đính kèm

Upvote 0
công cụ này có mật khẩu là gì vậy bạn ? cho mình cái chìa khóa để mở ra học code với . hi ;;;;;;;;;;;

Vấn đề này đã được đề cập tại GPE 2 lần rồi bạn.

Bạn có thể tìm kiếm với từ khóa "rename dhn46" để thấy 2 topic nói về cái file này.
 
Upvote 0
Vấn đề này đã được đề cập tại GPE 2 lần rồi bạn.

Bạn có thể tìm kiếm với từ khóa "rename dhn46" để thấy 2 topic nói về cái file này.

a nhìn thấy rùi , code ở chỗ này
nhưng cũng có khúc chưa hiểu , tại sao cần gọi đoạn
Mã:
[COLOR=#000000]For Each fi In .GetFolder(Linkfolder).Files[/COLOR]
tới 2 chỗ trong function Getfile () vậy bạn . Bạn có thể giải thích cho mình được rõ không ?
 
Upvote 0
a nhìn thấy rùi , code ở chỗ này
nhưng cũng có khúc chưa hiểu , tại sao cần gọi đoạn
Mã:
[COLOR=#000000]For Each fi In .GetFolder(Linkfolder).Files[/COLOR]
tới 2 chỗ trong function Getfile () vậy bạn . Bạn có thể giải thích cho mình được rõ không ?
Chào bạn,

Sử dụng lần 1 để lấy file trong thư mục mẹ (thư mục đầu tiên), thứ 2 để lấy trong subfolder.

Code này tôi viết khá lâu rồi từ hồi voọc đệ quy. Hy vọng vẫn hữu ích với mọi người.
 
Upvote 0
Chào bạn,

Sử dụng lần 1 để lấy file trong thư mục mẹ (thư mục đầu tiên), thứ 2 để lấy trong subfolder.

Code này tôi viết khá lâu rồi từ hồi voọc đệ quy. Hy vọng vẫn hữu ích với mọi người.

đúng vậy , rất hữu ích với mình . Cảm ơn bạn đã xây dựng . Mình chỉ xin viết lại lược bớt vài chỗ không cần thiết để sau này mình dùng

Mã:
Function Getfile(ByVal Linkfolder As String)
Dim sfi As Object, fi  As Object, oFolder As Object
Static fso As Object
If fso Is Nothing Then Set fso = CreateObject("Scripting.filesystemobject")
Set oFolder = fso.GetFolder(Linkfolder)
For Each fi In oFolder.Files
    'Exclude Temporary file
    If Left(fi.Name, 1) <> "~" Then
        i = i + 1
        Arr(i, 1) = i
        Arr(i, 3) = fi.Name
        Arr(i, 2) = Linkfolder
    End If
Next
For Each sfi In oFolder.SubFolders
    Getfile (sfi)
Next
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn sử dụng công cụ sau để thực hiện ý tưởng của bạn.
Hôm ở bên thớt sau Bài #28 của Bạn có cho Link qua bên đây ...
http://www.giaiphapexcel.com/forum/...t-Toán-Đệ-Quy-Trong-Lập-Trình-Với-Excel/page3

Giờ đang rảnh buồn buồn lục lại coi File Rename.xls của Bạn ...mục đích là lấy File và đường dẫn gán lên cột B và C có sử dụng hàm Getfile để duyệt file theo thuật toán đệ quy ....

Tuy nhiên với 1 Folder trong đó có quá nhiều Folder và file linh tinh là lỗi code ....

Vậy mình muốn hỏi là tại sao không sử dụng cmd mà duyệt File trong Folder cha con cháu chắt nhà nó ... lấy lên Sheet y trang code của Bạn có phải nhanh hơn không VD như Hàm sau của Anh Ndu chẳng hạn
Mã:
Function GetListFile(ByVal Folder As String, ByVal Search As String, ByVal InSub As Boolean)
    Dim sComm As String, tmp As String, tmpFile, sPath As String
    On Error Resume Next ''Copy Ndu - GPE
    If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
    sPath = """" & Folder & "*" & Search & "*"""
    With CreateObject("Scripting.FileSystemObject")
        tmpFile = .GetTempName
        sComm = "DIR " & sPath & " /ON /B /A-D " & IIf(InSub, "/S", " ") & " >" & tmpFile
        CreateObject("Wscript.Shell").Run "cmd /u /c " & sComm, 0, True
        With .OpenTextFile(tmpFile, 1, , -2)
            tmp = Trim(.ReadAll)
            If Right(tmp, 2) = vbCrLf Then tmp = Left(tmp, Len(tmp) - 2)
            If Len(tmp) Then GetListFile = Split(tmp, vbCrLf)
            .Close
        End With
    End With
    Kill tmpFile
End Function
đó là suy nghĩ của mình còn ý bạn thì mình không biết ...
 
Upvote 0
Hôm ở bên thớt sau Bài #28 của Bạn có cho Link qua bên đây ...
http://www.giaiphapexcel.com/forum/...t-Toán-Đệ-Quy-Trong-Lập-Trình-Với-Excel/page3

Giờ đang rảnh buồn buồn lục lại coi File Rename.xls của Bạn ...mục đích là lấy File và đường dẫn gán lên cột B và C có sử dụng hàm Getfile để duyệt file theo thuật toán đệ quy ....

Tuy nhiên với 1 Folder trong đó có quá nhiều Folder và file linh tinh là lỗi code ....

Vậy mình muốn hỏi là tại sao không sử dụng cmd mà duyệt File trong Folder cha con cháu chắt nhà nó ... lấy lên Sheet y trang code của Bạn có phải nhanh hơn không VD như Hàm sau của Anh Ndu chẳng hạn
Mã:
Function GetListFile(ByVal Folder As String, ByVal Search As String, ByVal InSub As Boolean)
    Dim sComm As String, tmp As String, tmpFile, sPath As String
    On Error Resume Next ''Copy Ndu - GPE
    If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
    sPath = """" & Folder & "*" & Search & "*"""
    With CreateObject("Scripting.FileSystemObject")
        tmpFile = .GetTempName
        sComm = "DIR " & sPath & " /ON /B /A-D " & IIf(InSub, "/S", " ") & " >" & tmpFile
        CreateObject("Wscript.Shell").Run "cmd /u /c " & sComm, 0, True
        With .OpenTextFile(tmpFile, 1, , -2)
            tmp = Trim(.ReadAll)
            If Right(tmp, 2) = vbCrLf Then tmp = Left(tmp, Len(tmp) - 2)
            If Len(tmp) Then GetListFile = Split(tmp, vbCrLf)
            .Close
        End With
    End With
    Kill tmpFile
End Function
đó là suy nghĩ của mình còn ý bạn thì mình không biết ...
Chào bạn,

Dùng CMD của thầy giáo GPE NDU có trước code của mình khá lâu rất nhanh và tiện dụng, trong thời gian Vooc đệ quy, rảnh nên sinh nông nổi để thử nghiệm thôi và cũng thấy hữu ích.

Đợt này bạn Kieumanh có những khám phá vượt bậc quá, mình cũng mong được học nhiều hơn từ bạn nữa.

Cảm ơn bạn!
 
Upvote 0
Chào bạn,

Dùng CMD của thầy giáo GPE NDU có trước code của mình khá lâu rất nhanh và tiện dụng, trong thời gian Vooc đệ quy, rảnh nên sinh nông nổi để thử nghiệm thôi và cũng thấy hữu ích.

Đợt này bạn Kieumanh có những khám phá vượt bậc quá, mình cũng mong được học nhiều hơn từ bạn nữa.

Cảm ơn bạn!
Bạn thử code sau xem sao nha có giống code của Bạn không... Tốc độ rất nhanh
Mượn code của Anh Ndu quậy một tẹo ....--=0 Mai mốt có duyên gặp lại Em mời Anh vài chai :drinks::drunk:
Mã:
Function GetListFile(ByVal Folder As String, ByVal Search As String, ByVal InSub As Boolean)
    Dim sComm As String, tmp As String, tmpFile, sPath As String
    On Error Resume Next ''Copy Ndu - GPE
    If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
    sPath = """" & Folder & "*" & Search & "*"""
    With CreateObject("Scripting.FileSystemObject")
        tmpFile = .GetTempName
        sComm = "DIR " & sPath & " /ON /B /A-D " & IIf(InSub, "/S", " ") & " >" & tmpFile
        CreateObject("Wscript.Shell").Run "cmd /u /c " & sComm, 0, True
        With .OpenTextFile(tmpFile, 1, , -2)
            tmp = Trim(.ReadAll)
            If Right(tmp, 2) = vbCrLf Then tmp = Left(tmp, Len(tmp) - 2)
            If Len(tmp) Then GetListFile = Split(tmp, vbCrLf)
            .Close
        End With
    End With
    Kill tmpFile
End Function

Public Function SearchFolder$()
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Ch" & ChrW(7885) & "n M" & ChrW(7897) & "t Folder"
        .Show
        If .SelectedItems.Count = 0 Then Exit Function
        SearchFolder$ = .SelectedItems(1)
    End With
End Function

Sub Main()
    Dim Arr As Variant, i As Long, k As Long, Path As String
    Dim Res(1 To 65536, 1 To 1), Res2(1 To 65536, 1 To 1)
    Path = SearchFolder$
    Range("A2:D65536").ClearContents
    Arr = GetListFile(Path, "*.xls", True)
    If IsArray(Arr) Then
        With CreateObject("Scripting.FileSystemObject")
            For i = 1 To UBound(Arr)
                k = k + 1
                Res(k, 1) = .GetParentFolderName(Arr(i))
                Res2(k, 1) = .GetFilename(Arr(i))
            Next
            Range("B2").Resize(k) = Res
            Range("C2").Resize(k) = Res2
            Range("B2", [B65536].End(3)).Offset(, -1) = [row(A:A)]
        End With
    End If
End Sub
 
Upvote 0
Hiện nay có 2 phương pháp đang được đề cập để giải quyết vấn đề list file này

1/ Sử dụng Dos
2/ Sử dụng đệ quy

Vậy các bạn còn phương pháp nào để thực hiện nữa không nhỉ? Dos đang chiếm ưu thế về tốc độ so với đệ quy có thể nói là chiếm ưu thế tuyệt đối vậy có cách nào cho tốc độ nhanh hơn không các bạn?
 
Upvote 0
Hiện nay có 2 phương pháp đang được đề cập để giải quyết vấn đề list file này

1/ Sử dụng Dos
2/ Sử dụng đệ quy

Vậy các bạn còn phương pháp nào để thực hiện nữa không nhỉ? Dos đang chiếm ưu thế về tốc độ so với đệ quy có thể nói là chiếm ưu thế tuyệt đối vậy có cách nào cho tốc độ nhanh hơn không các bạn?
Chắc không có gì nhanh hơn DOS đâu ....Hôm ở bên thớt Vui chơi với thuật toán đệ quy ...

Mình cũng thử mượn Hàm GetListFile của Anh ndu....
kết hợp với ADO tổng hợp File trong Folder cha con cháu chắt nhà nó thấy ok đó ...

Tuy nhiên thớt đó thấy ít người nổi hứng đành bỏ rồi ....chán không chơi ở đó nữa ..--=0--=0--=0
 
Upvote 0
Hiện nay có 2 phương pháp đang được đề cập để giải quyết vấn đề list file này

1/ Sử dụng Dos
2/ Sử dụng đệ quy

Vậy các bạn còn phương pháp nào để thực hiện nữa không nhỉ? Dos đang chiếm ưu thế về tốc độ so với đệ quy có thể nói là chiếm ưu thế tuyệt đối vậy có cách nào cho tốc độ nhanh hơn không các bạn?
Thêm một cách nữa nhanh hơn ... code ngắn gọn và đẹp hơn 1 tẹo cho Bạn tham khảo ....

Tại lỡ mượn code của Anh Ndu quậy rồi thì quậy thêm 1 tí nữa...

Lâu lâu thấy văng vắng Anh Ndu Em thấy lòng Mình lao sao ấy ...Nhớ Anh Em quậy thêm một tẹo nữa cho đỡ buồn nha...--=0
Mã:
Public Function SearchFolder$()
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Ch" & ChrW(7885) & "n M" & ChrW(7897) & "t Folder"
        .Show
        If .SelectedItems.Count = 0 Then Exit Function
        SearchFolder = .SelectedItems(1)
    End With
End Function


Function GetListFiles(ByVal Folder As String, ByVal Search As String, ByVal Target As Range, ByVal inSub As Boolean)
    On Error GoTo Thoat ''Copy cmd Form Mr Ndu - GPE (Design By Kieu Manh - GPE)
    Dim sComm$, tmp$, tmpFile, sPath$, Arr As Variant, i&
    Dim Res(1 To 65536, 1 To 1), Res2(1 To 65536, 1 To 1)
    If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
    sPath = """" & Folder & "*" & Search & "*"""
    With CreateObject("Scripting.FileSystemObject")
        tmpFile = .GetTempName
        sComm = "DIR " & sPath & " /ON /B /A-D " & IIf(inSub, "/S", " ") & " >" & tmpFile
        CreateObject("Wscript.Shell").Run "cmd /u /c " & sComm, 0, True
        With .OpenTextFile(tmpFile, 1, , -2)
            tmp = Trim(.ReadAll)
            If Right(tmp, 2) = vbCrLf Then tmp = Left(tmp, Len(tmp) - 2)
            If Len(tmp) Then GetListFiles = Split(tmp, vbCrLf)
            .Close
        End With
        Kill tmpFile
        Arr = GetListFiles
        For i = 1 To UBound(Arr)
            Res(i, 1) = .GetParentFolderName(Arr(i))  
            Res2(i, 1) = .GetFilename(Arr(i))         
        Next
        With Target
            .Resize(i) = Res
            .Resize(i).Offset(, 1) = Res2
            .Resize(i - 1).Offset(, -1) = [row(A:A)]
        End With
    End With
Thoat:
End Function


Public Sub Main()
    Dim Path As String
    Path = SearchFolder$
    Range("A2:D65536").ClearContents
    GetListFiles Path, "*.xls", [B2], True
End Sub

Nói dóc cái coi:
Kết Hợp code kinh điển của Anh Ndu + với khả năng khổ luyện của Mạnh ... Tạo nên đẳng cấp của sự khác biệt Lưu lại dấu ấn vượt thời gian ....,,,,,,,-0-0-0-
 
Lần chỉnh sửa cuối:
Upvote 0
Nhanh thì có nhanh thật. Nhưng mục đích của việc này chỉ là lấy danh sách file vào mảng và đập cái rầm xuống sheet thì nhanh...
Nhưng nếu dùng để làm việc khác: Như là tổng hợp dữ liệu từ nhiều file vào file tổng như tiêu chí topic kia của anh Kiều Mạnh thì tốc độ lại gần như ngang nhau....(dùng VBA nha)...
Nếu VBA thì nó còn duyệt Sheet để lấy nên tốc độ chậm ....(Vì Workbook.Open)
Nếu xài Hàm đó cho VBA thì Bạn phải thêm bẩy lỗi "~" nha ....
Có khả năng nhanh hơn 1 tẹo thì phải
Còn ADO mà có 1 số File có tên Sheet rõ ràng thì nhanh đó Bạn

Mình đang nghiên cứu xem có thể sẻ không sử dụng ADO ,Workbooks.Open hay Macro4 ...mà vẫn tổng hợp theo thuật toán đệ quy ... nhưng đang lỗi tè le ra ....từ từ khi nào Ok Mạnh Úp lên .... hahahaha
 
Lần chỉnh sửa cuối:
Upvote 0
Nhanh thì có nhanh thật. Nhưng mục đích của việc này chỉ là lấy danh sách file vào mảng và đập cái rầm xuống sheet thì nhanh...
Nhưng nếu dùng để làm việc khác: Như là tổng hợp dữ liệu từ nhiều file vào file tổng như tiêu chí topic kia của anh Kiều Mạnh thì tốc độ lại gần như ngang nhau....(dùng VBA nha)...
Mình nghĩ ứng dụng nó Open Folder hay Tìm File của nhanh đó ....

Bạn lấy nó lên Sheet Temp xong viết 1 code ở Sheet khác lọc các File kèm theo đường dẫn của nó xong sử dụng code sau mở tới Folder đó chẳng hạn ....

Nói chung tùy biến theo ý đồ của mình thôi....

Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim sFolder As String: sFolder = ActiveCell.Value
    Shell "explorer.exe " & sFolder, vbNormalFocus
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom