Xin giúp sửa đoạn code trong file đính kèm

Liên hệ QC

huyhoang_mmyeht

Thành viên hoạt động
Tham gia
5/5/09
Bài viết
142
Được thích
12
- Nhờ các bạn giúp mình với mình không hiểu về VBA có xin được một đoạn code nhưng khi mình muốn thay đổi chút thì nó không hoạt động.
- Khi dòng đầu tiên có bất kỳ chữ gì thì nó đều không hoạt động nhưng khi mình xóa nó đi thì nó vẩn hoạt động bình thường.
- Nhưng vì dòng đầu tiên mình muốn ghi tiêu đề vào dạng như báo cáo thì nó không hoạt động. Mình loay hoay mãi mà không sửa được code dù mình có thay đổi thế nào đi nữa.
Mong các bạn giúp mình với chân thành cảm ơn.
 

File đính kèm

  • Test macro.xlsm
    27.1 KB · Đọc: 14
Dòng đầu tiên tức là dòng 1 phải không bạn? Vậy "dòng đầu tiên có bất kỳ chữ gì" cụ thể là ô nào, hay là bất kỳ ô nào của dòng 1 có dữ liệu cũng bị lỗi đó?
 
Upvote 0
Dòng đầu tiên tức là dòng 1 phải không bạn? Vậy "dòng đầu tiên có bất kỳ chữ gì" cụ thể là ô nào, hay là bất kỳ ô nào của dòng 1 có dữ liệu cũng bị lỗi đó?
bất kỳ ô nào dòng đâu tiên cũng bị bạn. mình đã thử bỏ i=3 cũng không được, tài vì dòng đầu tư mình muốn để các điều kiện ẩn và tiêu đề ở đó dùng cho các mục đích khách nhau.
 
Upvote 0
bất kỳ ô nào dòng đâu tiên cũng bị bạn. mình đã thử bỏ i=3 cũng không được, tài vì dòng đầu tư mình muốn để các điều kiện ẩn và tiêu đề ở đó dùng cho các mục đích khách nhau.
Tôi đang ở trên điện thoại nên bạn chép đoạn code đó lên đây mới xem được.
 
Upvote 0
Tôi đang ở trên điện thoại nên bạn chép đoạn code đó lên đây mới xem được.
Sub TEST() Dim lr&, i&, j&, k&, id As String, com, s, sb Dim dic As Object, key, res(), arr(1 To 100000, 1 To 3), rng Set dic = CreateObject("Scripting.Dictionary") With Sheets("DATA") lr = .Cells(Rows.Count, "A").End(xlUp).Row rng = .Range("A2:F" & lr).Value2 End With For i = 1 To UBound(rng) id = rng(i, 2) & "|" & rng(i, 1) If Not dic.exists(id) Then dic.Add id, rng(i, 5) & "|" & rng(i, 6) Else dic(id) = dic(id) & "@" & rng(i, 5) & "|" & rng(i, 6) End If Next Sheets("Commercial").Activate With Range("A2:AQ" & lr).CurrentRegion rng = .Value2 .ClearComments End With For i = 2 To UBound(rng) For j = 4 To UBound(rng, 2) id = rng(i, 1) & "|" & rng(1, j) If dic.exists(id) Then k = k + 1: arr(k, 1) = i + 1 arr(k, 2) = j: arr(k, 3) = dic(id) End If Next Next For i = 1 To k com = Split(arr(i, 3), "@"): id = "" If UBound(com) = 0 Then sb = Split(com(0), "|") arr(i, 3) = "Quantity: " & sb(0) & vbLf & "Reason: " & sb(1) Else For Each sb In com s = Split(sb, "|") id = id & "Quantity: " & s(0) & ", Reason: " & s(1) & vbLf Next arr(i, 3) = id End If Cells(arr(i, 1), arr(i, 2)).AddComment arr(i, 3) Next End Sub
đay bạn nhé
 
Upvote 0
Do cái dòng này nè
With Range("A2:AQ" & lr).CurrentRegion
Nếu có gì ở dòng 1 thì nó lấy luôn từ A1 đến AQ & lr.

Bạn thử bỏ .CurrentRegion đi, tức là chỉ cần With Range("A2:AQ" & lr)
 
Upvote 0
bỏ CurrentRegion đi nó sẽ không thực hiện dù dòng 1 có hay không bạn à mình vừa test
 
Upvote 0
bỏ CurrentRegion đi nó sẽ không thực hiện dù dòng 1 có hay không bạn à mình vừa test
Code viết sai ở chỗ dùng biến lr của sheet data cho sheet Commercial (nhưng may là có CurrentRegion nó mới lấy được hết khối dữ liệu từ A2:AQ10)
Vẫn bỏ CurrentRegion và thêm dòng lr = Cells(Rows.Count, "L").End(xlUp).Row sau dòng Sheets("Commercial").Activate
 
Upvote 0
Code viết sai ở chỗ dùng biến lr của sheet data cho sheet Commercial (nhưng may là có CurrentRegion nó mới lấy được hết khối dữ liệu từ A2:AQ10)
Vẫn bỏ CurrentRegion và thêm dòng lr = Cells(Rows.Count, "L").End(xlUp).Row sau dòng Sheets("Commercial").Activate
đúng rồi mình đã sửa và code chạy tốt, chân thành cảm ơn bạn.
 
Upvote 0
Web KT

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

Back
Top Bottom