Lỗi tham chiếu khi dùng Vlookup trong VBA (3 người xem)

Liên hệ QC

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

  • Tôi tuân thủ nội quy khi đăng bài

    Vu_Thi_Xuan

    Thành viên mới
    Tham gia
    20/3/24
    Bài viết
    3
    Được thích
    0
    Donate (Momo)
    Donate
    Giới tính
    Nữ
    Nghề nghiệp
    Kế toán
    Chào anh chị em, em đang tự học thêm VBA để áp dụng vào công việc. Trong quá trình thao tác em có dùng Vlookup mã khách hàng theo mã số thuế trong VBA và không ra kết quả. Cũng là Vlookup khi em làm tại ô excel bình thường thì vẫn ra kết quả. Mong anh chị em có thể xem và chỉ ra giúp em là code của em có vấn đề ở đâu và hướng khắc phục thế nào với ạ. Em xin trân thành cảm ơn!
     

    File đính kèm

    Chào anh chị em, em đang tự học thêm VBA để áp dụng vào công việc. Trong quá trình thao tác em có dùng Vlookup mã khách hàng theo mã số thuế trong VBA và không ra kết quả. Cũng là Vlookup khi em làm tại ô excel bình thường thì vẫn ra kết quả. Mong anh chị em có thể xem và chỉ ra giúp em là code của em có vấn đề ở đâu và hướng khắc phục thế nào với ạ. Em xin trân thành cảm ơn!
    Bạn có thể mô tả rõ hơn được không? Thấy 2 sub trong file của bạn. Nhưng hông biết nên sửa cái nào
     
    Đầu tiên phải thấy ra82gn câu lệnh
    PHP:
    On Error Resume Next
    Là đang xài dao 2 lưỡi; Nếu không cẩn thận dễ rớm máu tay lắm!
    Nên chăng ta tạm vô hiệu hóa 2 dòng lệnh này để xem có lỗi gì không đã
     
    Bạn có thể mô tả rõ hơn được không? Thấy 2 sub trong file của bạn. Nhưng hông biết nên sửa cái nào
    Cảm ơn anh chị đã quan tâm đến vấn đề của em! file dữ liệu này này em cắt từ file tổng ra vì nặng quá không tải nên được. Sub 1 chỉ là lệnh điền dữ liệu bình thường. Sau khi có dữ liệu cơ bản thì cứ dòng nào có dữ liệu em sẽ dùng Sub 2 gọi mã khách hàng ra ạ. Em gặp vấn đề ở Sub 2. Mã khách hàng sẽ đươc gọi bằng Vlookup khi trạng thái thanh toán là "CK" hoặc "Chuyển khoản" trên sheets GOC còn k thỏa mã điều kiện này thì em sẽ cho vào lần lượt hai mã nhân viên là NV001 và NV009. Mục đích em làm thế theo kế toán là đang tách hóa đơn đầu ra treo trên phiếu thu tiền mặt và treo trên công nợ khách hàng. Bình thường em vẫn làm trên excel cơ bản nhưng do dữ liệu nhiều công thức lặp đi lặp lại nên em chuyển qua VBA. VBA vẫn còn khá mới mẻ với em nên nhiều khi không hểu hết được bản chất các lệnh.
     
    Đầu tiên phải thấy ra82gn câu lệnh
    PHP:
    On Error Resume Next
    Là đang xài dao 2 lưỡi; Nếu không cẩn thận dễ rớm máu tay lắm!
    Nên chăng ta tạm vô hiệu hóa 2 dòng lệnh này để xem có lỗi gì không đã
    Sau khi bỏ dòng lệnh đó và em cho chạy lại lệnh thì nhận được thông bào này
    1747090530228.png
     
    Bạn đang sai ở dòng lệnh mà mình đã ghi số 4:

    PHP:
    Sub ma_khach_hang()
     Dim i As Integer, lastRow As Long:             Dim My_Range As Range
    
    'Tim dong cuoi cung de tham chieu mã khach hang '
     lastRow = Sheets("DMKH").Range("A2").End(xlDown).Row
    'Gan vung tham chieu ma khach hang'
    4 My_Range = Sheets("DMKH").Range("G4:L" & lastRow)'
    . . . . .     '
    
    End Sub()

    Chú ý thêm: Bạn nên khai báo các tham biến 1 cách tường minh, như dòng có số 1
    Biến My_Range của bạn có kiều 'vùng ô' & bạn phải xài lệnh Set để gán 1 vùng nào đó vô tham biến đã khai báo của bạn
     
    1747122701215.png



    Mình sửa 2 chỗ như hình thì chạy được, bạn dựa vào đó tim cách fix nhé.
     
    PHP:
    Sub Ma_Khach_Hang()
     Dim i As Integer, lastRow As Long:         Dim My_Range As Range, WF As Object
     Const CK As String = "CK":                 Dim C_K As String
     
     Set WF = Application.WorksheetFunction:        C_K = Sheets("DKP").Cells(2, 1).Value
    'Tim dong cuoi cung de tham chieu mã khach hang '
     lastRow = Sheets("DMKH").Range("A2").End(xlDown).Row
    'Gan vung tham chieu ma khach hang'
     Set My_Range = Sheets("DMKH").Range("G4:L" & lastRow)
     i = 2
     On Error GoTo LoiCT
    Do While Len(Worksheets("KQXL").Cells(i, 4).Value) <> 0
     'Dung if ket hop Vlookup dien ma khach hang   '
     'Dieu kiên thanh toán nêu là CK thi goi mã khách hàng theo mã sô thué'
        If Sheets("GOC").Cells(i + 7, 34).Value = CK Then
    7        Sheets("KQXL").Cells(i, 5).Value = WF.VLookup(Sheets("GOC").Cells(i + 7, 10).Value, My_Range, 6, False)
        'Nêu D/kien CK false xet la Chuyen khoan thi goi ma khach hang theo ma so thue '
    9    ElseIf Sheets("GOC").Cells(i + 7, 34).Value = C_K Then
            Sheets("KQXL").Cells(i, 5).Value = WF.VLookup(Sheets("GOC").Cells(i + 7, 10).Value, My_Range, 6, False)
        'Neu dieu kien Chuyen khoan thi se cho vao ma nhan vien dieu kien la i le là NV001 i chan là NV009 '
        ElseIf i Mod 2 = 0 Then
            Worksheets("KQXL").Cells(i, 5).Value = "NV001"
        ElseIf i Mod 2 <> 0 Then
            Worksheets("KQXL").Cells(i, 5).Value = "NV009"
        End If
        i = i + 1
    Loop
     Exit Sub
    LoiCT:
     If Err = 1004 Then
        MsgBox Erl(), , i
        Sheets("KQXL").Cells(i, 5).Value = "GPE ???"
     Else
        MsgBox Error()
     End If
    End Sub
     
    Lần chỉnh sửa cuối:
    Web KT

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

    Back
    Top Bottom