2009-04-16 45 views
11

Tôi có một ký ức mờ nhạt của việc có thể sử dụng chức năng VBA để tính toán các giá trị trong Excel, như thế này (như công thức tế bào):Tạo một hàm bảng tùy chỉnh trong Excel VBA

=MyCustomFunction(A3) 

này có thể được thực hiện?

EDIT:

Đây là VBA chức năng chữ ký của tôi:

Public Function MyCustomFunction(str As String) As String 

Chức năng ngồi trong module ThisWorkbook. Nếu tôi cố gắng sử dụng nó trong bảng tính như được hiển thị ở trên, tôi nhận được lỗi #NAME?.


Giải pháp (Cảm ơn, codeape): Không thể truy cập chức năng khi được xác định ThisWorkbook mô-đun. Nó phải nằm trong mô-đun "thích hợp", mô-đun đã được thêm thủ công vào sổ làm việc.

+0

Cần lưu ý rằng các phiên bản Excel mới hơn bị vô hiệu hóa VBA nếu bạn lưu sổ làm việc có đuôi .xlsx. Bạn cần phải lưu nó với một phần mở rộng .xlsm cho VBA được kích hoạt. –

+0

Bạn cũng có thể cần phải lưu tệp trang tính nếu bạn chưa có. Sau đó đóng cửa và mở nó một lần nữa có thể làm điều. Tuy nhiên, một lần nữa, bạn có thể cần phải áp dụng lại công thức của bạn trong trường hợp bạn đã thay đổi nó. – prot

Trả lời

18

Có thể. Bạn chỉ cần định nghĩa một hàm VBA trong một mô-đun. Xem http://www.vertex42.com/ExcelArticles/user-defined-functions.html để có phần giới thiệu thú vị với các ví dụ.

Dưới đây là một ví dụ đơn giản:

  • Tạo một bảng tính mới
  • Chuyển đến VBA view (Alt-F11)
  • Chèn một module: Insert | Mô-đun
  • nội dung mô-đun:
 
Option Explicit 

Function MyCustomFunction(input) 
    MyCustomFunction = 42 + input 
End Function 
  • Chuyển trở lại bảng tính (Alt-F11), và nhập một số giá trị:
 
A1: 2 
A2: =MyCustomFunction(A1) 
+1

Không hoạt động, đó là lý do tôi hỏi - Tôi nhận đượC#NAME? – Tomalak

+3

Hm, có vẻ như sự lựa chọn mô-đun của tôi là sai. Nó không được đặt trong mô-đun ThisWorkbook, nhưng trong một mô-đun riêng biệt. Cảm ơn. :) – Tomalak

+0

Chữ ký chức năng của bạn sai. Sử dụng đối số "không được nhập" và trả về giá trị. Tôi không nhớ những gì VBA thực sự làm khi bạn loại bỏ các loại, nó sử dụng loại biến thể, tôi đoán. – codeape

4

Từ đầu vào cần phải được thay thế như nó là một từ khóa cơ bản. Hãy thử num thay thế. Bạn cũng có thể đi xa hơn bằng cách chỉ định một loại, ví dụ như biến thể.

Function MyCustomFunction(num As Variant) 
    MyCustomFunction = 42 + num 
End Function 
Các vấn đề liên quan