2012-06-22 17 views
7

Tôi đang viết một hàm VBA mà tôi muốn công khai có sẵn trong các mô-đun VBA khác trong cùng một tài liệu, tuy nhiên tôi không muốn nó có sẵn như một UDF (Hàm do người dùng định nghĩa).Cách làm cho hàm VBA "VBA chỉ" và vô hiệu hóa nó như UDF

Nếu tôi sử dụng công cụ sửa đổi truy cập công khai, tuy nhiên chức năng của tôi cũng có sẵn dưới dạng công thức UDF có thể được gọi từ các ô trong sổ làm việc. Tôi không muốn điều này.

Có công cụ sửa đổi truy cập hoặc cách khác có thể giúp tôi có được hành vi "chỉ VBA" này không?

Kind coi

+1

Bạn có thể đi sâu hơn vào chức năng này không? Điều này có thể giúp gợi ý cách sử dụng các lớp VBA chỉ là VBA, và không thể được khởi tạo từ bảng tính. Ít nhất hiển thị đối số đầu vào được mong đợi làm giá trị đầu ra. – ja72

+1

Kiểm tra tên kiểu application.caller trong hàm. Đã không thử nghiệm này, nhưng tôi nghĩ rằng nó nên cho phép để kiểm tra xem một chức năng đang được gọi là từ một tế bào. –

Trả lời

0

vượt qua một tham số chỉ cho phép các chức năng để chạy nếu một "ma thuật * giá trị được trao cho nó

Ví dụ -. Điều này sẽ cung cấp cho các lỗi #NAME! trừ khi bạn biết những gì chủ chốt là:

Function VBAOnly(key As Long) 

If key <> 12345 Then 
    VBAOnly = CVErr(xlErrName) 
    Exit Function 
End If 

VBAOnly = True 

End Function 
5

này sẽ trả về một lỗi #VALUE nếu được sử dụng trong Excel

. 10
+3

'xlErrName' sẽ tốt hơn :) – Aprillion

+0

Cảm ơn, nhưng tôi đã hy vọng một cơ chế sẽ tồn tại làm cho chức năng ẩn thành bảng tính. Bằng cách này, hàm vẫn hiển thị (ví dụ: trong chế độ tự động hoàn thành), nó chỉ trả về lỗi. Đây không phải là 100% những gì tôi đã có trong tâm trí. – Skifozoa

+0

+1 về đề xuất của Dick. @Skifozoa theo nhận xét của KFleschner làm cho một chức năng này là 'Private Function' – brettdj

-1

Sử dụng modifier Private chỉ nên cho phép thực hiện trong các module chức năng tồn tại trong.

+0

Không phải như vậy. Kiểm tra cursory cho thấy các hàm 'Private' có thể truy cập được từ Excel. –

1

Nếu bạn sử dụng Option Private Module trong module trong đó chức năng xuất hiện, các chức năng có thể được khai báo là Public và được sử dụng trong bất kỳ các mô-đun khác của bạn trong dự án VBA của bạn, nhưng sẽ không thể truy cập được bởi các ứng dụng hoặc dự án khác, kể cả Excel.

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