Giúp chỉ chỗ gây lỗi 13 TYPER MISMATCH trong đoạn code (1 người xem)

Liên hệ QC

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

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mã:
Sub tonghopdonhang()
Dim dic As Object
Dim i As Long, j As Long, nguon, tim, Kq()
Set dic = CreateObject("scripting.dictionary")
With Worksheets("donhang")
    .Range("I6:AS" & .[B6500].End(xlUp).Row).ClearContents
    nguon = .Range("A6:AS" & .[B6500].End(xlUp).Row)
    ReDim Kq(1 To UBound(nguon, 1), 1 To 45)
    Kq = .Range("A6:AS" & .[B6500].End(xlUp).Row)
    For i = 1 To UBound(nguon, 1)
        If Not dic.exists(nguon(i, 3)) Then dic.Add nguon(i, 3), i
    Next
End With
With Worksheets("DRAFDH")
    tim = .Range("A6:AO" & .[B6500].End(xlUp).Row)
    For i = 1 To UBound(tim, 1)
        If dic.exists(tim(i, 3)) Then
            For j = 5 To 41
                Kq(dic.tim(i, 3), j + 4) = Kq(dic.tim(i, 3), j + 4) + tim(i, j)
            Next
        End If
    Next
End With
Worksheets("donhang").Range("A6:AS" & Worksheets("donhang").[B6500].End(xlUp).Row) = Kq
End Sub
Mình đang học viết code bằng dictionary nhưng bị phát sinh lỗi. Timf trên diễn đàn nhưng vẫn chưa tự giải quyết được. Lại nhờ anh em trên diễn đàn chỉ giáo!!
-- Mục đích bài này:
--Có 1 sheet DRAFDH chưa nhiều mã và có lập lại, cột 3 là mã hàng, cột 5>> bắt đầu có đơn hàng theo (36 cột)
--Có 1 sheet donhang có chứa mã bên DRAFDH nhưng không lặp lại, cột 3 là cột mã, cột 9 bắt đầu đơn hàng (36 cột)
>>>dùng dic tổng hợp đơn hàng từ DRAFDH về donhang
 
Nên đưa file lên kèm bạn à.

///////////////////\\\\\\\\\\\\\\\\\\\//////////////////\\\\\\\\\\\\\\\,,,,,,,,,,,,,,,,
 
Lần chỉnh sửa cuối:
Upvote 0
Nên đưa file lên kèm bạn à.

