Lỗi tham chiếu khi dùng Vlookup trong VBA (2 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
 
Web KT

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

Back
Top Bottom