Tôi thực sự đã gặp phải vấn đề chính xác này và cuối cùng đã tìm ra giải pháp cho vấn đề của mình.
Đây là nút Shift trong lối tắt bàn phím bạn đang sử dụng để gọi mã của bạn. Có vẻ như có một tính năng trong Excel được thiết kế đặc biệt để ngăn mã chạy khi sổ làm việc được mở và phím Shift được nhấn, nhưng không may điều này cũng ảnh hưởng đến việc mở sổ làm việc với phương pháp Workbook.Open
qua VBA. Điều này đã được đề cập trong KB Article 555263, áp dụng cho Excel 2000 & 2003, nhưng tôi gặp phải cùng một vấn đề trong Excel 2010, vì vậy tôi tưởng tượng nó cũng ảnh hưởng đến năm 2007 là tốt.
Điều này xảy ra đặc biệt khi bạn cố mở một sổ làm việc qua mã rất sớm trong chương trình. Nếu cuộc gọi Workbook.Open
đạt đến mã trước khi bạn có đủ thời gian để thực sự rời khỏi nút Shift, Excel giải thích rằng đó là một nỗ lực để chặn mã chạy và hủy quá trình. Và không có thông báo lỗi hoặc bất cứ điều gì mà tôi đã tìm thấy. Nó dừng lại đột ngột.
Giải pháp khắc phục sự cố/khắc phục sự cố là buộc mã phải chờ phím Shift được phát hành trước khi phát hành lệnh Workbook.Open
.
mỗi bài báo, chỉ cần thêm mã này vào macro của bạn và rằng nên làm điều đó:
'Declare API
Declare Function GetKeyState Lib "User32" (ByVal vKey As Integer) As Integer
Const SHIFT_KEY = 16
Function ShiftPressed() As Boolean
'Returns True if shift key is pressed
ShiftPressed = GetKeyState(SHIFT_KEY) < 0
End Function
Sub Demo()
Do While ShiftPressed()
DoEvents
Loop
Workbooks.Open Filename:="C:\MyPath\MyFile.xlsx"
End Sub
(Chú ý: Mã này là dành cho phiên bản 32-bit của Excel phiên bản 64-bit sẽ cần phải sử dụng. thuộc tính PtrSafe
trên tuyên bố Declare
).
Nếu bạn không muốn thêm mã thêm, sau đó chỉ tùy chọn khác của bạn đang không sử dụng Ctrl +phím Shift +Một số văn để khởi động một vĩ mô, hoặc đặt lệnh Workbook.Open
sau này trong macro (không phải ngay từ đầu) để cho bạn thời gian nhả nút Shift sau khi bắt đầu.
Bạn nói rằng nó không "làm bất cứ điều gì" - bạn đang mong đợi điều gì? Có lẽ có nhiều mã hơn sau mẫu đã đăng của bạn. FunctionGetFileName là gì? –
Kết quả mong đợi sẽ được thực thi của dòng tiếp theo, FunctionGetFileName và tiếp tục thực thi thông qua tài liệu. FunctionGetFileName là một hàm tôi đã viết ở đâu đó trong chương trình tìm FileName từ FilePath, nhưng có nhiều mã sau đó cũng không thực thi. Tuy nhiên, từ thử nghiệm hơn nữa, tôi đã thu hẹp vấn đề và sửa đổi câu hỏi cho phù hợp. – soytsauce
Phiên bản Excel nào? Làm việc cho tôi vào năm 2007 với Ctrl + Shift + F. –