Cách tạo thư mục tự động dựa vào list EXCEL có sẵn

Liên hệ QC

hunglao

Thành viên hoạt động
Tham gia
30/8/09
Bài viết
118
Được thích
17
chào các anh chị


Hiện tại em đang cần làm một công việc , sẽ dựa vào list có sẵn trong excel để
tạo thư mục tự động


Như trong file đính kèm


Level 1: thư mục cấp 1
level 2: thư mục con, cấp 2

_ giả sử trong quá trình tạo, nếu thư mục nào có rồi, nó sẽ bỏ qua ( kể cả level 1 và level 2)

10-27-2012 12-25-07 PM.jpg10-27-2012 12-27-12 PM.jpg



Mỗi khi click nút lệnh excel sẽ tự đông tạo thư mục như list này vào ở đĩa D:\Thumuc\..


Em không biết post chỗ nào cho đúng nữa, mong mod thông cảm


cảm ởn a/c
 

File đính kèm

Lần chỉnh sửa cuối:
Tạo thư mục như vậy thì không khó, nhưng tôi nghĩ hình như bạn chưa xem qua các quy ước về tạo tên file/ folder thì phải!

Đại loại là

- Tên file/ folder thường không sử dụng dấu tiếng Việt, khoảng trắng và các ký tự đặc biệt

- Tên file/ folder thường ngắn gọn, nhìn vào có thể gợi nhớ, có thể nhận biết ngay mục đích của nó.
 
Upvote 0

Tạo thư mục như vậy thì không khó, nhưng tôi nghĩ hình như bạn chưa xem qua các quy ước về tạo tên file/ folder thì phải!

Đại loại là

- Tên file/ folder thường không sử dụng dấu tiếng Việt, khoảng trắng và các ký tự đặc biệt

EM có thể chỉnh sửa thành không dấu, không ký tự đặc biết, còn khoảng trắng phải có

- Tên file/ folder thường ngắn gọn, nhìn vào có thể gợi nhớ, có thể nhận biết ngay mục đích của nó
Em đã cố gắng ngắn nhất có thể
 
Upvote 0
Tạo thư mục như vậy thì không khó, nhưng tôi nghĩ hình như bạn chưa xem qua các quy ước về tạo tên file/ folder thì phải!

Đại loại là

- Tên file/ folder thường không sử dụng dấu tiếng Việt, khoảng trắng và các ký tự đặc biệt

EM có thể chỉnh sửa thành không dấu, không ký tự đặc biết, còn khoảng trắng phải có

- Tên file/ folder thường ngắn gọn, nhìn vào có thể gợi nhớ, có thể nhận biết ngay mục đích của nó
Em đã cố gắng ngắn nhất có thể

Tôi sẽ làm cho bạn (code), thông thường tôi sẽ đặt tên folder như: Hoàng Trọng Nghĩa thì tôi sẽ đặt: HoangTrongNghia hoặc Hoang_Trong_Nghia nhìn thì cũng dễ nhận diện được. Nhưng thôi, quan trọng là thuật toán tôi sẽ làm cho bạn, còn cái này chỉ là phụ thôi.
 
Upvote 0
Tôi sẽ làm cho bạn (code), thông thường tôi sẽ đặt tên folder như: Hoàng Trọng Nghĩa thì tôi sẽ đặt: HoangTrongNghia hoặc Hoang_Trong_Nghia nhìn thì cũng dễ nhận diện được. Nhưng thôi, quan trọng là thuật toán tôi sẽ làm cho bạn, còn cái này chỉ là phụ thôi.

Thanh anh rất nhiều,
Cho mình hỏi là tại sao ko xài dẫu " " dc mà phải dùng "_"....

Thông cảm, em không biết về lập trình
 
Upvote 0
Thanh anh rất nhiều,
Cho mình hỏi là tại sao ko xài dẫu " " dc mà phải dùng "_"....

Thông cảm, em không biết về lập trình

Xài gì cũng được, vì đâu ai cấm khoảng trắng đâu nhỉ? Chỉ khi sử dụng hàm Dir sẽ phát sinh ra lỗi trong lập trình khi tìm/ tạo tên file thôi.
 
