2011-07-10 29 views
10

Tôi đang sử dụng vba với Excel 2007 và đang viết mã cho mô-đun lớp học.Các tham số tùy chọn trong Thuộc tính Let/Get hoạt động như thế nào?

1) là đoạn mã sau thậm chí có thể? ...
Về cơ bản tôi có hai enums, gọi cho họ eDATASETeDATATSUBSET. Giá trị cụ thể từ eDATASET sẽ kích hoạt nhiệm vụ từ tham số được tùy chọn chuyển vào thuộc tính Let. Một cái gì đó như thế này:

Public Property Let foo(Optional ByVal lngSubSet as eDATASUBSET, _ 
         ByVal lngSuperSet as eDATASET) 
    Select Case lngSuperSet 
     Case eDATASET.abc, eDATASET.def 
      mlngBar = lngSuperSet 
     Case eDATASET.xyz 
      '// if lngSubSet not passed, trigger error code... 
      mlngBar = lngSubSet 
    End Select 
End Property 

2) Làm thế nào để tôi thậm chí còn vượt qua một tham số tùy chọn để sở hữu một khả năng ghi khi gọi các đối tượng ...
Bên cạnh những vị trí dường như ngược của các thông số Optional (so với tùy chọn các tham số trong hàm và subs), tôi gặp khó khăn khi tìm bất kỳ tài liệu nào về tính năng này. Trợ giúp vba nói điều này:

Tùy chọn. Chỉ ra rằng một đối số là không cần thiết. Nếu được sử dụng, tất cả các đối số tiếp theo trong arglist cũng phải là tùy chọn và được khai báo bằng cách sử dụng từ khóa Tùy chọn. Lưu ý rằng không thể cho phía bên phải của biểu thức Thuộc tính Hãy là Tùy chọn.

và các mục sau đây từ vbusers.com. Không giải thích nhiều về cách sử dụng. Vì vậy, làm thế nào tôi sẽ vượt qua tham số tùy chọn khi gọi đối tượng từ một mô-đun mã ... oObj.foo = ???

3) Có cách nào tốt hơn để làm điều này? ...
Tôi có một sự hiểu biết cơ bản về oop (ít nhất trong cách nó được thực hiện trong vba). Có cách nào tốt hơn để có điều kiện chấp nhận một tham số vào một đối tượng?

+0

có thể trùng lặp của [Cho phép thuộc tính của mô-đun lớp VBA - có thể có nhiều đối số không?] (Http: // stackoverflow.com/questions/13823367/let-property-of-vba-class-modules-là-nó-thể-có-nhiều-đối số) –

Trả lời

10

1) Có mã của bạn là có thể.

2) Đây là cách bạn vượt qua một cuộc tranh cãi:

Giả sử myObject là một đối tượng của lớp học của bạn:

myObject.foo(lngSubSet) = lngSuperSet 

Các vị trí của các đối số trong arglist không thực sự trông lạ, nhưng đó là VBA cho bạn. Giả sử bạn có 4 đối số, hai trong số đó là tùy chọn, cộng với phía bên tay phải của bạn. Bạn sẽ đặt chúng như thế này:

Public Property Let foo(arg1, arg2, Optional arg3, Optional arg4, _ 
         RHS) 

và sử dụng chúng như thế này (giả sử bạn đang chọn tham gia ra khỏi arg4):

myObject.foo(arg1,arg2,arg3) = RHS 

3) Có cách nào tốt hơn để làm điều này? Luôn có, tùy thuộc vào người bạn yêu cầu. Bạn có thể hoàn toàn có đối số lngSubSet của mình dưới dạng thuộc tính riêng biệt. Đó là cách tôi có xu hướng làm điều đó. Nhưng trong trường hợp của bạn, cách làm việc của bạn có thể hoạt động tốt cho bạn. Tôi không biết, nó phần lớn là một câu hỏi về hương vị và phụ thuộc vào ứng dụng cụ thể của bạn.

+0

trong trường hợp bạn tự hỏi về +++ [ở đây] (http: // stackoverflow.com/questions/13823367/let-property-of-vba-class-modules-is-it-possible-to-have-multiple-arguments/26488170#26488170) và [tại đây] (http: //chat.stackexchange .com/rooms/14929/vba) –

+1

Ha! Vâng, tôi đã thực sự tự hỏi điều gì trên trái đất đang diễn ra. –

Các vấn đề liên quan