Làm cách nào để gửi "F9" vào Excel từ một tệp bó?

Làm cách nào để gửi "F9" vào Excel từ một tệp bó?

Tôi muốn làm mới bảng tính mỗi khi 5 phút trôi qua. 10:05, 11:05, 12:05 1:05,...

Trình lập lịch tác vụ đang được sử dụng để gửi lệnh vào những thời điểm được chỉ định nhưng không biết Excel mong đợi điều gì.

Suy nghĩ?




Trả lời:

Đây là chính thức - Tôi là một thằng ngốc! Có một dòng mã bị thiếu trong quy trình DoRecalcate()!

Ngay trước khi End Sub chúng ta cần khởi động lại đồng hồ!!! Vì vậy, nó sẽ trông giống như thế này:

Riêng Sub DoTính lại()
Application.Calculate ' tính toán lại tất cả các sổ làm việc đang mở
'bạn có thể xác định cụ thể trang tính nào sẽ làm việc
'Trang tính ("tên trang tính"). Tính toán ' thay đổi tên trang tính nếu cần
'Chúng ta PHẢI khởi động lại bộ hẹn giờ để nó sẽ kích hoạt lại sau!!!!
Chạy "StartTimer"
Kết thúc phụ

Bây giờ, với câu hỏi của bạn: cài đặt hẹn giờ về nội dung sẽ chạy và thời điểm chạy được lưu trữ nội bộ trong Excel, giống như một sự kiện đã lên lịch trong Bộ lập lịch tác vụ của Windows.

Trong trường hợp này, "chạy cái gì" là quy trình có tên DoRecalcate. Quy trình StartTimer thiết lập thời gian TIẾP THEO để chạy quy trình được đặt tên. Nhưng khi nó chạy, 'bộ lập lịch' sẽ nhanh chóng quên nó - đó là lý do tại sao chúng ta cần dòng mã được thêm vào trong quy trình đó để nó được đưa vào danh sách các sự kiện đã lên lịch để chạy lại khi bạn muốn.

Tất cả những gì quy trình StopTimer() thực hiện là đưa nó ra khỏi danh sách các sự kiện đã lên lịch của Excel nếu nó có trong đó. Nếu bạn không làm điều này, nó sẽ thực sự cố gắng chạy lại và buộc mở sổ làm việc - đó là lý do tại sao chúng tôi gọi nó khi bạn đóng sổ làm việc. Nhưng nếu bạn tình cờ chạy StopTimer theo cách thủ công, nó sẽ không nằm trong danh sách bị dừng và Excel sẽ đưa ra lỗi thời gian chạy - đó là lý do cho câu lệnh On Error Resume Next: bỏ qua lỗi đó nếu nó xảy ra .

Tôi xin lỗi vì đã không cung cấp mã thích hợp ban đầu. Lý do duy nhất của tôi là tôi đã dọn dẹp những thứ cũ, không liên quan trong phần đó và đã đi quá xa trong việc dọn dẹp đó.



Trả lời:

Không - nếu bạn bắt đầu lúc 11:44 thì nó sẽ chạy lúc 12:05

Tôi sẽ thực hiện các thay đổi để bạn có thể làm cho nó chạy cứ sau 5 phút hoặc thậm chí 30 giây một lần - nhưng tôi đặc biệt viết lại mã để làm như bạn đã yêu cầu: chạy lúc 5 phút sau một giờ.

Có 2 vị trí trong quy trình StartTimer mà bạn sẽ thấy mã này:

RunWhen = DateSerial(Năm(Bây giờ()), Tháng(Bây giờ()), Ngày(Bây giờ())) + _
TimeSerial(Giờ(Bây giờ()) + 1, 5, 0)

thay đổi cả hai thứ đó để trở thành

RunWhen = Bây giờ() + _
TimeSerial(0, 5, 0)

và nó sẽ chạy 5 phút một lần, bắt đầu từ 5 phút sau khi bạn mở sổ làm việc.

Trong TimeSerial() giá trị đầu tiên là giờ, giá trị thứ hai là phút, giá trị cuối cùng là giây. Vì vậy, nếu bạn muốn nó chạy cứ sau 30 giây:

RunWhen = Bây giờ() + _
TimeSerial(0, 0, 30)

Hãy nhớ lưu, đóng và mở lại sổ làm việc để bắt đầu hẹn giờ HOẶC bạn có thể vào mã và nhấp vào bất kỳ đâu trong mã StartTimer và nhấn nút [F5] để chạy mã đó mà không lưu, đóng và mở lại sổ làm việc. Sau đó, bạn có thể đóng trình soạn thảo VBA bằng cách nhấn [Alt]+[Q].

Comments

Popular posts from this blog

Macro Đã bật Excel bị hỏng khi sử dụng Excel> Chia sẻ> Email> Gửi dưới dạng tệp đính kèm

Microsoft excel - Tạo công thức trong đó dữ liệu từ các tab / Bảng tính khác nhau có thể được đồng bộ hóa dựa trên một ô trên bảng tính

Làm mới danh sách SharePoint đã xuất không thành công trong Excel 2013 khi hoạt động với Excel 2010