Giải thích lỗi trong khai báo biến đối tượng.

  • Thread starter Thread starter sealand
  • Ngày gửi Ngày gửi
Liên hệ QC

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Mình có 2 đoạn Code sau:

Mã:
Sub cong1()
Dim TB
Dim Fun As Object
Set Fun = WorksheetFunction
TB = Fun.Sum(1, 2, 3, 4, 5)
MsgBox TB
End Sub

Đoạn code này chạy tốt và cho kết quả =15

Mã:
Sub cong()
Dim TB
Dim Fun As WorksheetFunction
TB = Fun.Sum(1, 2, 3, 4, 5)
MsgBox TB
End Sub

Đoạn này bị lỗi tại dòng: TB = Fun.Sum(1, 2, 3, 4, 5)
Trong khi viết VBA cũng vẫn list các hàm được sử dụng (Như trong ảnh)

Các bạn tìm giúp lỗi và khắc phục ra sao?
 
Mình có 2 đoạn Code sau:

Mã:
Sub cong1()
Dim TB
Dim Fun As Object
Set Fun = WorksheetFunction
TB = Fun.Sum(1, 2, 3, 4, 5)
MsgBox TB
End Sub
Đoạn code này chạy tốt và cho kết quả =15

Mã:
Sub cong()
Dim TB
Dim Fun As WorksheetFunction
TB = Fun.Sum(1, 2, 3, 4, 5)
MsgBox TB
End Sub
Đoạn này bị lỗi tại dòng: TB = Fun.Sum(1, 2, 3, 4, 5)
Trong khi viết VBA cũng vẫn list các hàm được sử dụng (Như trong ảnh)

Các bạn tìm giúp lỗi và khắc phục ra sao?
Thông báo lỗi rất rõ: Object variable or With block variable not set
Anh mới khai báo biến, chưa làm thêm động tác SET nên báo lỗi là phải rồi còn gì
Cái này em có đưa vào mục đố vui về VBA đã lâu lắm rồi (nhưng chẳng ai quan tâm)
1 vài kiểu biến chỉ cần khai báo là đủ, nhưng 1 vài kiểu biến khác nó không chịu vây, phải SET mới xong!
-----------------
Em lấy ví dụ này bảo đảm ai cũng hiểu:
PHP:
Sub Test()
  Dim Ws As Worksheet
  MsgBox Ws.Name
End Sub
Anh khai báo Ws As Worksheet rồi đấy thôi, nhưng có dùng được đâu!
Nhưng nếu vầy thì được:
PHP:
Sub Test()
  Dim Ws As Worksheet
  Set Ws = Sheet1
  MsgBox Ws.Name
End Sub
Có SET là ăn tiền liền
 
Lần chỉnh sửa cuối:
Upvote 0
Quá đúng Ndu à và nó trở thành trường hợp 1, nhưng Set ở đây nó kỳ kỳ làm sao ấy

........................................
Dim Fun as WorksheetFunction
Set Fun = WorksheetFunction
........................................

Một cái kỳ nữa là khi viết chưa Set thì VBA hiểu và List hàm ngon nhưng khi chạy thì nó lại không chịu hiểu.
 
Lần chỉnh sửa cuối:
Upvote 0
Quá đúng Ndu à và nó trở thành trường hợp 1, nhưng Set ở đây nó kỳ kỳ làm sao ấy

........................................
Dim Fun as WorksheetFunction
Set Fun = WorksheetFunction
........................................

Một cái kỳ nữa là khi viết chưa Set thì VBA hiểu và List hàm ngon nhưng khi chạy thì nó lại không chịu hiểu.
Thấy kỳ kỳ vì đây là sự trùng hợp ngẫu nhiên thôi anh à!
Em thì hay dùng kiểu này:
PHP:
Sub Test()
  With WorksheetFunction
    MsgBox .Sum(1, 2, 3, 4, 5)
  End With
End Sub
Khỏi khai báo, khỏi set gì ráo
- Đi chơi, mượn tạm.. cái quần để mặc
- Đi về, trả quần lại
===> Khỏi tốn tiền mua, khỏi... giặt luôn
Ẹc... Ẹc...
 
Upvote 0
Thông thường, ta dùng mệnh đề With......End With, nhưng đôi khi ta có vài cái With lồng nhau thì cũng rắc rối nên mình mới làm dạng này.
 
Upvote 0
Web KT

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

Back
Top Bottom