Bạn đã bao giờ muốn chạy một số mã Access theo lịch tự động chưa?
Tôi sẽ chỉ cho bạn cách sử dụng ứng dụng Access hiện có để chạy và thoát một cách duyên dáng khi được khởi chạy qua Trình lập lịch tác vụ trong khi vẫn hiển thị giao diện người dùng thân thiện khi được khởi chạy bởi người dùng cuối.
Chìa khóa để làm cho nó hoạt động là /cmd
cờ.
Chuyển Args dòng lệnh để truy cập
Để chuyển đối số dòng lệnh để truy cập, bạn sử dụng /cmd
đối số dòng lệnh khi khởi chạy ứng dụng của bạn:
Chỉ định rằng những gì tiếp theo trên dòng lệnh là giá trị sẽ được trả về bởi Lệnh hàm số. Tùy chọn này phải là công tắc cuối cùng trên dòng lệnh. Bạn có thể sử dụng dấu chấm phẩy (;) thay thế cho / cmd .
Sử dụng công tắc này để chỉ định đối số dòng lệnh có thể được sử dụng trong mã Visual Basic for Applications (VBA)
Để truy xuất văn bản bạn chuyển trên dòng lệnh sau /cmd
đối số, bạn sử dụng VBA.Command
hàm số.
Bạn có thể sử dụng chức năng này khi khởi động để chuyển hướng mã của mình để thực hiện bất kỳ tác vụ định kỳ nào.
Ví dụ thực tế
- Tạo cơ sở dữ liệu mới
- Thêm mã sau vào mô-đun tiêu chuẩn mới:
Public Function Startup()
If Trim(VBA.Command) = "Nightly" Then
Shell "winver", vbNormalFocus
Application.Quit
End If
MsgBox "Start up"
End Function
- Tạo một macro mới
- Chọn " RunCode "từ menu thả xuống" Thêm hành động mới "
- Đặt "Tên hàm" thành
Startup()
- Đóng và lưu macro dưới dạng " AutoExec "
Chạy với tư cách người dùng bình thường
Để kiểm tra ứng dụng như một người dùng bình thường, chỉ cần thu gọn và sửa chữa cơ sở dữ liệu.
Bạn sẽ thấy một hộp thông báo có nội dung "Khởi động".
Chạy như một tác vụ đã lên lịch
Để bắt chước đang chạy như một tác vụ đã lên lịch, hãy đóng cơ sở dữ liệu của bạn và khởi chạy nó bằng lệnh sau:
"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly
Access sẽ nhấp nháy nhanh trên màn hình, sau đó bạn sẽ thấy hộp thoại "Giới thiệu về Windows" và Access sẽ tự đóng.
Một số lưu ý
-
AutoExec
là một macro đặc biệt chạy tự động khi khởi động - Mặc dù
Startup()
quy trình không trả về giá trị nào, chúng tôi khai báo nó dưới dạngFunction
vì chúng tôi không thể gọi trực tiếp mộtSub
từ một macro trong Access - Trong điều kiện sử dụng bình thường, mã cửa sổ cmd bị bỏ qua
- Tôi gọi
Application.Quit
một cách rõ ràng bên trong khối "Hàng đêm" của tôi để tránh Quyền truy cập bị treo trên mã yêu cầu tương tác của người dùng (chẳng hạn như mã MsgBox trong ví dụ của tôi) - Tôi luôn gọi
Trim()
xung quanhVBA.Command
chức năng để tránh các lỗi được giới thiệu bởi khoảng trắng đầu hoặc cuối trên dòng lệnh - Thay thế cho
/cmd
, bạn cũng có thể sử dụng/x
chuyển đổi và chuyển cho nó tên của macro tùy chỉnh ( Tôi không làm điều đó vì tôi ghét macro với niềm đam mê của hàng nghìn mặt trời nóng trắng; hai macro duy nhất tôi từng sử dụng làAutoexec
vàAutokeys
vì chúng cung cấp chức năng đặc biệt )
Lưu ý cuối cùng về Bộ lập lịch tác vụ và Tự động hóa các ứng dụng Office khác
Nếu tác vụ của bạn dường như không hoạt động khi bạn đặt nó chạy qua đêm, hãy thử chuyển tùy chọn tác vụ đã lên lịch thành "Chỉ chạy khi người dùng đã đăng nhập".
Các ứng dụng Office không nhằm mục đích chạy ở chế độ mà Windows gọi là "không tương tác". Nếu bạn đặt một tác vụ đã lên lịch thành "Chạy cho dù người dùng có đăng nhập hay không", thì tác vụ đó sẽ chạy ở chế độ không tương tác. Điều này có thể gây ra nhiều sự cố, đặc biệt nếu bạn đang tự động hóa Excel như một phần của quy trình lặp lại.
Giải pháp đơn giản nhất là khóa máy trạm thay vì đăng xuất và để tùy chọn được đặt thành "Chỉ chạy khi người dùng đã đăng nhập".
Điều đó có thể không thực tế trong tình huống của bạn, nhưng đó là một cân nhắc quan trọng cần lưu ý. Hãy xem xét bản thân đã được cảnh báo:
Microsoft hiện không khuyến nghị và không hỗ trợ Tự động hóa các ứng dụng Microsoft Office từ bất kỳ thành phần hoặc ứng dụng khách không được giám sát, không tương tác nào