2015-01-17 12 views
7

Tôi đang cố gắng tìm cách biên dịch mã trong VBA trên sổ làm việc mở. Tôi có thể làm điều này bằng tay bằng cách mở môi trường VBA, đi vào Debug và "biên dịch VBAProject" nhưng đã tự hỏi nếu có một cách để làm điều này thông qua mã mỗi khi bảng tính mở ra.Tôi có thể biên dịch VBA trên bảng tính được không?

Mục đích của việc này là tải mã vào bộ nhớ máy tính để ngăn chặn lỗi biên dịch do sử dụng một số đối tượng X hoạt động. Như đã đề cập, tôi có thể làm điều này bằng tay và nó giải quyết vấn đề tuy nhiên, vì có nhiều người dùng sử dụng và sổ làm việc được bảo vệ bằng mật khẩu, không phải tất cả đều có quyền truy cập vào tùy chọn gỡ lỗi.

+0

Nếu không, thì có ai biết nơi tệp được biên dịch được lưu trữ không? Tôi nghĩ rằng thay vì biên soạn sổ làm việc mới, nó sẽ không chỉ có thể gửi tất cả người dùng các tệp đã biên dịch này và cung cấp hướng dẫn về nơi các tệp này phải được lưu trữ trong thư mục tạm thời không? – Examorph

+0

Cảm ơn bạn Matteo, điều này không thực sự cấp bách, chỉ là một cái gì đó tôi đã có rất nhiều rắc rối với nhiều sách bài tập trước đây bao gồm dự án hiện tại của tôi. Tôi mong được thấy giải pháp của bạn. – Examorph

+0

Có bạn đi, đó là trong câu trả lời. Tôi vừa thử nghiệm một trong những dự án của tôi và dường như nó hoạt động tốt. Đừng ngần ngại chỉ ra những nhược điểm có thể xảy ra, đây là lần đầu tiên tôi thử một cái gì đó như thế này. –

Trả lời

11

Tôi nghĩ bạn có thể thử làm điều này bằng cách tự động hóa VBE (Visual Basic Editor).

YÊU CẦU:

bạn cần phải đi đến Excel/File/Options/Trust Center/Trust Center settings và đánh dấu vào tùy chọn Trust access to the VBA project object model (vì lý do bảo mật này không được kích hoạt mặc định, và nếu bạn không kiểm tra xem nó mã dưới đây sẽ tăng thời gian chạy lỗi 1004 programmatic access to visual basic project is not trusted). Rõ ràng, bạn chỉ cần làm điều này một lần (trong mỗi máy tính mà bạn muốn thực hiện việc biên dịch tự động, tất nhiên).

mã hóa:

bạn lệnh thanh hướng dẫn (ví dụ: "Compile dự án VBA") là bên trong đối tượng VBE của ứng dụng Excel, đặc biệt là trong các thanh lệnh:

Dim objVBECommandBar As Object 
Set objVBECommandBar = Application.VBE.CommandBars 

Đối tượng sẽ bây giờ chứa toàn bộ thanh lệnh của trình soạn thảo Visual Basic. Cụ thể, bạn tìm nút ID "578", thực tế là "Soạn thảo Dự án VBA" (bạn có thể đặt trình xem trên biến và duyệt tất cả bên trong cửa sổ cục bộ, bạn có thể muốn tìm kiếm lệnh). Do đó, để tóm tắt:

Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) 
compileMe.Execute 

Điều này sẽ cho phép lập dự án. Như bạn đã hỏi, bạn chỉ cần đưa thông tin này vào sự kiện mở Sổ làm việc này:

Private Sub ThisWorkbook_Open() 
    Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) 
    compileMe.Execute 'the project should hence be compiled 
End Sub 
+0

Cảm ơn bạn rất nhiều vì điều này, bạn đã giải quyết được phần lớn nhất của vấn đề của tôi. Bây giờ tôi đang cố gắng tìm ra cách để làm điều này với một sổ làm việc bị khóa như trong các sổ làm việc như vậy, tùy chọn biên dịch gỡ lỗi được tắt. Bạn có biết cách nào để giữ tùy chọn biên dịch được bật trong khi khóa mã không? – Examorph

+0

Đây là một câu hỏi khác, tôi đề nghị bạn mở một chủ đề khác (vì nó tốt để tách các vấn đề cho những người dùng khác và vì tôi không thể theo dõi bạn, sẽ không ở nhà trong 24 giờ tới;) –

+0

Sẽ làm , Nhờ sự giúp đỡ của bạn với điều này. – Examorph

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