2012-04-04 25 views
14

Tôi muốn biết nếu có cách gọi hàm VBA hoặc phương thức từ mô-đun bảng tính được chỉ định khác vì có thể áp dụng cho trang tính cụ thể mà không sử dụng Application.RunCách gọi hàm từ một sổ làm việc cụ thể khác trong VBA?

Đối với trang tính tôi có thể gọi ví dụ :

ActiveSheet.MyTest() 

nếu MyTest được định nghĩa trong module tấm

Nhưng tôi muốn gọi một hàm được định nghĩa trong một module

tôi đã cố gắng:

ActiveWorkbook.MyTestModule() 
ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg) 

mà không có tác dụng tạo ra một đối tượng lỗi không hỗ trợ phương pháp này

tôi có thể gọi

Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg) 

Nhưng tôi không chắc chắn về việc xử lý lỗi của Application.Run và Tôi sẽ tìm thấy sạch hơn để chạy trực tiếp phương pháp

+0

http: // stackoverflow q = application.run +% 5Bexcel% 5D – Fionnuala

+1

Các câu trả lời duy nhất được đưa ra là sử dụng Application.Run những gì tôi cố gắng để av oid. Hay tôi cho rằng điều đó là không thể? – Gutti

Trả lời

18

Trong sổ làm việc bạn muốn gọi từ (tôi gọi đây là A), bạn có thể thêm tham chiếu vào sổ làm việc mà bạn muốn gọi đến (Tôi sẽ gọi B) như sau:

  1. Trong workbook A, mở Microsoft Visual Basic cho cửa sổ ứng dụng (ví dụ, bằng cách nhấn Alt + F11).
  2. Chọn Công cụ, Tham khảo.
  3. Trong hộp thoại Tham chiếu xuất hiện, chọn Duyệt qua.
  4. Trong hộp thoại Thêm tài liệu tham khảo xuất hiện, chọn Tệp Microsoft Excel từ hộp Loại tệp, chọn tệp bạn muốn gọi (B) và chọn Mở.
  5. Chọn OK để đóng hộp thoại Tham chiếu.

Trong tệp A, bạn có thể gọi các hàm cấp mô-đun công khai trong tệp B như thể trong tệp A. Để giải quyết bất kỳ xung đột đặt tên nào, bạn có thể gọi tiền tố theo "Tên dự án" tệp B như được chỉ định trong tab Chung của hộp thoại Thuộc tính dự án (có thể truy cập thông qua lệnh Thuộc tính trong trình đơn Microsoft Visual Basic dành cho ứng dụng Công cụ). Ví dụ: nếu "Tên dự án" cho tệp B là "VBAProjectB", bạn có thể gọi hàm F từ tệp A bằng cú pháp VBAProjectB.F.

+1

Lưu ý: Để thực hiện việc này, không sử dụng 'VBAProject' làm tên, hoặc nó sẽ xung đột. – Envite

-2

Giả sử bạn có 2 Sổ làm việc "Sheet1" và "Sheet2".

A Phương thức PUBLIC trong "Sheet2" được gọi là DisplayMessage.

Trong "Sheet1" bạn có thể làm điều này:

Public Sub SetParametersInSheet2(sParam As String) 
With Sheets("Sheet2") 
    .Range("B3").Value = sParam 'range in Sheet2 

    ' --- calling function from another worksheet 
    .DisplayMessage "from here!" 
End With 

End Sub

Phương pháp trong "Sheet2":

Public Sub DisplayMessage(sMess As String) 
    Dim dCurrent As Date 
    Dim sFormattedMess As String 
    sFormattedMess = FormatDateTime(Now, vbLongTime) & ": " & sMess 
    Range("I2").Value = sFormattedMess 

End Sub

+4

sổ làm việc không giống như trang tính – himura

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