Code VBA bị lỗi type mismatch

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

mraleno

Thành viên chính thức
Tham gia
1/12/09
Bài viết
68
Được thích
18
Vấn đề của em là do học vẹt mà ra. em mò từ mạng thì tự tạo ra một đoạn code giúp em tự động tạo thư mục và copy file cần thiết vào. Nhưng chạy đi chạy lại vẫn bị lỗi type mismatch. Em bí quá không biết sửa như thế nào. Mong anh em diễn đàn giúp đơn giùm:

Mã:
Sub create_folder()
Option Explicit
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim src As String, f1 As String, f2 As String, subno As String, hcm As String, r1 As String, r2 As String, OTR As String, OSP As String, DTR As String, DSP As String, ts As String, ss As String
Dim rng As Range
Dim l1 As Integer, l2 As Integer, i As Integer
Dim maxdate As Date
Dim Cell As Range

 

subno = Sheet1.Range("A1").Value
hcm = Sheet2.Cells(2, 5).Value
src = Sheet2.Cells(1, 5).Value
Set rng = Sheet2.Range("J1:J4")
f1 = hcm & Left(subno, 3)
f2 = hcm & subno

 

If Not fso.FolderExists(src & f1) Then
    fso.CreateFolder src & f1
End If
src = src & f1 & "\"

 

If Not fso.FolderExists(src & f2) Then
    fso.CreateFolder src & f2
End If
src = src & f2 & "\"
For Each Cell In rng.Cells
    MkDir src & Cell.Value
Next Cell

 

l1 = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
l2 = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
r1 = Sheet1.Range("A3:A" & l1).Value
r2 = Sheet1.Range("B3:B" & l2).Value

 

ts = Sheet2.Cells(1, 2).Value
ss = Sheet2.Cells(2, 2).Value
maxdate = FileDateTime(ts & r1(1, 1))
OTR = ts & r1(1, 1)

 

For i = 1 To UBound(r1)
    If FileDateTime(ts & r1(i, 1)) > maxdate Then
        maxdate = FileDateTime(ts & r1(i, 1))
        OTR = ts & r1(i, 1)
    End If
Next i

 

DTR = src & Sheet2.Range("J2").Value
FileCopy OTR, DTR


DSP = src & Sheet2.Range("J1").Value

For i = 1 To UBound(r2)
    OSP = ss & r2(i, 1)
    FileCopy OSP, DSP
Next i
End Sub
 
cái dòng option explicit là em tự bỏ vô vì em nghe nói nó giúp báo lỗi khai báo biến. còn trên mạng em học mỗi nơi 1 ít . em học cách tạo thư mục, cách copy file, và đọc thêm bài file system object của diễn đàn (của anh @Quang_Hải ). nhưng khi kết hợp lại thì báo lỗi. Không biết phải làm sao.

em chỉ biết vấn đề của đoạn code nó nằm ở chỗ khai báo r1, và r2 sau đó lấy giá trị trong 2 mảng này ra ghép với biến khác thì bị báo lỗi type mismatch.

Em đã thử không sử dụng biến phụ mà lấy luôn giá trị nằm trong ô trên sheet excel. Nhưng vẫn bị lỗi
Em đang tìm cách quy hết các biến về một kiểu string bằng thuộc tính Cstr (cũng mới tra google ra). nhưng chưa biết cách

Mục đích của em là tạo 2 thư mục mẹ sau đó là 4 thư mục con. Trong 4 thư mục con thì có 2 thư mục sẽ có file copy từ một đường dẫn khác. thư mục đầu tiên sẽ kiểm tra các file em đã liệt kê sẵn trên sheet excel cột A (có đường dẫn và tên file) xem file nào cập nhật mới nhất sẽ lấy file đó copy. còn thư mục thứ 2 sẽ copy hết các file em liệt kê trên sheet excel cột B
 
