[Hỏi đáp] Workbook_open() không chạy do lỗi timing?

Liên hệ QC

longtran295

Thành viên mới
Tham gia
21/1/15
Bài viết
15
Được thích
0
Chào cả nhà,
Mình viết 1 đoạn code ngắn để mở rộng ribbon khi mở file (code trong Thisworkbook):
Mã:
Private Sub Workbook_open()
If Application.CommandBars("Ribbon").Height<=100 Then
SendKeys "^{F1}", True
End If
End Sub
Nhưng code không chạy. Mình nghĩ do time file loading đoạn code không có tác dụng. Các bạn có giải pháp nào chờ file load xong rồi tiến hành chạy code trên không ạ.
Mình cảm ơn!
 
Nếu bạn thử rồi mà không được thì hãy đính kèm tập tin. Và nhất thiết phải hướng dẫn cụ thể, làm thế nào để "không được". Tức click tập tin ở desktop để mở hay mở Excel rồi chọn File -> Open. Hay trước đó mở tập tin khác rồi mới File -> Open tập tin đính kèm. Hay còn gì nữa. Hướng dẫn từng bước thao tác với tập tin đính kèm để "không được". Với tôi "không được" chưa chắc thuyết phục.
Và tại sao Workbook_WindowActivate thì không đáp ứng yêu cầu của bạn. Khi bạn mở tập tin thì phải chạy sự kiện đó chứ.
Bài đã được tự động gộp:


Luân phiên có tác dụng như này anh ạ, nếu code không phải đặt ở Button_Click mà ở Workbook_WindowActivate.

Nếu phiên làm việc cuối cùng mà người dùng minimize ribbon thì bây giờ mở tập tin sẽ có ribbon thả rộng. Nếu phiên làm việc trước người dùng thả rộng ribbon thì bây giờ mở tập tin sẽ có ribbon thu hẹp.
Mã:
Private Sub Workbook_open()
If Application.CommandBars("Ribbon").Height<=100 Then 
SendKeys "^{F1}", True 
End If 
End Sub
Mã:
Private Sub Workbook_WindowActivate()
If Application.CommandBars("Ribbon").Height<=100 Then 
SendKeys "^{F1}", True 
End If 
End Sub
Mã:
Private Sub Workbook_open()
If Application.CommandBars("Ribbon").Height<=100 Then
Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",True)
End If
End Sub
Mã:
Private Sub Workbook_WindowActivate()
If Application.CommandBars("Ribbon").Height<=100 Then Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",True) 
End If 
End Sub
Mã:
Private Sub Workbook_open()
If Application.CommandBars("Ribbon").Height<=100 Then
Application.CommandBars.ExecuteMso "HideRibbon"
Application.CommandBars.ExecuteMso "HideRibbon"
End If
End Sub
Mã:
Private Sub Workbook_WindowActivate()
If Application.CommandBars("Ribbon").Height<=100 Then 
Application.CommandBars.ExecuteMso "HideRibbon"
Application.CommandBars.ExecuteMso "HideRibbon"
End If 
End Sub
Mã:
Private Sub Workbook_open()
If Application.CommandBars("Ribbon").Height<=100 Then
Application.CommandBars.ExecuteMso "MinimizeRibbon"
Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If
End Sub
Mã:
Private Sub Workbook_WindowActivate()
If Application.CommandBars("Ribbon").Height<=100 Then 
Application.CommandBars.ExecuteMso "MinimizeRibbon"
Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If 
End Sub
Đây là những code em đã thử. File của em khoảng 18MB, do bảo mật công ty nên không gửi được ra ngoài. Cả 2 trường hợp click mở file và click mở file trong khi có các file khác đang mở, các macro trên đa số lần thử đều không chạy. Máy Office 16, Ram 4GB, trung bình mở file mất ~4s. Em có ví dụ như file đính kèm ở post#16.
 
Upvote 0
Mã:
Private Sub Workbook_open()
If Application.CommandBars("Ribbon").Height<=100 Then
Application.CommandBars.ExecuteMso "MinimizeRibbon"
Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If
End Sub
Mã:
Private Sub Workbook_WindowActivate()
If Application.CommandBars("Ribbon").Height<=100 Then
Application.CommandBars.ExecuteMso "MinimizeRibbon"
Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If
End Sub
Đây là những code em đã thử. File của em khoảng 18MB, do bảo mật công ty nên không gửi được ra ngoài. Cả 2 trường hợp click mở file và click mở file trong khi có các file khác đang mở, các macro trên đa số lần thử đều không chạy. Máy Office 16, Ram 4GB, trung bình mở file mất ~4s. Em có ví dụ như file đính kèm ở post#16.
Tại sao là
Mã:
If Application.CommandBars("Ribbon").Height<=100 Then
    Application.CommandBars.ExecuteMso "MinimizeRibbon"
    Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If


mà không là?
Mã:
If Application.CommandBars("Ribbon").Height<=100 Then
    Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If

Gọi 2 lần thì coi như huề. Đang thu nhỏ thành thả rộng, rồi lại thành thu nhỏ.
 
Upvote 0
Vâng 1 dòng thôi bác nhé, edit trên điện thoại nên em không để ý.
Bài đã được tự động gộp:

Bác test thử với file nặng xem, em thấy xịt nhiều lắm.
 
Upvote 0
Vâng 1 dòng thôi bác nhé, edit trên điện thoại nên em không để ý.
Bài đã được tự động gộp:

Bác test thử với file nặng xem, em thấy xịt nhiều lắm.
1. Thế thì chịu vì tôi test cả tập tin bài #16 thì vẫn thành công. Bạn nói không thành công thì tôi cũng không kiểm chứng được.

2. Bạn không gửi tập tin thì làm sao người khác biết được trong đó có những gì, code thế nào, có cái gì "cản trở" không.

Nếu là đường cùng thì có thể trong Open đặt đồng hồ (OnTime), vd. chờ vài giây thì chạy macro. Macro sẽ active workbook có code ThisWorkbook (đề phòng có tập tin khác đang hoạt động ở thời điểm đó) -> rồi chạy code mở rộng ribbon.

Tôi không muốn tham gia nữa. Tôi chỉ muốn nói là nếu những giải pháp khác không thành công thì SendKeys CÀNG KHÓ CÓ THỂ THÀNH CÔNG.
 
Upvote 0
1. Thế thì chịu vì tôi test cả tập tin bài #16 thì vẫn thành công. Bạn nói không thành công thì tôi cũng không kiểm chứng được.

2. Bạn không gửi tập tin thì làm sao người khác biết được trong đó có những gì, code thế nào, có cái gì "cản trở" không.

Nếu là đường cùng thì có thể trong Open đặt đồng hồ (OnTime), vd. chờ vài giây thì chạy macro. Macro sẽ active workbook có code ThisWorkbook (đề phòng có tập tin khác đang hoạt động ở thời điểm đó) -> rồi chạy code mở rộng ribbon.

Tôi không muốn tham gia nữa. Tôi chỉ muốn nói là nếu những giải pháp khác không thành công thì SendKeys CÀNG KHÓ CÓ THỂ THÀNH CÔNG.
Cảm ơn bác. Hiện không có laptop riêng nên em không minh họa chính xác việc delay open dẫn đến macro không chạy được. Giải pháp tạm thời của em cũng chỉ là:
Application.OnTime Now + TimeValue("00:00:15"), "delaycall"
thôi dù không triệt để.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom