Nhờ các bạn sửa giúp đoạn code

Liên hệ QC

le_vis

Thành viên tích cực
Tham gia
23/7/09
Bài viết
1,273
Được thích
772
Đoạn code đang báo lỗi dòng đánh dấu mầu đỏ - đoạn dưới If Target.Column = 7 họa động bình thường
Nhờ các bạn sửa giúp - Trân trọng cảm ơn !
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim d, I, Vung, Ws

Set d = CreateObject("scripting.dictionary")

Set Ws = Sheets("DM_hang")

Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4)

If Not Intersect(Target, Range("AA4:AA200")) Is Nothing Then

If Target.Count = 1 Then

For I = 1 To UBound(Vung)

d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))

Next I

If d.exists(UCase(Target.Value)) Then

Target.Offset(, 2) = d.Item(UCase(Target.Value))(58)

End If

End If

End If

If Target.Column = 7 And Target.Row = 1 And Target.Row < 7 Then

Sheets("Form").Range("D3") = Selection.Text

End If

End Sub
 
Lần chỉnh sửa cuối:

Nhpờ các bạn sửa giúp đoạn code​

Đoạn code đang báo lỗi dòng đánh dấu mầu đỏ - đoạn dưới If Target.Column = 7 họa động bình thường
Nhờ các bạn sửa giúp - Trân trọng cảm ơn !
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim d, I, Vung, Ws
Set d = CreateObject("scripting.dictionary")
Set Ws = Sheets("DM_hang")
Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4)
If Not Intersect(Target, Range("AA4:AA200")) Is Nothing Then
If Target.Count = 1 Then
For I = 1 To UBound(Vung)
d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
Next I
If d.exists(UCase(Target.Value)) Then
Target.Offset(, 2) = d.Item(UCase(Target.Value))(58)
End If
End If
End If
If Target.Column = 7 And Target.Row = 1 And Target.Row < 7 Then
Sheets("Form").Range("D3") = Selection.Text
End If
End Sub
Sửa lại tiêu đề một chút đi bạn. Nên cho code vào trong thẻ code cho gọn.
 
Upvote 0
Đoạn code đang báo lỗi dòng đánh dấu mầu đỏ - đoạn dưới If Target.Column = 7 họa động bình thường
Nhờ các bạn sửa giúp - Trân trọng cảm ơn !
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim d, I, Vung, Ws

Set d = CreateObject("scripting.dictionary")

Set Ws = Sheets("DM_hang")

Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4)

If Not Intersect(Target, Range("AA4:AA200")) Is Nothing Then

If Target.Count = 1 Then

For I = 1 To UBound(Vung)

d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))

Next I

If d.exists(UCase(Target.Value)) Then

Target.Offset(, 2) = d.Item(UCase(Target.Value))(58)

End If

End If

End If

If Target.Column = 7 And Target.Row = 1 And Target.Row < 7 Then

Sheets("Form").Range("D3") = Selection.Text

End If

End Sub
Thử sửa dòng trên thành dòng dưới xem còn báo lỗi không rồi tính tiếp
Mã:
'd.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
d(Vung(I, 1))= Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
 
Upvote 0
Thử sửa dòng trên thành dòng dưới xem còn báo lỗi không rồi tính tiếp
Mã:
'd.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
d(Vung(I, 1))= Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
Em còn chưa hiểu ý tưởng của tác giả định làm gì.
 
Upvote 0
Thử sửa dòng trên thành dòng dưới xem còn báo lỗi không rồi tính tiếp
Mã:
'd.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
d(Vung(I, 1))= Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
Trân trọng cảm ơn bạn - Tôi sửa thử có gì xin được phúc đáp lại bạn sau mấy phút nhé
Bài đã được tự động gộp:

Thử sửa dòng trên thành dòng dưới xem còn báo lỗi không rồi tính tiếp
Mã:
'd.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
d(Vung(I, 1))= Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
Vẫn báo lỗi thế bạn ạ - Nhờ ban bắt bệnh và chữa giúp
 
Upvote 0
Bạn thử sửa thêm và sửa những nội dung sau:
Mã:
Dim Vung As Variant
...
Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4).Value
...
 
Upvote 0
Bạn thử sửa thêm và sửa những nội dung sau:
Mã:
Dim Vung As Variant
...
Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4).Value
...
Cảm ơn bạn mình loay hoay mãi nhưng vẫn không tìm ra hướng xử lý - Vì trình thấp quá
Bài đã được tự động gộp:

Chỗ -->> (58) sửa thành -->> (0)

Có thể bạn trích mảng trong item vượt quá giới hạn
Nếu không lỗi thì tính tiếp
Vậy dữ liệu Nó ở cột thứ 58 thì sửa ra sao ? bạn chỉ giúp !
 
