Tạo tên Folder bằng VBA theo mong muốn

Liên hệ QC

truongtu_1988

Thành viên mới
Tham gia
19/3/21
Bài viết
48
Được thích
2
Chào quý Thầy Cô, Anh Chị diễn đàn GPE!
Trong thời gian nghĩ dịch Covid em xắp xếp lại các thư mục máy tính ( nhưng nhiều quá) nên nhờ quý Thầy Cô, Anh Chị giúp đỡ, em cám ơn:
1. Lựa chọn số lượng Folder cần tạo
2. Đường dẫn nơi tạo Folder (mình có thể lựa chọn được bằng Data Validation)
3. Sẽ xuất hiện số ô cần nhập tên folder theo số lượng Folder mình đã tạo. Nếu vượt mình nhập quá số lượng chương trình sẽ thông báo nhắc nhở
Em cám ơn quý Thầy Cô, Anh Chị diễn đàn GPE, kính chúc mọi người nhiều sức khỏe, sớm vượt qua mùa dịch bênh !!!
 

File đính kèm

  • Tạo tên Folder bằng VBA.xlsm
    27.7 KB · Đọc: 12
Giải pháp
Dạ, bây giờ con đọc kỹ con mới hiểu, tên các thư mục được con được tạo cùng 1 thư mục mẹ, nếu bị trùng tên thì chương trình chỉ tạo ra 1 cái thôi.
Thầy có thể giúp con thêm phần tính số lượng thư mục con mình đã tạo.
Cám ơn Thầy nhiều!!!
Bạn tự kiểm tra kỹ.

Mã:
Option Explicit

Sub tao_thumuc()
Dim r As Long, pos As Long, dulieu(), folderpath As String, curr_path As String
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
  
    With Sheet1
        r = .Cells(Rows.count, "D").End(xlUp).Row   ' dong cuoi cung trong cot D co ten thu muc Con
        If r < 3 Then Exit Sub
        dulieu = .Range("C3:D" & r).Value ' lay du lieu vao mang dulieu
    End With
    For r = 1 To UBound(dulieu, 1)
        If...
Hãy nói cho người ta hiểu thì người ta mới giúp được.
Lựa chọn số lượng, DV để làm gì?
- trong 1 cột vd. C liệt kê tất cả các thư mục đeo huy hiệu "Mẹ" - 1 hoặc nhiều Mẹ.
- với mỗi Mẹ trong cột C trong các dòng liên tiếp của cột D liệt kê các con của Mẹ.
- đặt trên sheet Button và gán cho nó macro.

Người giúp sẽ viết macro mà trên cơ sở cột C và D tạo các thư mục con.
 
Upvote 0
Hãy nói cho người ta hiểu thì người ta mới giúp được.
Lựa chọn số lượng, DV để làm gì?
- trong 1 cột vd. C liệt kê tất cả các thư mục đeo huy hiệu "Mẹ" - 1 hoặc nhiều Mẹ.
- với mỗi Mẹ trong cột C trong các dòng liên tiếp của cột D liệt kê các con của Mẹ.
- đặt trên sheet Button và gán cho nó macro.