Upvote 0
Tôi sẽ làm cho bạn (code), thông thường tôi sẽ đặt tên folder như: Hoàng Trọng Nghĩa thì tôi sẽ đặt: HoangTrongNghia hoặc Hoang_Trong_Nghia nhìn thì cũng dễ nhận diện được. Nhưng thôi, quan trọng là thuật toán tôi sẽ làm cho bạn, còn cái này chỉ là phụ thôi.
Viết thì viết nhanh cho rồi, hứa làm gì để cho mình ngồi mong đợi code của anh vậy ta? Cái này chắc dùng FileSystemObject. Lâu rồi quên mất tiêu.
 
Upvote 0
Tạo thư mục như vậy thì không khó, nhưng tôi nghĩ hình như bạn chưa xem qua các quy ước về tạo tên file/ folder thì phải!

Đại loại là

- Tên file/ folder thường không sử dụng dấu tiếng Việt, khoảng trắng và các ký tự đặc biệt

- Tên file/ folder thường ngắn gọn, nhìn vào có thể gợi nhớ, có thể nhận biết ngay mục đích của nó.
Làm được tuốt nếu dùng Scripting.FileSystemObject
Mã:
Sub CreateFolder(ByVal Data_Table As Range)
  Dim tmpArr, Arr()
  Dim lR As Long, lC As Long
  Dim tmp1 As String, tmp2 As String, sRoot As String
  On Error GoTo ExitSub
  sRoot = ThisWorkbook.Path
  tmpArr = Data_Table.Value
  ReDim Arr(1 To UBound(tmpArr, 1), 1 To UBound(tmpArr, 2))
  With CreateObject("Scripting.FileSystemObject")
    For lC = 1 To UBound(tmpArr, 2)
      For lR = 1 To UBound(tmpArr, 1)
        tmp1 = Trim(tmpArr(lR, lC))
        If Len(tmp1) Then
          If lC = 1 Then
            tmp2 = sRoot & "\" & tmp1
          Else
            tmp2 = Arr(lR, lC - 1) & "\" & tmp1
          End If
          Arr(lR, lC) = tmp2
          If Not .FolderExists(tmp2) Then .CreateFolder tmp2
        End If
      Next
    Next
  End With
ExitSub:
End Sub
PHP:
Sub Main()
  Dim SrcRng As Range
  Set SrcRng = Sheet1.Range("A2:D100")
  CreateFolder SrcRng
End Sub
Chạy Sub Main rồi kiểm tra kết quả nhé
 
Upvote 0
Làm được tuốt nếu dùng Scripting.FileSystemObject
Mã:
Sub CreateFolder(ByVal Data_Table As Range)
  Dim tmpArr, Arr()
  Dim lR As Long, lC As Long
  Dim tmp1 As String, tmp2 As String, sRoot As String
  On Error GoTo ExitSub
  sRoot = ThisWorkbook.Path
  tmpArr = Data_Table.Value
  ReDim Arr(1 To UBound(tmpArr, 1), 1 To UBound(tmpArr, 2))
  With CreateObject("Scripting.FileSystemObject")
    For lC = 1 To UBound(tmpArr, 2)
      For lR = 1 To UBound(tmpArr, 1)
        tmp1 = Trim(tmpArr(lR, lC))
        If Len(tmp1) Then
          If lC = 1 Then
            tmp2 = sRoot & "\" & tmp1
          Else
            tmp2 = Arr(lR, lC - 1) & "\" & tmp1
          End If
          Arr(lR, lC) = tmp2
          If Not .FolderExists(tmp2) Then .CreateFolder tmp2
        End If
      Next
    Next
  End With
ExitSub:
End Sub
PHP:
Sub Main()
  Dim SrcRng As Range
  Set SrcRng = Sheet1.Range("A2:D100")
  CreateFolder SrcRng
End Sub
Chạy Sub Main rồi kiểm tra kết quả nhé

Anh nhúng vào file excel cho em được không. không phải thích ăn sãn đâu. như em đã trình bày, em ko biết lập trình
 
Upvote 0
Anh nhúng vào file excel cho em được không. không phải thích ăn sãn đâu. như em đã trình bày, em ko biết lập trình
Thì copy code cho vào Module rồi Alt + F8 chạy Sub Main thôi
Nó đây
Lưu ý: Bạn tải file của tôi về máy tính, bạn lưu file chổ nào thì những thư mục được tạo ra sẽ bắt đầu từ đó
 

