Giúp mình code vba sai ở đâu

Chip

Yêu THVBA
Đầu tiên mình vào view code ở sheet cần làm. Mình chọn worksheet và change
Sau đó mình nhập code như sau :
Mã:
If not intersect (target, range ("A4:A500000")) is not nothing then
If target.columns.count = 1 then
Target.offset(,1)="=vlookup(rc(-1)(ngoặc vuông); name range;2;0;"" "")"
End if
End if
End sub
Mà nó báo lỗi ở hàng offset màu vàng xin mọi người giúp đỡ
 

CRV

SMod
Thành viên BQT
Lỗi ở đây là có thể do cách bạn sử dụng cú pháp của hàm VLOOKUP trong offset.
Thay vì sử dụng dấu ngoặc vuông [] để bao quanh tên range, bạn cần sử dụng dấu ngoặc đơn () để bao quanh giá trị của công thức VLOOKUP.
Bạn có thể thay đổi câu lệnh offset như sau:

Mã:
Target.Offset(, 1).Formula = "=VLOOKUP(RC[-1], NameRange, 2, 0)"
 

CRV

SMod
Thành viên BQT
Bạn không đính kèm file nên mình cũng chỉ đoán chỉ cách khắc phục theo phán đoán thôi.
Còn để biết nguyên nhân cụ thể là gì thì hãy đính kèm file và nói cụ thể thao tác bạn làm là gì mong muốn của bạn như thế nào?
NameRange của bạn là như thế nào bạn phải định nghĩa name trong manger name nữa ...
 

Chip

