2012-01-18 31 views
9

Tôi cần chạy macro trong bảng tính Excel thông qua tác vụ lịch biểu. tôi đã xác định được công việc như sau:Làm cách nào bạn có thể chạy macro Excel thông qua tác vụ lịch biểu

"C: \ Program Files \ Microsoft Office \ Office10 \ Excel.exe" ""

Vấn đề là khi công việc bắt đầu Excel sẽ hiển thị một cửa sổ pop-up và hỏi xem chúng tôi có muốn vô hiệu hóa/bật các macro hay không, việc này sẽ chặn việc thực hiện công việc.

Tôi làm cách nào để chạy macro này mà không phải nhấp vào bật macro theo cách thủ công?

+0

này có thể giúp https://stackoverflow.com/questions/22771185/how-to-set-recurring-schedule-for-xlsm-file-using-windows-task -scheduler – Justin

Trả lời

8

Viết vbscript ngắn khởi chạy Excel, tải sổ làm việc của bạn và sử dụng Application.Run để chạy macro. Yêu cầu tác vụ theo lịch của bạn chạy vbscript.

Ví dụ: http://www.mrexcel.com/forum/showthread.php?t=302970

+0

+1 Cách tiếp cận tốt nhất. Nó rất đáng để ghi lại macro bên trong vbs để đảm bảo mã chạy, tức là đánh bại các vấn đề về macro cho phép. – brettdj

+0

Tập lệnh có vẻ hoạt động nhưng không ngăn được lời nhắc "Bật Macro". Tôi nghĩ rằng nó có thể có một cái gì đó để làm với một chính sách an ninh của công ty được cài đặt tại nơi làm việc của tôi? – mek363

0

Bạn có thể thử hạ mức bảo mật của excel để tránh hiện tượng này xuất hiện khi khởi chạy excel.

3

Bạn không chỉ định những gì phiên bản của Excel hay những phiên bản của Windows (hoặc Macintosh) vì vậy tôi sẽ chỉ định mà tôi đang sử dụng Excel 2010 từ Văn phòng 32-bit trên Windows 7 Ultimate 64 chút ...


Nếu bạn muốn giữ lại bảng tính của bạn mở và chạy mã tại một thời gian nhất định, sau này, sau đó thử này ..

Chèn một mô-đun mã mới vào dự án của bạn - sử dụng một mô-đun mà bạn đã có trong dự án của mình.

Tạo một chương trình con lên lịch như hình dưới đây:

Sub Scheduler() 

'-- RUNS SUB(S) (OR FUNCTIONS) AT TIME SCHEDULED. 

    Application.OnTime TimeValue("11:46:40"), "TheScheduledSub" 

End Sub 

Tạo một chương trình con (hoặc chức năng) mà bạn muốn chạy. Dưới đây là một ví dụ này:

Sub TheScheduledSub() 

    Debug.Print "TheScheduledSub() has run at " & Time 

End Sub 

Scheduler() sẽ thực hiện TheScheduledSub() tại thời điểm chính xác định bên trong Scheduler(), được xác định bởi TimeValue. Bạn có thể đọc thêm về TimeValuehere.

Có thể bạn có thể chuyển giá trị thời gian mà bạn muốn trình lên lịch() để thực thi (các) hàm hoặc (các) hàm của bạn dưới dạng tham số trong phần phụ.

Có thể bạn sẽ chạy một phụ 5 giờ từ bây giờ, cho phép nói. I E. Application.OnTime Now + TimeValue ("05:00:00"), "TheScheduledSub"

hoặc có thể một ngày kể từ bây giờ? Chơi xung quanh với nó.

Tôi đã nhận được hai người đăng ký để thực thi tại các thời điểm khác nhau. Tôi cũng đã cố gắng thực hiện hai cùng một lúc. Kinh nghiệm của tôi với hai thực thi subs khác nhau cùng một lúc là phụ thứ hai dường như thực hiện trước khi đầu tiên, nhưng tôi havent khám phá đầy đủ nó. Vì vậy, YMMV.

Tôi không nghĩ rằng Excel VBA có khả năng đa luồng nên hãy ghi nhớ điều đó. Tôi đang chạy Excel 2010 32-bit từ bộ Office. Bạn không chắc cách Office Excel 64 bit hoạt động như thế nào hoặc cho bất kỳ phiên bản hoặc nền tảng nào khác.Dù sao, đa luồng/đa nhiệm Excel VBA không phải là những gì bạn yêu cầu nhưng nó sẽ được xem xét.

Xem câu hỏi này và chơi với phần trên tôi có thể nghĩ ra một vài ý tưởng mà tôi muốn thử!

0

Bạn cũng có thể sử dụng macro mở và cuộc gọi của sổ làm việc. Chỉ cần có các tác vụ theo lịch biểu mở sổ làm việc và macro sẽ chạy khi sổ làm việc được mở.

0

Ngoài ra, tôi thấy đó là một ý tưởng tốt để có

Application.DisplayAlerts = False

ngay từ đầu để vô hiệu hóa bất kỳ thông báo popup có thể gián đoạn macro của bạn khi chạy.

Hoặc xem video hướng dẫn: http://youtu.be/lFSgV2gym9g

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