Sự kiện Workbook_Activate () không hoạt động khi Excel đã được mở
Hãy nhớ rằng - Đây là một diễn đàn công khai nên không bao giờ đăng thông tin cá nhân như email hoặc số điện thoại!
Sự cố : Tôi đang phát triển một Tiện ích, trong đó tôi phải mở sổ làm việc Excel chỉ một lần, điều này sẽ Kích hoạt Workbook_Activate Event và gọi một macro. và sau đó tôi phải thu nhỏ Ứng dụng Excel và khi tôi khôi phục lại nó bằng phím tắt, Quy trình tương tự sẽ lặp lại.
Nhưng Macro chạy rất tốt khi Excel được mở lần đầu tiên và sau đó tôi thu nhỏ Ứng dụng Excel. Thông qua Phím tắt, tôi khôi phục Ứng dụng Excel nhưng bằng cách nào đó, sự kiện WorkBook_Activate () không được kích hoạt.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Mã mẫu '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Private Sub Workbook_Activate ()
Gọi Macro
Kết thúc Sub
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Tôi không thể không nhận thấy thực tế là nếu bạn di chuột từ một sổ làm việc đã mở sang một sổ làm việc đã mở khác thì sự kiện Workbook_Activate () sẽ được kích hoạt. Nhưng nếu sổ làm việc Excel thu nhỏ được khôi phục, thì Sự kiện này không được kích hoạt.
Tôi không chắc liệu các Sự kiện như vậy có được thiết kế để chạy khi Excel đang hoạt động theo chương trình hay không.
Tôi chắc chắn đây không phải là một vấn đề lớn. VÌ VẬY HÃY GIÚP ĐỠ TẠI SỚM NHẤT.
Câu trả lời:
Mục đích của việc thu nhỏ WorkBook là gì?
Nếu bạn không thực sự cần phải thu nhỏ nó, có lẽ bạn có thể mở một sổ làm việc trống khác và sau đó thay đổi về sổ làm việc ban đầu để kích hoạt sự kiện Kích hoạt nó đã kích hoạt.
-- Hi vọng điêu nay co ich.
Doug Robbins - Word MVP,
dkr [atsymbol] mvps [dot] org
Đã đăng qua Cầu nối cộng đồng
"Gyanprakash" đã viết trong tin nhắn: *** Địa chỉ email bị xóa vì sự riêng tư *** ...
Hãy nhớ rằng - Đây là một diễn đàn công khai nên không bao giờ đăng thông tin cá nhân như email hoặc số điện thoại!Sự cố : Tôi đang phát triển một Tiện ích, trong đó tôi phải mở sổ làm việc Excel chỉ một lần, điều này sẽ Kích hoạt Workbook_Activate Event và gọi một macro. và sau đó tôi phải thu nhỏ Ứng dụng Excel và khi tôi khôi phục lại nó bằng phím tắt, Quy trình tương tự sẽ lặp lại.
Nhưng Macro chạy rất tốt khi Excel được mở lần đầu tiên và sau đó tôi thu nhỏ Ứng dụng Excel. Thông qua Phím tắt, tôi khôi phục Ứng dụng Excel nhưng bằng cách nào đó, sự kiện WorkBook_Activate () không được kích hoạt.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Mã mẫu '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Private Sub Workbook_Activate ()
Gọi Macro
Kết thúc Sub
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'Tôi không thể không nhận thấy thực tế là nếu bạn di chuột từ một sổ làm việc đã mở sang một sổ làm việc đã mở khác thì sự kiện Workbook_Activate () sẽ được kích hoạt. Nhưng nếu sổ làm việc Excel thu nhỏ được khôi phục, thì Sự kiện này không được kích hoạt.
Tôi không chắc liệu các Sự kiện như vậy có được thiết kế để chạy khi Excel đang hoạt động theo chương trình hay không.
Tôi chắc chắn đây không phải là một vấn đề lớn. VÌ VẬY HÃY GIÚP ĐỠ TẠI SỚM NHẤT.
Doug Robbins - Word MVP dkr [atsymbol] mvps [dot] org
Câu trả lời:
Sáng 26.12.2010 05:40, schrieb Gyanprakash:
Tôi đang phát triển một Tiện ích trong đó tôi phải mở sổ làm việc Excel chỉ một lần, nó sẽ Kích hoạt Workbook_Activate Event và gọi một macro. và sau đó tôi phải thu nhỏ Ứng dụng Excel và khi tôi khôi phục lại nó bằng phím tắt, Quy trình tương tự sẽ lặp lại.
IMHO điều này là có thể, nhưng với VBA thì không.
Mọi sự kiện được thiết kế để chỉ hoạt động bên trong excel. Điều này có nghĩa là chúng tôi không nhận được thông báo về các sự kiện Windows (MS-).
Ứng dụng cung cấp cho chúng tôi một số sự kiện:
--- schnipp ---
Làm mờ ứng dụng WithEvents dưới dạng ứng dụng
Private Sub Workbook_Open ()
Đặt App = Ứng dụng
Kết thúc Sub
Private Sub App_SheetActivate (ByVal Sh As Object)
Debug.Print "App_SheetActivate"
Kết thúc Sub
Private Sub App_WorkbookActivate (ByVal Wb As Workbook)
Debug.Print "App_WorkbookActivate"
Kết thúc Sub
Private Sub App_WindowActivate (ByVal Wb As Workbook, ByVal Wn As Window)
Debug.Print "App_WindowActivate"
Kết thúc Sub
Private Sub App_WindowResize (ByVal Wb As Workbook, ByVal Wn As Window)
Debug.Print "App_WindowResize"
Kết thúc Sub
--- schnapp ---
Nhưng chúng chỉ hoạt động nếu bạn thu nhỏ / thay đổi kích thước / tối đa hóa / đóng trang tính / sổ làm việc / cửa sổ bên trong excel. Mở 2 sổ làm việc và thực thi macro này để xem ý tôi là gì:
Sub Makro1 ()
Windows.Arrange sắp xếpStyle: = xlCascade
Kết thúc Sub
Sự kiện của bạn hoạt động ngay bây giờ nếu bạn nhấp vào bên trong cửa sổ này.
Nếu bạn muốn được chú ý nếu toàn bộ ứng dụng được thu nhỏ / thay đổi kích thước / tối đa hóa, bạn phải sử dụng phân lớp cửa sổ, nhưng điều này không dễ dàng và IMHO không thể phân lớp ứng dụng excel bằng VBA (Mọi nỗ lực của tôi đều khiến ứng dụng gặp sự cố) .
http://www.aaronballman.com/programming/REALbasic/WindowSubclassingArticle.php
Nếu ai đó biết nếu nó có thể và làm thế nào để làm, xin vui lòng cho tôi biết.
Cách duy nhất mà tôi biết là thỉnh thoảng gọi một phụ và phát hiện trạng thái cửa sổ.
Andreas.
Tùy chọn rõ ràng
Chức năng khai báo riêng tư IsIconic Lib "user32" (ByVal hWnd As Long)
Chức năng khai báo riêng tư IsZoomed Lib "user32" (ByVal hWnd As Long)
Hàm khai báo riêng GetForegroundWindow Lib "user32" () As Long
Khai báo riêng Hàm FindWindow Lib "user32" Bí danh "FindWindowA" (_
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Kiểm tra phụ ()
Dim hWnd As Long
hWnd = FindWindow ("XLMAIN", Application.Caption)
Nếu IsIconic (hWnd) Thì
Debug.Print "Minimized"
ElseIf IsZoomed (hWnd) Sau đó
Debug.Print "Tối đa hóa"
Khác
Nếu hWnd <> GetForegroundWindow Thì
Debug.Print "Không hoạt động"
Khác
Debug.Print "Bình thường"
Kết thúc nếu
Kết thúc nếu
Application.OnTime Now + TimeSerial (0, 0, 1), "Kiểm tra"
Kết thúc Sub
Câu trả lời:
Chào Doug,
Cảm ơn vì đã trả lời tuyệt vời. Trước đây tôi đã thử giải pháp tương tự và tôi đã thành công.
Nhưng tôi không sẵn lòng mở sổ làm việc trống khác và di chuột qua lại mọi lúc để kích hoạt sự kiện Workbook_Activate.
Lý do tại sao tôi đang cố gắng thu nhỏ cửa sổ là 'Tôi đang phát triển một tiện ích có chức năng Chụp ảnh màn hình Hoạt động.
Và điều này tôi định thực hiện bằng cách nhấn một số Phím tắt và do đó Kích hoạt sổ làm việc Excel sẽ kích hoạt sự kiện và do đó
thông qua API, cuối cùng tôi sẽ chụp ảnh màn hình.
Tôi đã tìm ra 2 lựa chọn thay thế cho nó.
1. Đóng sổ làm việc mọi lúc thông qua macro và mở nó thông qua phím tắt sẽ xử lý Sự kiện và macro sẽ được thực thi.
2. một trong những bạn đề nghị.
Nhưng tôi ngạc nhiên hơn khi thấy rằng tại sao Workbook_Activate sẽ không hoạt động khi Excel được Khôi phục.
Vì vậy, tôi đã tìm hiểu thêm về nó để có được giải pháp mà tôi đang tìm kiếm.
Câu trả lời:
Chào Andreas,
Cảm ơn cho câu trả lời thông tin tuyệt vời.
Tôi cần tìm hiểu thêm về phân lớp phụ của Windows để hiểu giải pháp khả thi cho sự cố của mình.
Tôi đã thử giải pháp bằng cách mở sổ làm việc trống khác và sau đó di chuột đến sổ làm việc chính, qua đó Kích hoạt Workbook_Event.
Một lần nữa, cảm ơn bạn đã làm sáng tỏ bản chất của vấn đề và các giải pháp thay thế mà tôi có thể sử dụng.
CHƠI LÔ TÔ!!!!!!!!!! Logic u được chia sẻ để gọi quy trình phụ để kiểm tra trạng thái cửa sổ theo thời gian là thứ mà tôi đang sử dụng để phát triển Tiện ích sẽ chụp Ảnh màn hình tự động.
Sẽ def. xem phân loại Windows Sub để có giải pháp khả thi.
Chúc mừng
Câu trả lời:
Sẽ def. xem phân loại Windows Sub để có giải pháp khả thiChỉ cần chuẩn bị cho rất nhiều lần khởi động lại máy tính khi bạn phát triển giải pháp phân lớp của mình ... bạn sẽ gặp rắc rối với chính nền tảng Windows và rất dễ làm hỏng toàn bộ hệ thống của bạn khi xảy ra sự cố (như chúng thường làm trong quá trình phát triển mã).
LƯU Ý: Vui lòng đánh dấu tin nhắn hoặc các tin nhắn (có, bạn có thể đánh dấu nhiều hơn một) trả lời câu hỏi của bạn là "Câu trả lời" để người khác biết câu hỏi của bạn đã được giải quyết.
Câu trả lời:
Chào Rick,
Cảm ơn vì đã trả lời thông tin nhanh chóng. hãy cẩn thận khi xem xét Windows SubClassing.
Câu trả lời:
Xin chào Rick / Andreas / Doug
Bạn có thể vui lòng bật mí thêm về giải pháp Kích hoạt WorkBook_Event bất cứ khi nào Minimized Excel Workbook được khôi phục.
Tôi muốn Mở bất kỳ Sổ làm việc nào và sau đó chuyển sang Sổ làm việc cần thiết để Kích hoạt Sự kiện.
Người ta có thể kích hoạt bất kỳ sự kiện sổ làm việc nào khi sổ làm việc được tối đa hóa hoặc được khôi phục từ trạng thái thu nhỏ mà không cần sự trợ giúp của bất kỳ sổ làm việc nào khác không?
Giúp đỡ một cách tử tế.
Câu trả lời:
Tôi tin rằng cách duy nhất để đạt được những gì bạn đang có là mở một sổ làm việc khác, sau đó kích hoạt lại sổ làm việc ban đầu của bạn và đóng sổ làm việc mới hoặc thử phương pháp do Andreas đề xuất.
-- Hi vọng điêu nay co ich.
Doug Robbins - Word MVP,
dkr [atsymbol] mvps [dot] org
Đã đăng qua Cầu nối cộng đồng
"Gyanprakash" đã viết trong tin nhắn: *** Địa chỉ email bị xóa vì sự riêng tư *** ...
Xin chào Rick / Andreas / DougBạn có thể vui lòng bật mí thêm về giải pháp Kích hoạt WorkBook_Event bất cứ khi nào Minimized Excel Workbook được khôi phục.
Tôi muốn Mở bất kỳ Sổ làm việc nào và sau đó chuyển sang Sổ làm việc cần thiết để Kích hoạt Sự kiện.
Người ta có thể kích hoạt bất kỳ sự kiện sổ làm việc nào khi sổ làm việc được tối đa hóa hoặc được khôi phục từ trạng thái thu nhỏ mà không cần sự trợ giúp của bất kỳ sổ làm việc nào khác không?
Giúp đỡ một cách tử tế.
Doug Robbins - Word MVP dkr [atsymbol] mvps [dot] org
Câu trả lời:
Tôi vừa xóa câu trả lời của mình bằng cách đi lên và bỏ phiếu ở giữa. Đây không phải là lần đầu tiên và có lẽ sẽ không phải là lần cuối cùng tôi 24 ngày nữa sẽ không còn 70
Được rồi, chúng ta lại tiếp tục ... cả ba người này đều xứng đáng nhận được phiếu bầu là hữu ích ngay cả khi nó không giúp bạn vượt qua được cánh cửa mà bạn đang cố gắng vượt qua. Nó đã mở ra những cánh cửa mà bạn sẽ cần sau này ... ok đây là mã của bạn được thực thi tại thời điểm mở ....
Private Sub Workbook_Activate () một SỰ KIỆN diễn ra vào thời gian mở
Gọi Macro
Kết thúc Sub
Đây là macro bạn đã tạo để khôi phục cửa sổ của mình bằng phím tắt [ctrl i]
Macro phụ1 ()
'
'Macro1 Macro
'
'Phím tắt: Ctrl + i
'
Application.WindowState = xlNormal không phải là một sự kiện mà là một thay đổi trong thuộc tính
Kết thúc Sub
đây là giải pháp của bạn ......... chèn vào macro khôi phục cuộc gọi đến quá trình bạn muốn xảy ra
Macro phụ1 ()
'
'Macro1 Macro
'
'Phím tắt: Ctrl + i
'
Application.WindowState = xlNormal (thay đổi thuộc tính)
Gọi Macro
Kết thúc Sub
Không có gì ngăn cản bạn đồng thời thay đổi thuộc tính windowstate: làm những gì bạn muốn một sự kiện kích hoạt không tồn tại sẽ làm cho bạn !!!!!!!
sự phân biệt ..... thay đổi một thuộc tính và tạo và sự kiện một cái có thể bị mắc kẹt cái kia không thể
Bây giờ trở lại cánh cửa mà tôi đã nói về ..
thu nhỏ cửa sổ (cửa sổ Excel) phù hợp hoặc bất kỳ cửa sổ nào khác .. sẽ không thay đổi trọng tâm của những gì bạn đang làm việc .. nó sẽ không hủy kích hoạt sự kiện và không hủy kích hoạt những gì bạn đang làm việc. Lý do duy nhất để hủy kích hoạt cửa sổ bạn đang làm việc là nếu bạn (nhấp vào) sự kiện trên cửa sổ khác. Bằng cách nhấp vào một cửa sổ khác, bạn đang nói với hệ thống (tôi muốn làm việc ở đây) ... vì vậy nó phải hủy kích hoạt cửa sổ cũ để kích hoạt sự kiện cửa sổ mới (chỉ một đối tượng có thể hoạt động tại một thời điểm) và cho đến khi bạn nhấp vào sự kiện (hoặc di chuột qua cho vấn đề đó) sự kiện trên một đối tượng khác nó sẽ vẫn hoạt động .... Họ gọi nó là nút bắt chước vì tất cả những gì nó làm là làm cho nó nhỏ hơn, (thay đổi thuộc tính của nó) nó không tắt cũng không đóng. nó ... bởi vì hệ thống biết rằng ngay sau khi bạn làm cho nó lớn hơn một lần nữa, bạn sẽ muốn làm việc với nó .... và tin tôi rằng bạn không muốn liên tục bị buộc phải kích hoạt lại thứ gì đó mà bạn đang làm để tiếp tục những gì bạn đang làm .... Bạn sẽ cảm thấy rằng khi bạn đang sao chép từ cửa sổ này sang cửa sổ khác ... sự kiện nhấp chuột kích hoạt lại được yêu cầu thực sự trở nên nghiêm trọng ..
Chà, tôi THỰC SỰ hy vọng tính năng chèn cuộc gọi phù hợp với bạn (tôi đã không kiểm tra nó) và tôi hy vọng rằng bài diễn văn của tôi đủ thông tin để khiến nó đáng đọc ...... John ......
Gửi thư cho Doug Rick và Andreas ..... một lần nữa cảm ơn sự giúp đỡ mà bạn đã dành cho tôi vài tháng trước và tất cả những gì tôi học được bằng cách đọc câu trả lời của bạn ở đây và về những câu hỏi khác mà tôi sử dụng đọc chúng như một công cụ học tập
Câu trả lời:
Gyanprakash .... Tôi đã bỏ qua một chi tiết rất quan trọng ........ Lý do duy nhất bạn có thể làm những gì tôi đề nghị là ......
nhấn phím Ctrl + i là sự kiện bị mắc kẹt để thay đổi thuộc tính và gọi macro bạn muốn xảy ra .. JOHN
Comments
Post a Comment