Upvote 0
cái dòng option explicit là em tự bỏ vô vì em nghe nói nó giúp báo lỗi khai báo biến. ...
Bạn cất nhá. Người ta bảo nhà nên có máng xối để dẫn nước mưa. Bạn ra chợ vác mọt cái máng xối về thảy vào phòng khách là xong?
Ít nhất cũng phải biết bỏ nó vào đâu chứ.
 
Upvote 0
thực ra là em bỏ nó đi rồi nhưng vẫn báo lỗi
Câu này gần như ra tối hậu thư: Hãy tìm lỗi nữa cho tôi:
→ Nó là đang ở dòng lệnh nào
→ Đó là lỗi gì?
→ Bạn khắc phục nó rồi thì nên báo cho tôi & mọi người biết phương cách khắc phục của bạn
 
Upvote 0
Chứng tỏ bài đó chưa xịn. Bài siêu xịn ở đây này.

 
Upvote 0
Vấn đề của em là do học vẹt mà ra. em mò từ mạng thì tự tạo ra một đoạn code giúp em tự động tạo thư mục và copy file cần thiết vào. Nhưng chạy đi chạy lại vẫn bị lỗi type mismatch. Em bí quá không biết sửa như thế nào. Mong anh em diễn đàn giúp đơn giùm:

Mã:
Sub create_folder()
Option Explicit
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim src As String, f1 As String, f2 As String, subno As String, hcm As String, r1 As String, r2 As String, OTR As String, OSP As String, DTR As String, DSP As String, ts As String, ss As String
Dim rng As Range
Dim l1 As Integer, l2 As Integer, i As Integer
Dim maxdate As Date
Dim Cell As Range

 

subno = Sheet1.Range("A1").Value
hcm = Sheet2.Cells(2, 5).Value
src = Sheet2.Cells(1, 5).Value
Set rng = Sheet2.Range("J1:J4")
f1 = hcm & Left(subno, 3)
f2 = hcm & subno

 

If Not fso.FolderExists(src & f1) Then
    fso.CreateFolder src & f1
End If
src = src & f1 & "\"

 

If Not fso.FolderExists(src & f2) Then
    fso.CreateFolder src & f2
End If
src = src & f2 & "\"
For Each Cell In rng.Cells
    MkDir src & Cell.Value
Next Cell

 

l1 = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
l2 = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
r1 = Sheet1.Range("A3:A" & l1).Value
r2 = Sheet1.Range("B3:B" & l2).Value

 

ts = Sheet2.Cells(1, 2).Value
ss = Sheet2.Cells(2, 2).Value
maxdate = FileDateTime(ts & r1(1, 1))
OTR = ts & r1(1, 1)

 

For i = 1 To UBound(r1)
    If FileDateTime(ts & r1(i, 1)) > maxdate Then
        maxdate = FileDateTime(ts & r1(i, 1))
        OTR = ts & r1(i, 1)
    End If
Next i

 

DTR = src & Sheet2.Range("J2").Value
FileCopy OTR, DTR


DSP = src & Sheet2.Range("J1").Value

For i = 1 To UBound(r2)
    OSP = ss & r2(i, 1)
    FileCopy OSP, DSP
Next i
End Sub
Rõ ràng bạn không biết cách hỏi, tự làm khó mình thêm. Lần sau thì phải nói rõ lỗi dòng nào chứ ai hơi đâu đọc cả sub của bạn để tìm ra dòng lỗi để debug cho bạn.

Đọc bài #3 của bạn thì tôi thấy lỗi của bạn là khai báo r1 r2 là string mà lại gán mảng cho chúng
 
Upvote 0
Rõ ràng bạn không biết cách hỏi, tự làm khó mình thêm. Lần sau thì phải nói rõ lỗi dòng nào chứ ai hơi đâu đọc cả sub của bạn để tìm ra dòng lỗi để debug cho bạn.