Yêu THVBA

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A4:A1000000")) Is Nothing Then
If Target.Columns.Count = 1 Then
'TIM TO
Target.Offset(, 1).Formula = "=IFERROR(VLOOKUP(RC[-1];TUAN_B.NHA;2;0),"""")"
Target.Offset(, 1).Value = Target.Offset(, 1).Value
' TIM NAM TRONG
Target.Offset(, 2).Formula = "=IFERROR(VLOOKUP(RC[-2];TUAN_B.NHAP;3;0);"""")"
Target.Offset(, 2).Value = Target.Offset(, 2).Value
'TIM DIEN TICH
Target.Offset(, 3).Formula = "=IFERROR(VLOOKUP(RC[-3];TUAN_B.NHAP;4;0);"""")"
Target.Offset(, 3).Value = Target.Offset(, 3).Value
'TIM CAY CAO
Target.Offset(, 4) = "=IFERROR(VLOOKUP(RC[-4];TUAN_B.NHAP;5;0);"""")"
Target.Offset(, 4).Value = Target.Offset(, 4).Value
'TIM SO PHAN
Target.Offset(, 5) = "=IFERROR(VLOOKUP(RC[-5];TUAN_B.NHAP;6;0);"""")"
Target.Offset(, 5).Value = Target.Offset(, 5).Value
'TIM MA LO
Target.Offset(, 6) = "=IFERROR(VLOOKUP(RC[-6];TUAN_B.NHAP;7;0);"""")"
Target.Offset(, 6).Value = Target.Offset(, 6).Value
'TIM GIONG
Target.Offset(, 7) = "=IFERROR(VLOOKUP(RC[-7];TUAN_B.NHAP;8;0);"""")"
Target.Offset(, 7).Value = Target.Offset(, 7).Value


End If

End If

 

Chip

Yêu THVBA
mình copy đoan code lên rồi xem dùm mình với nhé. mục đích code này là để biến công thức thành value giá trị cho nhẹ file ấy.
 

CRV

SMod
Thành viên BQT
Vể cách đính kèm file, diễn đàn không cho phép đính kèm trực tiếp file do hiện tại kinh phí còn hạn chế, vì không có nguồn thu.
Bởi thế diễn đàn cũng cần sự ủng hộ từ các thành viên để có thể nâng cấp để duy trì.
Còn bạn muốn đính kèm file hãy tìm các bài viết hướng dẫn của diễn đàn hoặc từ cách làm của thành viên khác.

Đối với vấn đề của bạn:
Hiện tại tôi không thể xác định rõ lỗi của đoạn code này vì không biết mục đích của chương trình. Tuy nhiên, với những gì tôi có thể nhận thấy là đoạn code này được sử dụng trong một Macro của Excel, được thiết lập để chạy mỗi khi một ô trong dải A4:A1000000 thay đổi giá trị.

Về cấu trúc đoạn code, nó có vẻ hợp lệ, đang sử dụng hàm Intersect để xác định xem ô nào trong dải đã được thay đổi giá trị, và sau đó gán một số công thức tính toán và giá trị vào các ô lân cận.

Tuy nhiên, tôi nhận thấy rằng tất cả các công thức được sử dụng trong đoạn code này đều sử dụng dấu chấm phẩy (; thay cho dấu phẩy (,). Điều này có thể khiến chương trình bị lỗi nếu Excel được cài đặt bằng ngôn ngữ khác với ngôn ngữ mặc định (vì mỗi ngôn ngữ sẽ có quy tắc phân cách thập phân và phân cách dấu câu khác nhau).

Do đó, tôi khuyên bạn nên kiểm tra lại cách sử dụng dấu phẩy và dấu chấm phẩy trong các công thức và sử dụng ngôn ngữ mặc định của Excel (hoặc sử dụng hàm Format để đảm bảo sử dụng đúng quy tắc phân cách). Ngoài ra, bạn cũng nên kiểm tra lại mục đích và logic của chương trình để đảm bảo nó hoạt động chính xác.

Hoặc bạn có thể tham khảo cách viết khác:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Intersect(Target, Range("A4:A1000000"))
    If rng Is Nothing Then Exit Sub
   
    Dim cell As Range
    For Each cell In rng
        If cell.Columns.Count = 1 Then
            ' TIM TO
            cell.Offset(, 1).Formula = "=IFERROR(VLOOKUP(" & cell.Value & ",TUAN_B.NHA,2,0),"""")"
            cell.Offset(, 1).Value = cell.Offset(, 1).Value
           
            ' TIM NAM TRONG
            cell.Offset(, 2).Formula = "=IFERROR(VLOOKUP(" & cell.Value & ",TUAN_B.NHAP,3,0),"""")"
            cell.Offset(, 2).Value = cell.Offset(, 2).Value
           
            ' TIM DIEN TICH
            cell.Offset(, 3).Formula = "=IFERROR(VLOOKUP(" & cell.Value & ",TUAN_B.NHAP,4,0),"""")"
            cell.Offset(, 3).Value = cell.Offset(, 3).Value
           
            ' TIM CAY CAO
            cell.Offset(, 4).Formula = "=IFERROR(VLOOKUP(" & cell.Value & ",TUAN_B.NHAP,5,0),"""")"
            cell.Offset(, 4).Value = cell.Offset(, 4).Value
           
            ' TIM SO PHAN
            cell.Offset(, 5).Formula = "=IFERROR(VLOOKUP(" & cell.Value & ",TUAN_B.NHAP,6,0),"""")"
            cell.Offset(, 5).Value = cell.Offset(, 5).Value
           
            ' TIM MA LO
            cell.Offset(, 6).Formula = "=IFERROR(VLOOKUP(" & cell.Value & ",TUAN_B.NHAP,7,0),"""")"
            cell.Offset(, 6).Value = cell.Offset(, 6).Value
           
            ' TIM GIONG
            cell.Offset(, 7).Formula = "=IFERROR(VLOOKUP(" & cell.Value & ",TUAN_B.NHAP,8,0),"""")"
            cell.Offset(, 7).Value = cell.Offset(, 7).Value
        End If
    Next cell
End Sub
 

Chip

Yêu THVBA
Mình nhập y code của bạn mà khi chạy thử thì ô tiếp theo hiện ra = iferror(vlookup.... ) luôn chứ nó không cho ra kết quả. Bạn à kỳ lạ quá
 

Chip

Yêu THVBA
Ví dụ bên cột a giá trị 222 thì bên cột b nó hiện ra theo = iferror(vlookup(222,TUAN_B.NHAP,2,0)"") CHỨ NÓ KHÔNG THEO KẾT QUẢ KHI XÀI CÔNG THỨC EX.
 

Chip

Yêu THVBA
Giúp mình hoàn thành nó nào mod ơi. Xog xin đóng góp 50k vào tài khoản duy trì web. Mình còn học nhiều lắm.
 

NhanSu

SMod
Thành viên BQT
@Chip trong kết quả của bạn ở bài 10 thì khả năng bạn thiếu dấu = trước iferror (="=iferror..."), nếu theo đúng như bài 11 thì bạn lại thiếu dấu phẩy trước dấu nháy kép.
Trong code của bạn ở các bài 1 và 7 thì bạn cần dùng dấu phẩy thay dấu chấm phẩy trong công thức hoặc thay Range.Formula thành Range.FormulaLocal. Mặc dù cài đặt trên máy tính của bạn dùng dấu chấm phẩy thì trong formula vẫn phải dùng dấu phẩy.
 
  • Love
Reactions: CRV
Top