Tôi mới dùng VBA và muốn trả về từ một hàm khi tôi thấy lỗi. Không thể làm được. Bất kỳ con trỏ?VBA - Trả về từ một hàm trong trường hợp lỗi
Function GetEditboxValue(control As IRibbonControl, text As String) As String
If Not IsMissing(text) Then
If Not IsNumeric(text) Then
MsgBox "Please enter numeric value only."
' I WANT TO RETURN HERE
End If
End If
If control.id = "xyz" Then
spaceAboveTable = text
End If
End Function
Bạn nhận ra rằng chức năng của bạn không trả về giá trị, phải không? Trong VBA, một hàm không trả về một giá trị phải được khai báo là 'Sub'. Nếu không, bạn sẽ muốn gán một giá trị cho 'GetEditboxValue' trước khi thoát khỏi hàm. (Rõ ràng, đây là trường hợp bạn không muốn thoát sớm * mà không * trả về một giá trị.) –
Không được quên, chức năng này trông rất xấu xí. Thay vì trả lại một giá trị, từ một hộp chỉnh sửa (cái tên ngụ ý), điều duy nhất nó có vẻ là làm cho một số tác dụng phụ khó chịu - cho bạn một nhức đầu bảo trì sớm hay muộn. Thay vì tách phát hiện lỗi khỏi xử lý lỗi, nó tự xử lý các lỗi bằng MsgBox. Tốt hơn nên tách biệt các mối quan tâm này, nếu văn bản không phải là số, trả về giá trị lỗi hoặc tăng sự kiện lỗi hoặc điều gì đó như thế này, nhưng hãy để người gọi quyết định xem có muốn hiển thị hộp tin nhắn hay xử lý lỗi khác không. –
@Cody, Chỉ cần làm rõ nhận xét của bạn cho @ydobonmai, tất cả các thói quen được khai báo là các hàm sẽ trả về một giá trị. Nếu bạn không chỉ định chính xác giá trị * what * với một dòng như 'GetEditboxValue =' thì hàm của bạn sẽ trả về bất kỳ giá trị mặc định nào cho loại hàm này. Trong trường hợp này là chuỗi rỗng, nhưng có thể là 0, "", False, Empty, Nothing, v.v. –
jtolle