Đọc bài #3 của bạn thì tôi thấy lỗi của bạn là khai báo r1 r2 là string mà lại gán mảng cho chúng
cách này mình làm ở các code khác của mình và nó vẫn hoạt động. Mình gán giá trị trong một mảng cho r1, r2 chứ không gán mảng. sau đó lấy giá trị đó ra sử dụng. Bạn có cách nào khai báo khác mà vẫn đúng không? vì bạn chất ô này là một hyperlink và mình chỉ lấy giá trị hiển thị trong ô hyperlink này như vậy thì có được hiểu là string không
Bài đã được tự động gộp:

Chứng tỏ bài đó chưa xịn. Bài siêu xịn ở đây này.

cảm ơn anh @befaint bài của anh có thể giúp em viết lại code cho hợp lý. em sẽ nghiên cứu thêm để sửa
 
Upvote 0
Rõ ràng bạn không biết cách hỏi, tự làm khó mình thêm. Lần sau thì phải nói rõ lỗi dòng nào chứ ai hơi đâu đọc cả sub của bạn để tìm ra dòng lỗi để debug cho bạn.
Đọc bài #3 của bạn thì tôi thấy lỗi của bạn là khai báo r1 r2 là string mà lại gán mảng cho chúng
cách này mình làm ở các code khác của mình và nó vẫn hoạt động. Mình gán giá trị trong một mảng cho r1, r2 chứ không gán mảng. sau đó lấy giá trị đó ra sử dụng. Bạn có cách nào khai báo khác mà vẫn đúng không? vì bạn chất ô này là một hyperlink và mình chỉ lấy giá trị hiển thị trong ô hyperlink này như vậy thì có được hiểu là string không
Chốt lại là trình bày khá dài dòng nhưng vẫn không nêu được vấn đề bài #8 cần biết là lỗi ở dòng nào.
 
Upvote 0
Sorry mọi người vì cách nêu vấn đề của mình. Cảm ơn vì anh em đã quan tâm. Mình sẽ học thêm bài của anh @befaint để tìm lời giải. Chúc anh em cuối tuần vui vẻ
 
Upvote 0
Sorry mọi người vì cách nêu vấn đề của mình. Cảm ơn vì anh em đã quan tâm. Mình sẽ học thêm bài của anh @befaint để tìm lời giải. Chúc anh em cuối tuần vui vẻ
Học bài đó cũng thế thôi, vẫn kiểu nhặt lặt cho vào bị hết, rồi ăn thì sẽ khó mà ăn được ... nếu không muốn nói là phải bỏ hết đi.
 
Upvote 0
Tớ nghịch thử thì:
- Option explichếttiệt nên bỏ. Khi đạt trình cao thì dùng.
- dim r1(), r2()........
- Sheet2 nguy hiểm, làm sao biết sheet mấy khi mà insert, xoá, rồi insert sheet? Các tiền bối hay dùng sheets(sheet tên là gì).range........
- tiếp theo thì bí. Há há há.....

PS: mời các bác thì nên mời rượu, mồi. Hiện chủ đề này mới chỉ bày chén và đũa. 2 ngày rồi mà chưa thấy bưng mâm lên. Mâm tiếng Anh nghĩa là fAi đềmơ về con mấy.
anh có cách nào hay hơn không chỉ em với
 
Upvote 0
cách này mình làm ở các code khác của mình và nó vẫn hoạt động. Mình gán giá trị trong một mảng cho r1, r2 chứ không gán mảng.
Bạn quá siêu, gán được giá trị trong 1 mảng cho biến String. Vậy đâu cần đi hỏi nữa mà mở lớp dạy được rồi.
 
Upvote 0
Thớt này học đốt giai đoạn cho nên kiến thức tán loạn cả lên.
Thay vì chịu ngậm bồ hòn (tiếng Tây là bite the bullet/cắn viên đạn) học lại thì thớt muốn cứ lủi đầu đi tiếp. Những chỗ sai do không hiểu rõ ngữ pháp thì cứ đưa lên đây hỏi. Hy vọng của thớt là "có công màu sắt...", hỏi cho nhiều rồi nó cũng thấm vào đầu.
Nhiều người cho rằng đây là cách học thành công nhanh.
 
Upvote 0
Web KT

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

Back
Top Bottom