thierry henry
Thành viên mới
- Tham gia
- 11/6/18
- Bài viết
- 49
- Được thích
- 4
Em đã làm theo thầy trên youtube hướng dẫn nhưng không ra kết quả . Bác nào chỉ giáo giúp em . Em cảm ơn
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A5")) Is Nothing Then
If Target.Columns.Count = 1 Then
Target.Offset(, 1) = Application.WorksheetFunction.VLookup(Target, Sheet1.Range("A1:E8"), 5, False)
End If
End If
End Sub
[Code]
Tôi thường không dùng Application.WorksheetFunction. mà dùng thẳng WorksheetFunction. thấy vẫn ổn và không có gì khác biệt. Không biết bạn có tìm hiểu điều đó chưa?Theo mình bạn thay đoạn code này vào code ở sh2
Mã:Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:A5")) Is Nothing Then If Target.Columns.Count = 1 Then Target.Offset(, 1) = Application.WorksheetFunction.VLookup(Target, Sheet1.Range("A1:E8"), 5, False) End If End If End Sub [Code]
Tôi là loại học hành VBA chắp vá trên diễn đàn thôi chứ có kiến thức cao thâm gì đâu mà giải thích chỉ biết dùng code theo kiểu copy của người này, người khác về chắp vá gọt sửa thêm một chút cho phù hợp với đề bài chứ cũng chẳng có nghiên cứu chuyên sâu gì đâu. Anh thấy đấy, tôi đã có nhiều câu hỏi hết sức ngây ngô trên diễn đàn rồi còn gì (ví dụ như: tại sao không đặt tên biến, tên hàm tự tạo theo tiếng Việt không dấu cho dễ đọc, dễ viết....- vì vậy code của tôi thường đặt tên biến, tên sub theo tên Tiếng việt-không dấu và lung tung beng - trước đây Anh HieuCD và vừa rồi là anh VietMini cũng đã có góp ý để cho tôi sửa chữa...), hay nhiều bài tôi vẫn thường xin ý kiến các anh em ghé qua xem và sửa giùm cho ngắn gọn và hiệu quả....Tôi thường không dùng Application.WorksheetFunction. mà dùng thẳng WorksheetFunction. thấy vẫn ổn và không có gì khác biệt. Không biết bạn có tìm hiểu điều đó chưa?
Tôi chỉ biết sơ là Application.(tên hàm) là hàm của VBA nhiều khi rất khác với hàm WorksheetFunction (tức hàm Excel) về kết quả trả về. Còn việc viết WorksheetFunction hay Application. WorksheetFunction không khác gì về kết quả, hình như có chăng là khác nhau về tốc độ xử lý Application. WorksheetFunction nhanh hơn WorksheetFunction. Tôi chẳng quan tâm, cứ dùng thẳng WorksheetFunction cho gọn code....
Tôi cũng thấy có người dùng :
1/ Application. WorksheetFunction.(tên hàm)
2/ WorksheetFunction.(tên hàm)
3/Application.(tên hàm), ví dụ Max, countIF,
Và cũng thấy ổn và cũng chẳng nhân ra sự khác biệt gì.
Nó khác nhau lúc có lỗi, thử chạy từng dòng code sau:Tôi chẳng quan tâm, cứ dùng thẳng WorksheetFunction cho gọn code.
Public Sub test()
Dim arr
arr = Array("B", "C")
Range("A1").Value = Application.Match("A", arr, 0)
Range("A2").Value = WorksheetFunction.Match("A", arr, 0)
Range("A3").Value = Application.WorksheetFunction.Match("A", arr, 0)
End Sub
Application.Match("A", arr, 0) thì không báo lỗi. Còn 2 dòng dưới thì cùng chung đáp án lỗi 1004, không phân biệt được khác nhau thế nào.Nó khác nhau lúc có lỗi, thử chạy từng dòng code sau:
Mã:Public Sub test() Dim arr arr = Array("B", "C") Range("A1").Value = Application.Match("A", arr, 0) Range("A2").Value = WorksheetFunction.Match("A", arr, 0) Range("A3").Value = Application.WorksheetFunction.Match("A", arr, 0) End Sub
Dùng Application.Match("A", arr, 0), trả về kết quả giống như bạn dùng MATCH trên sheet, nghĩa là tìm có => trả về "số", không có => trả về "#N/A", không báo lỗi trong VBA.Application.Match("A", arr, 0) thì không báo lỗi. Còn 2 dòng dưới thì cùng chung đáp án lỗi 1004, không phân biệt được khác nhau thế nào.