///////////////////\\\\\\\\\\\\\\\\\\\//////////////////\\\\\\\\\\\\\\\,,,,,,,,,,,,,,,,
Sau khi làm file để up lên phát hiện là lỗi khác chỗ bôi code màu đỏ
Mã:
Sub tonghopdonhang()
Dim dic As Object
Dim i As Long, j As Long, nguon, tim(), Kq(), n As Long
Set dic = CreateObject("scripting.dictionary")
With Worksheets("donhang")
    .Range("I6:AS" & .[B6500].End(xlUp).Row).ClearContents
    nguon = .Range("A6:AS" & .[B6500].End(xlUp).Row)
    ReDim Kq(1 To UBound(nguon, 1), 1 To 45)
    Kq = .Range("A6:AS" & .[B6500].End(xlUp).Row).Value         [COLOR=#ff0000]'thieu .value đã thêm[/COLOR]
    For i = 1 To UBound(nguon, 1)
        If Not dic.exists(nguon(i, 3)) Then dic.Add nguon(i, 3), i
    Next
End With
With Worksheets("DRAFDH")
    tim = .Range("A6:AO" & .[B6500].End(xlUp).Row)
    For i = 1 To UBound(tim, 1)
        If dic.exists(tim(i, 3)) Then
            For j = 5 To 41
              
               [COLOR=#ff0000] Kq(dic.Item tim(i, 3), j + 4) = Kq(dic.Item tim(i, 3), j + 4) + tim(i, j)[/COLOR]     ' Thiếu thuộc tính .Item đã sửa nhưng vẫn chưa được
            Next
        End If
    Next
End With
Worksheets("donhang").Range("A6:AS" & Worksheets("donhang").[B6500].End(xlUp).Row) = Kq
End Sub
 

File đính kèm

Upvote 0
Sau khi làm file để up lên phát hiện là lỗi khác chỗ bôi code màu đỏ
Mã:
Sub tonghopdonhang()
Dim dic As Object
Dim i As Long, j As Long, nguon, tim(), Kq(), n As Long
Set dic = CreateObject("scripting.dictionary")
With Worksheets("donhang")
    .Range("I6:AS" & .[B6500].End(xlUp).Row).ClearContents
    nguon = .Range("A6:AS" & .[B6500].End(xlUp).Row)
    ReDim Kq(1 To UBound(nguon, 1), 1 To 45)
    Kq = .Range("A6:AS" & .[B6500].End(xlUp).Row).Value         [COLOR=#ff0000]'thieu .value đã thêm[/COLOR]
    For i = 1 To UBound(nguon, 1)
        If Not dic.exists(nguon(i, 3)) Then dic.Add nguon(i, 3), i
    Next
End With
With Worksheets("DRAFDH")
    tim = .Range("A6:AO" & .[B6500].End(xlUp).Row)
    For i = 1 To UBound(tim, 1)
        If dic.exists(tim(i, 3)) Then
            For j = 5 To 41
              
               [COLOR=#ff0000] Kq(dic.Item tim(i, 3), j + 4) = Kq(dic.Item tim(i, 3), j + 4) + tim(i, j)[/COLOR]     ' Thiếu thuộc tính .Item đã sửa nhưng vẫn chưa được
            Next
        End If
    Next
End With
Worksheets("donhang").Range("A6:AS" & Worksheets("donhang").[B6500].End(xlUp).Row) = Kq
End Sub

Viết gì kỳ vậy? Vầy mới đúng chứ
Mã:
Kq(dic.Item(tim(i, 3)), j + 4) = Kq(dic.Item(tim(i, 3)), j + 4) + tim(i, j)
Ngoài ra, sửa:
Mã:
tim = .Range("A6:AO" & .[B6500].End(xlUp).Row)
thành:
Mã:
tim = .Range("A6:AO" & .[B6500].End(xlUp).Row).Value
-----------
Chỉ sửa cú pháp, còn chuyện kết quả đúng sai tôi không biết đâu nha
 
Upvote 0
Viết gì kỳ vậy? Vầy mới đúng chứ
Mã:
Kq(dic.Item(tim(i, 3)), j + 4) = Kq(dic.Item(tim(i, 3)), j + 4) + tim(i, j)
Ngoài ra, sửa:
Mã:
tim = .Range("A6:AO" & .[B6500].End(xlUp).Row)
thành:
Mã:
tim = .Range("A6:AO" & .[B6500].End(xlUp).Row).Value
-----------
Chỉ sửa cú pháp, còn chuyện kết quả đúng sai tôi không biết đâu nha
Vâng đúng lầ đẫ OK men. Tiện đây em cũng muốn hỏi luôn khi nào mình cho thuộc tính .VALUE và khi nào không dùng ạ
(EM MỚI BIẾT VỀ CODE DIC NÊN CÒN CHƯA THẠO !!!)
 
Upvote 0
Vâng đúng lầ đẫ OK men. Tiện đây em cũng muốn hỏi luôn khi nào mình cho thuộc tính .VALUE và khi nào không dùng ạ
(EM MỚI BIẾT VỀ CODE DIC NÊN CÒN CHƯA THẠO !!!)

Nếu khai báo
Dim tim
thì
tim = Range()
Khỏi .Value
Nếu khai báo
Dim tim()
thì
tmp = Range().Value
phải có .Value
-------------
Bạn có thể thí nghiệm để biết. Nhưng tốt nhất nên TƯỜNG MINH (luôn có .Value cho chắc)
Kinh nghiệm của tôi:
- Với biến mảng do ta tự thiết kế chiều và số phần tử (chẳng hạn biến kg trong code của bạn) thì sẽ khai báo nó dạng mảng (Dim kg() )
- Với biến mảng mà kết quả của nó được lấy từ dữ liệu khác (chẳng hạn được gán từ range) thì sẽ khai báo nó dạng Variant (Dim tim)
Vậy thôi
 
Upvote 0
Nếu khai báo
Dim tim
thì
tim = Range()
Khỏi .Value
Nếu khai báo
Dim tim()
thì
tmp = Range().Value
phải có .Value
-------------
Bạn có thể thí nghiệm để biết. Nhưng tốt nhất nên TƯỜNG MINH (luôn có .Value cho chắc)
Kinh nghiệm của tôi:
- Với biến mảng do ta tự thiết kế chiều và số phần tử (chẳng hạn biến kg trong code của bạn) thì sẽ khai báo nó dạng mảng (Dim kg() )
- Với biến mảng mà kết quả của nó được lấy từ dữ liệu khác (chẳng hạn được gán từ range) thì sẽ khai báo nó dạng Variant (Dim tim)
Vậy thôi
Em cảm ơn anh ạ!Em se vận dũng nhưng cái đó vào các code sau em viết để code tốt hơn ạ!
 
Upvote 0

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

Back
Top Bottom