Người giúp sẽ viết macro mà trên cơ sở cột C và D tạo các thư mục con.
Dạ con chào Thầy, con xin diễn giải như sau:
Ô B3 sẽ là mình sẽ chọn số lượng Folder mình cần tạo ra
Ô C3 là mình sẽ chọn đường dẫn để mình lưu, tạo các Fordel đó (con đang để mặc định là "C:\Tạo bằng VBAExcel\" và "D:\Tạo bằng VBAExcel\")
Ví dụ nếu tại ô B3 mình chọn (3) thì tại ô cột D (mặc định tính từ ô D3)sẽ cho nhập tên các Fordel mình muốn tạo từ ô D3: D5, nếu mình Enter xuống dòng thì chương trình sẽ cảnh báo lổi.
Xin cám ơn Thầy, chúc Thầy nhiều sức khỏe!
 

File đính kèm

  • GPE.jpg
    GPE.jpg
    96.8 KB · Đọc: 10
Upvote 0
Dạ con chào Thầy, con xin diễn giải như sau:
Nếu cột D có 3 tên thì tôi hiểu là trong thư mục Mẹ = C3 cần tạo 3 thư mục con. Vậy B3 = 3 để làm gì?

Tóm lại bạn hình dung code sẽ phải như thế nào? Khi nhấn nút thì code sẽ phải làm gì, hãy liệt kê từng bước cần làm bằng lời. Người khác sẽ trên cơ sở đó viết code.
 
Upvote 0
Nếu cột D có 3 tên thì tôi hiểu là trong thư mục Mẹ = C3 cần tạo 3 thư mục con. Vậy B3 = 3 để làm gì?

Tóm lại bạn hình dung code sẽ phải như thế nào? Khi nhấn nút thì code sẽ phải làm gì, hãy liệt kê từng bước cần làm bằng lời. Người khác sẽ trên cơ sở đó viết code.
Dạ, em xin được liệt kê:
Tại ô B3 mình sẽ chọn sô lượng Folder cần tạo mới.
Ô C3 là đường dẫn nơi chứa các Folder con đó (con đang để mặc định là "C:\Tạo bằng VBAExcel\" và "D:\Tạo bằng VBAExcel\") nó sẽ được tạo ra khi mình chạy chương trình
Còn tại dòng D3 trở xuống là nơi mình sẽ đặt tên các Folder đó ( nhưng sẽ bị ràng buộc khi ô B3 mình chọn bao nhiêu thì chỉ cho phép mình Enter xuống dòng để nhập tên các Folder đó, nếu vượt qua sẽ thông báo nhắc nhở vượt quá.
Sau khi nhập xong hết các thủ tục, đặt tên mới cho Folder, bấm nút Chạy Chương Trình ( nếu trong quá trình chạy chương trình, chương trình quét các ô D3 mà rỗng sẽ thông báo nhắc nhở, mình có tiếp tục chạy hay không? Với tên mặc định là New folder, New folder (2)... đó hay không?
Em cám ơn Thầy nhiều!!!
 
Upvote 0
Tại ô B3 mình sẽ chọn sô lượng Folder cần tạo mới.
Tôi là người không thông minh như những người khác nên tôi không hiểu kiểu giải thích không chính xác.
Cho tới tận giờ tôi cứ tưởng là trong C3 sẽ được nhập tên folder Mẹ, và folder Mẹ đã TỒN TẠI. Nhưng bây giờ đọc
Ô C3 là đường dẫn nơi chứa các Folder con đó (con đang để mặc định là "C:\Tạo bằng VBAExcel\" và "D:\Tạo bằng VBAExcel\") nó sẽ được tạo ra khi mình chạy chương trình
thì tôi không biết, khi bắt đầu chạy chương trình thì C3 đã có giá trị hay chưa, và folder có tên như thế đã tồn tại chưa hay bây giờ mới được tạo ra.

Sau khi nhập xong hết các thủ tục, đặt tên mới cho Folder, bấm nút Chạy Chương Trình
Tức sau khi nhập dữ liệu vào cột B, C và D thì nhấn nút Chạy Chương Trình? Nếu đúng thế thì chẳng tôi đã đề nghị ở bài 3 rồi sao? Tại sao bạn không nói một câu ngắn gọn: "Đúng thế, em muốn làm đúng thế"?

Thú thực là tôi chưa hiểu được ý bạn.
 
Upvote 0
Tôi là người không thông minh như những người khác nên tôi không hiểu kiểu giải thích không chính xác.
Cho tới tận giờ tôi cứ tưởng là trong C3 sẽ được nhập tên folder Mẹ, và folder Mẹ đã TỒN TẠI. Nhưng bây giờ đọc

thì tôi không biết, khi bắt đầu chạy chương trình thì C3 đã có giá trị hay chưa, và folder có tên như thế đã tồn tại chưa hay bây giờ mới được tạo ra.


Tức sau khi nhập dữ liệu vào cột B, C và D thì nhấn nút Chạy Chương Trình? Nếu đúng thế thì chẳng tôi đã đề nghị ở bài 3 rồi sao? Tại sao bạn không nói một câu ngắn gọn: "Đúng thế, em muốn làm đúng thế"?

Thú thực là tôi chưa hiểu được ý bạn.
Dạ con xin lỗi do diễn đạt không rỏ làm Thầy hiểu nhầm...
Thầy nói vụ C3 con mới biết, vậy nếu khi đặt tên các Folder con sẽ chú ý hơn.
Nếu được Thầy giúp con vụ trùng tên Folder, nếu bị trùng tên Folder đường dẫn (ô C3 hay tên các Folder con ) chương trình sẽ thông báo nhắc nhở mình
Dạ mục đích con là tạo ra các Folder mới để xắp xếp cho gọn lại các ổ cứng, nhằm quản lý các thư mục cho dể.
Con cám ơn Thầy đã quan tâm đến bài viết của con!!!
 
Upvote 0
Dạ con xin lỗi do diễn đạt không rỏ làm Thầy hiểu nhầm...
Thầy nói vụ C3 con mới biết, vậy nếu khi đặt tên các Folder con sẽ chú ý hơn.
Nếu được Thầy giúp con vụ trùng tên Folder, nếu bị trùng tên Folder đường dẫn (ô C3 hay tên các Folder con ) chương trình sẽ thông báo nhắc nhở mình
Dạ mục đích con là tạo ra các Folder mới để xắp xếp cho gọn lại các ổ cứng, nhằm quản lý các thư mục cho dể.
Con cám ơn Thầy đã quan tâm đến bài viết của con!!!
Nhưng tôi chưa biết dữ liệu đầu vào ở đâu và có cấu trúc như thế nào. Tôi đề xuất như bài #3 nhưng không thấy bạn cho ý kiến là làm theo như thế hay không như thế. Và nếu không như thế thì như thế nào. Cứ bắt chước kiểu mô tả của tôi ở bài #3.
 
Upvote 0
Nhưng tôi chưa biết dữ liệu đầu vào ở đâu và có cấu trúc như thế nào. Tôi đề xuất như bài #3 nhưng không thấy bạn cho ý kiến là làm theo như thế hay không như thế. Và nếu không như thế thì như thế nào. Cứ bắt chước kiểu mô tả của tôi ở bài #3.
Dạ con cám ơn Thầy, vậy theo cách của Thầy nha!!!
 
Upvote 0
Thôi tôi làm như tôi đã đề xuất.
Code bỏ qua những dòng trống nếu có.
Với dữ liệu như trong tập tin thì trong thư mục "d:\phim hay" sẽ tạo 2 thư mục: phim1 và phim 2, còn trong d:\Laptop: Học Tập, Tài Liệu, VBA

Cả thư mục chính và con nếu chưa tồn tại thì tạo, nếu đang tồn tại thì thôi không tạo mới.

Code trong module1.

Phiên bản ngắn gọn và dễ theo dõi hơn tôi để ở bài #13
 

File đính kèm

  • Tạo tên Folder bằng VBA.xlsm
    21.6 KB · Đọc: 33
Lần chỉnh sửa cuối:
Upvote 0
Thôi tôi làm như tôi đã đề xuất.
Code bỏ qua những dòng trống nếu có.
Với dữ liệu như trong tập tin thì trong thư mục "d:\phim hay" sẽ tạo 2 thư mục: phim1 và phim 2, còn trong d:\Laptop: Học Tập, Tài Liệu, VBA

Cả thư mục chính và con nếu chưa tồn tại thì tạo, nếu đang tồn tại thì thôi không tạo mới.

Code trong module1.
Dạ con cám ơn Thầy, chương trình chạy rất nhanh.
Thầy giúp con thêm phần xóa có điều kiện ở cột D ( thư mục con sẽ bị xóa khi trùng dữ liệu khi cùng thư mục chính, còn khác thư mục chính sẽ không bị xóa). Với đếm thư mục con đã tạo tại cột E.
Con cám ơn Thầy và diễn đàn GPE nhiều!!!
 

File đính kèm

  • Tạo tên Folder bằng VBA(Thầy Batman1).xlsm
    29.2 KB · Đọc: 13
Upvote 0
Trước tiên tôi gửi phiên bản khác của bài #11, vì có thể có người không cần các bổ sung ở bài #12

Ban đêm ý tưởng hơi bị dài. Bạn thử code ngắn và dễ theo dõi hơn nhé.
Mã:
Option Explicit

Sub tao_thumuc()
Dim r As Long, dulieu(), folderpath As String, curr_path As String
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    With Sheet1
        r = .Cells(Rows.Count, "D").End(xlUp).Row   ' dong cuoi cung trong cot D co ten thu muc Con
        If r < 3 Then Exit Sub
        dulieu = .Range("C3:D" & r).Value ' lay du lieu vao mang dulieu
    End With
    For r = 1 To UBound(dulieu, 1)
        If Not IsEmpty(dulieu(r, 1)) Then   ' thu muc Me
            curr_path = dulieu(r, 1)    ' thu muc Me
            If Right(curr_path, 1) <> "\" Then curr_path = curr_path & "\"
            If Not fso.FolderExists(curr_path) Then fso.CreateFolder curr_path  ' chua ton tai thi tao moi
        End If
        If Not IsEmpty(dulieu(r, 2)) And Len(curr_path) Then
            folderpath = curr_path & dulieu(r, 2)   ' duong dan day du toi thu muc Con
            If Not fso.FolderExists(folderpath) Then fso.CreateFolder folderpath    ' chua ton tai thi tao moi
        End If
    Next r
    Set fso = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ con cám ơn Thầy, chương trình chạy rất nhanh.
Thầy giúp con thêm phần xóa có điều kiện ở cột D ( thư mục con sẽ bị xóa khi trùng dữ liệu khi cùng thư mục chính, còn khác thư mục chính sẽ không bị xóa). Với đếm thư mục con đã tạo tại cột E.
Con cám ơn Thầy và diễn đàn GPE nhiều!!!
Tôi không hiểu.

1. Bạn hãy định nghĩa khái niệm "trùng dữ liệu". Tôi biết thế nào là 2 thư mục cùng tên, nhưng trùng dữ liệu thì không hiểu.

2. Tại sao hai thư mục "Học tập" và "Học Tập 1" lại là cái gọi là "trùng dữ liệu" (bởi tôi thấy chúng được tô cùng mầu)? Rõ ràng đây là 2 tên khác nhau.

Nếu "Học tập" và "Học Tập 1" là "trùng dữ liệu" thì tại sao "phim Holywood", và các "phim Holywood 1", ..., "phim Holywood 5" lại không "trùng dữ liệu"? Vì tôi thấy chúng không được tô cùng mầu.

3. Vấn đề này và vấn đề cũ là 2 vấn đề khác nhau hay là một? Bởi code trước khi gặp thư mục đã tồn tại thì không tạo mới, làm sao có thể sảy ra cái gọi là "trùng dữ liệu" được.

Tôi có cảm giác đây là vấn đề ở bài #11 nhưng được bổ sung thêm yêu cầu. Tuy nhiên tôi không hiểu yêu cầu.

Tôi đã viết rồi. Tôi không lanh lợi như bạn và nhiều người. Và tôi không giỏi đoán ý. Cứ phải nói rõ ra. Và nếu dùng khái niệm ít gặp thì phải định nghĩa.
 
Upvote 0
Tôi không hiểu.

1. Bạn hãy định nghĩa khái niệm "trùng dữ liệu". Tôi biết thế nào là 2 thư mục cùng tên, nhưng trùng dữ liệu thì không hiểu.

2. Tại sao hai thư mục "Học tập" và "Học Tập 1" lại là cái gọi là "trùng dữ liệu" (bởi tôi thấy chúng được tô cùng mầu)? Rõ ràng đây là 2 tên khác nhau.

Nếu "Học tập" và "Học Tập 1" là "trùng dữ liệu" thì tại sao "phim Holywood", và các "phim Holywood 1", ..., "phim Holywood 5" lại không "trùng dữ liệu"? Vì tôi thấy chúng không được tô cùng mầu.

3. Vấn đề này và vấn đề cũ là 2 vấn đề khác nhau hay là một? Bởi code trước khi gặp thư mục đã tồn tại thì không tạo mới, làm sao có thể sảy ra cái gọi là "trùng dữ liệu" được.

Tôi có cảm giác đây là vấn đề ở bài #11 nhưng được bổ sung thêm yêu cầu. Tuy nhiên tôi không hiểu yêu cầu.

Tôi đã viết rồi. Tôi không lanh lợi như bạn và nhiều người. Và tôi không giỏi đoán ý. Cứ phải nói rõ ra. Và nếu dùng khái niệm ít gặp thì phải định nghĩa.
Dạ, bây giờ con đọc kỹ con mới hiểu, tên các thư mục được con được tạo cùng 1 thư mục mẹ, nếu bị trùng tên thì chương trình chỉ tạo ra 1 cái thôi.
Thầy có thể giúp con thêm phần tính số lượng thư mục con mình đã tạo.
Cám ơn Thầy nhiều!!!
 
Upvote 0
Dạ, bây giờ con đọc kỹ con mới hiểu, tên các thư mục được con được tạo cùng 1 thư mục mẹ, nếu bị trùng tên thì chương trình chỉ tạo ra 1 cái thôi.
Thầy có thể giúp con thêm phần tính số lượng thư mục con mình đã tạo.
Cám ơn Thầy nhiều!!!
Bạn tự kiểm tra kỹ.

Mã:
Option Explicit

Sub tao_thumuc()
Dim r As Long, pos As Long, dulieu(), folderpath As String, curr_path As String
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
  
    With Sheet1
        r = .Cells(Rows.count, "D").End(xlUp).Row   ' dong cuoi cung trong cot D co ten thu muc Con
        If r < 3 Then Exit Sub
        dulieu = .Range("C3:D" & r).Value ' lay du lieu vao mang dulieu
    End With
    For r = 1 To UBound(dulieu, 1)
        If Not IsEmpty(dulieu(r, 1)) Then   ' thu muc Me
            curr_path = dulieu(r, 1)    ' thu muc Me
            If Right(curr_path, 1) <> "\" Then curr_path = curr_path & "\"
            If Not fso.FolderExists(curr_path) Then fso.CreateFolder curr_path  ' chua ton tai thi tao moi
            pos = r ' chi so dong trong mang dulieu cua thu muc Me hien hanh (curr_path)
            dulieu(pos, 1) = 0  ' trong mang dulieu o vi tri ten thu muc Me hien hanh (curr_path) ta se ghi tong so cac thu muc Con cua thu muc Me
        End If
        If Not IsEmpty(dulieu(r, 2)) And Len(curr_path) Then
            folderpath = curr_path & dulieu(r, 2)   ' duong dan day du toi thu muc Con
            If Not fso.FolderExists(folderpath) Then
                fso.CreateFolder folderpath    ' chua ton tai thi tao moi
                dulieu(pos, 1) = dulieu(pos, 1) + 1 ' tang so thu muc Con them 1
            End If
        End If
    Next r
    
    With Sheet1.Range("E3")
        .Resize(10000).ClearContents    ' xoa ket qua cu
        .Resize(UBound(dulieu, 1)).Value = dulieu ' nhap xuong sheet
    End With
  
    Set fso = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Giải pháp
Bạn tự kiểm tra kỹ.

Mã:
Option Explicit

Sub tao_thumuc()
Dim r As Long, pos As Long, dulieu(), folderpath As String, curr_path As String
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    With Sheet1
        r = .Cells(Rows.count, "D").End(xlUp).Row   ' dong cuoi cung trong cot D co ten thu muc Con
        If r < 3 Then Exit Sub
        dulieu = .Range("C3:D" & r).Value ' lay du lieu vao mang dulieu
    End With
    For r = 1 To UBound(dulieu, 1)
        If Not IsEmpty(dulieu(r, 1)) Then   ' thu muc Me
            curr_path = dulieu(r, 1)    ' thu muc Me
            If Right(curr_path, 1) <> "\" Then curr_path = curr_path & "\"
            If Not fso.FolderExists(curr_path) Then fso.CreateFolder curr_path  ' chua ton tai thi tao moi
            pos = r ' chi so dong trong mang dulieu cua thu muc Me hien hanh (curr_path)
            dulieu(pos, 1) = 0  ' trong mang dulieu o vi tri ten thu muc Me hien hanh (curr_path) ta se ghi tong so cac thu muc Con cua thu muc Me
        End If
        If Not IsEmpty(dulieu(r, 2)) And Len(curr_path) Then
            folderpath = curr_path & dulieu(r, 2)   ' duong dan day du toi thu muc Con
            If Not fso.FolderExists(folderpath) Then
                fso.CreateFolder folderpath    ' chua ton tai thi tao moi
                dulieu(pos, 1) = dulieu(pos, 1) + 1 ' tang so thu muc Con them 1
            End If
        End If
    Next r
   
    With Sheet1.Range("E3")
        .Resize(10000).ClearContents    ' xoa ket qua cu
        .Resize(UBound(dulieu, 1)).Value = dulieu ' nhap xuong sheet
    End With
 
    Set fso = Nothing
End Sub
Dạ. Con cám ơn Thầy trước, 1 chúc con mở máy lên kiểm tra, bây giờ đứa con bé nó bu dính quá, không làm gì được cả
 
Upvote 0
Bạn tự kiểm tra kỹ.

Mã:
Option Explicit

Sub tao_thumuc()
Dim r As Long, pos As Long, dulieu(), folderpath As String, curr_path As String
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    With Sheet1
        r = .Cells(Rows.count, "D").End(xlUp).Row   ' dong cuoi cung trong cot D co ten thu muc Con
        If r < 3 Then Exit Sub
        dulieu = .Range("C3:D" & r).Value ' lay du lieu vao mang dulieu
    End With
    For r = 1 To UBound(dulieu, 1)
        If Not IsEmpty(dulieu(r, 1)) Then   ' thu muc Me
            curr_path = dulieu(r, 1)    ' thu muc Me
            If Right(curr_path, 1) <> "\" Then curr_path = curr_path & "\"
            If Not fso.FolderExists(curr_path) Then fso.CreateFolder curr_path  ' chua ton tai thi tao moi
            pos = r ' chi so dong trong mang dulieu cua thu muc Me hien hanh (curr_path)
            dulieu(pos, 1) = 0  ' trong mang dulieu o vi tri ten thu muc Me hien hanh (curr_path) ta se ghi tong so cac thu muc Con cua thu muc Me
        End If
        If Not IsEmpty(dulieu(r, 2)) And Len(curr_path) Then
            folderpath = curr_path & dulieu(r, 2)   ' duong dan day du toi thu muc Con
            If Not fso.FolderExists(folderpath) Then
                fso.CreateFolder folderpath    ' chua ton tai thi tao moi
                dulieu(pos, 1) = dulieu(pos, 1) + 1 ' tang so thu muc Con them 1
            End If
        End If
    Next r
   
    With Sheet1.Range("E3")
        .Resize(10000).ClearContents    ' xoa ket qua cu
        .Resize(UBound(dulieu, 1)).Value = dulieu ' nhap xuong sheet
    End With
 
    Set fso = Nothing
End Sub
Chương trình chạy đúng như con mong muốn, con cám ơn Thầy nhiều!!!
Chúc Thầy và gia đình, diễn đàn GPE nhiều sức khỏe, cùng nhau sớm vượt qua con đại dịch Covid!!
 
Upvote 0
Web KT

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

Back
Top Bottom