Upvote 0
Cảm ơn bạn mình loay hoay mãi nhưng vẫn không tìm ra hướng xử lý - Vì trình thấp quá
Bài đã được tự động gộp:


Vậy dữ liệu Nó ở cột thứ 58 thì sửa ra sao ? bạn chỉ giúp !
Vùng dữ liệu của bạn có 4 cột ( Resize(,4)
Mã:
Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4)
Nạp vào dic là 1 mảng có 3 phần tử
Mã:
d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))

Nếu lấy cột 58:
1- Phải mở rộng Vùng rộng 58 cột ( Phải chứa cột cần tra cứu )
2- Khi nạp vào dic phải nạp giá trị của cột này: Array(...., Vung(i,58))
 
Upvote 0
Vùng dữ liệu của bạn có 4 cột ( Resize(,4)
Mã:
Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4)
Nạp vào dic là 1 mảng có 3 phần tử
Mã:
d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))

Nếu lấy cột 58:
1- Phải mở rộng Vùng rộng 58 cột ( Phải chứa cột cần tra cứu )
2- Khi nạp vào dic phải nạp giá trị của cột này: Array(...., Vung(i,58))
Bạn làm giúp luôn tý với
 
Upvote 0
Cảm ơn bạn mình loay hoay mãi nhưng vẫn không tìm ra hướng xử lý - Vì trình thấp quá
Vấn đề của bạn nằm ở khâu trình bày thôi :D
Bài này chưa có gì để làm khó. Mọi người có gợi ý các cách làm mà bạn đang có vẻ "bảo mật":
1. Bạn trình bày ý tưởng mong muốn của bạn, mọi người sẽ gợi ý cách làm cho bạn. Lựa chọn vẫn của bạn mà.
2. Gửi file và lỗi lên thì mọi người mới hình dung ra lỗi gì. Một cái dòng tô vàng nó không có ý nghĩa quá nhiều. Khi có file có thể biết là bạn khai báo biến gì, lỗi gì, object nào có khai báo mà rỗng, thiếu khai báo sai.
3. Bạn báo lỗi tại dòng d(Vung(I, 1))= Array(Vung(I, 2), Vung(I, 3), Vung(I, 4)) mà sao chụp ra nó lỗi dòng khác :D
 
Upvote 0
@le_vis
Tạm thời dừng các câu lệnh không cần thiết.
Bạn test code bên dưới xem sao.

Các chỉ số khi khai báo Vung, khi nạp vào dic, khi tra cứu bạn cần lưu ý
Mã:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim d, I, Vung, Ws

Set d = CreateObject("scripting.dictionary")
Set Ws = Sheets("DM_hang")

'Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 4)
Vung = Ws.Range(Ws.[C8], Ws.[C200].End(xlUp)).Resize(, 58)

If Not Intersect(Target, Range("AA4:AA200")) Is Nothing Then
    If Target.Count = 1 Then
        For I = 1 To UBound(Vung)
            If d.exists(Vung(I, 1)) = False Then
                'd.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
                d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 58))
            End If
        Next I
       
        If d.exists(UCase(Target.Value)) Then
            'Target.Offset(, 2) = d.Item(UCase(Target.Value))(58)
            Target.Offset(, 2) = d.Item(UCase(Target.Value))(2)
        End If
    End If
End If

'If Target.Column = 7 And Target.Row = 1 And Target.Row < 7 Then
'    Sheets("Form").Range("D3") = Selection.Text
'End If

End Sub

---
Sửa phần nạp dic
 
Lần chỉnh sửa cuối:
Upvote 0
Vấn đề của bạn nằm ở khâu trình bày thôi :D
Bài này chưa có gì để làm khó. Mọi người có gợi ý các cách làm mà bạn đang có vẻ "bảo mật":
1. Bạn trình bày ý tưởng mong muốn của bạn, mọi người sẽ gợi ý cách làm cho bạn. Lựa chọn vẫn của bạn mà.
2. Gửi file và lỗi lên thì mọi người mới hình dung ra lỗi gì. Một cái dòng tô vàng nó không có ý nghĩa quá nhiều. Khi có file có thể biết là bạn khai báo biến gì, lỗi gì, object nào có khai báo mà rỗng, thiếu khai báo sai.
3. Bạn báo lỗi tại dòng d(Vung(I, 1))= Array(Vung(I, 2), Vung(I, 3), Vung(I, 4)) mà sao chụp ra nó lỗi dòng khác :D
Khi giải quyết theo hướng của bạn CHAOQUAY thành d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4))
thi xảy ra lỗi này : Target.Offset(, 2) = d.Item(UCase(Target.Value))(58) chứ bạn
 
Upvote 0
Web KT
Back
Top Bottom