File đính kèm

Upvote 0
Thì copy code cho vào Module rồi Alt + F8 chạy Sub Main thôi
Nó đây
Lưu ý: Bạn tải file của tôi về máy tính, bạn lưu file chổ nào thì những thư mục được tạo ra sẽ bắt đầu từ đó

Sao em thấy em làm khác Thầy nhỉ?

PHP:
Sub CreateNewFolder()
    Dim MyPath As String, MyFolderL1 As String, MyFolderL2 As String
    Dim sArray As Variant, i As Long
    
    With Sheets("Sheet1")
        sArray = Range(.[A2], .[A65536].End(xlUp)).Resize(, 2).Value
    End With
    
    MyPath = "D:\ThuMuc\"
    
    With CreateObject("Scripting.FileSystemObject")
        If .FolderExists(MyPath) = False Then .CreateFolder (MyPath)
        For i = 1 To UBound(sArray)
            MyFolderL1 = MyPath & sArray(i, 1) & "\"
            If .FolderExists(MyFolderL1) = False Then .CreateFolder (MyFolderL1)
            MyFolderL2 = MyPath & sArray(i, 1) & "\" & sArray(i, 2)
            If .FolderExists(MyFolderL2) = False Then .CreateFolder (MyFolderL2)
        Next
    End With

End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi cách vẽ biệt đồ dạng 2 trục tung, một trục hoành!
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Sao em thấy em làm khác Thầy nhỉ?

PHP:
Sub CreateNewFolder()
    Dim MyPath As String, MyFolderL1 As String, MyFolderL2 As String
    Dim sArray As Variant, i As Long
    
    With Sheets("Sheet1")
        sArray = Range(.[A2], .[A65536].End(xlUp)).Resize(, 2).Value
    End With
    
    MyPath = "D:\ThuMuc\"
    
    With CreateObject("Scripting.FileSystemObject")
        If .FolderExists(MyPath) = False Then .CreateFolder (MyPath)
        For i = 1 To UBound(sArray)
            MyFolderL1 = MyPath & sArray(i, 1) & "\"
            If .FolderExists(MyFolderL1) = False Then .CreateFolder (MyFolderL1)
            MyFolderL2 = MyPath & sArray(i, 1) & "\" & sArray(i, 2)
            If .FolderExists(MyFolderL2) = False Then .CreateFolder (MyFolderL2)
        Next
    End With

End Sub
Khác là phải rồi
Nghĩa làm đúng CHI TIẾT như trong file người ta cho (List chỉ có 2 cột)
Tôi làm TỔNG QUÁT (bao nhiêu cột cũng được)
Thử tưởng tượng 1 List có 10 cột (A2:J50 chẳng hạn) thì Nghĩa sẽ.. IF đến bao giờ?
Ẹc... ẹc...
 
Upvote 0
Khác là phải rồi
Nghĩa làm đúng CHI TIẾT như trong file người ta cho (List chỉ có 2 cột)
Tôi làm TỔNG QUÁT (bao nhiêu cột cũng được)
Thử tưởng tượng 1 List có 10 cột (A2:J50 chẳng hạn) thì Nghĩa sẽ.. IF đến bao giờ?
Ẹc... ẹc...

Coi chừng với việc tạo folder Thầy ơi, 1 folder có nhiều folder bên trong, nói chung là nó có rất nhiều nhánh, hỏng biết cái của Thầy nó tổng quát không nhỉ? Cho nên em chỉ làm đúng chi tiết đã có thôi.
 
Upvote 0
Coi chừng với việc tạo folder Thầy ơi, 1 folder có nhiều folder bên trong, nói chung là nó có rất nhiều nhánh, hỏng biết cái của Thầy nó tổng quát không nhỉ? Cho nên em chỉ làm đúng chi tiết đã có thôi.

Thì nghĩa cứ thử đi! Trong file ấy cứ gõ lăng nhăng gì đó đến cột J chẳng hạn. Xong sửa sub Main thảnh
Mã:
Sub Main()
  Dim SrcRng As Range
  Set SrcRng = Sheet1.Range("A2:J100")
  CreateFolder SrcRng
End Sub
Test thử và kiểm tra sẽ biết liền
Ẹc... Ẹc...
 
Upvote 0
Web KT

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

Back
Top Bottom