Tìm các bản sao khác của Excel trong Macro (Microsoft Excel)
Nếu bạn chạy chương trình VBA từ bên trong một phiên bản Excel cụ thể, bạn có thể tạo các phiên bản Excel khác, mở và sửa đổi sổ làm việc trong các phiên bản mới được tạo, rồi đóng các phiên bản đó. Tuy nhiên, bạn có thể tự hỏi làm thế nào bạn có thể xác định, trong một macro, nếu các phiên bản Excel khác đã chạy và nếu có, hãy kiểm soát các phiên bản đó.
Có một số cách bạn có thể thực hiện để làm điều này. Nếu bạn chỉ muốn biết có bao nhiêu phiên bản Excel đang chạy, bạn có thể sử dụng macro sử dụng API Windows. Hàm sau thực hiện phương pháp này:
Public Declare Function GetDesktopWindow Lib "user32" () As Long Public Declare Function FindWindowEx Lib "user32" Alias _ "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Function ExcelInstances() As Long Dim hWndDesk As Long Dim hWndXL As Long 'Get a handle to the desktop hWndDesk = GetDesktopWindow Do 'Get the next Excel window hWndXL = FindWindowEx(GetDesktopWindow, hWndXL, _ "XLMAIN", vbNullString) 'If we got one, increment the count If hWndXL > 0 Then ExcelInstances = ExcelInstances + 1 End If 'Loop until we've found them all Loop Until hWndXL = 0 End Function
Mã này được phát triển bởi Excel MVP Stephen Bullen. Rõ ràng là nó sẽ không cho phép bạn truy cập vào các phiên bản Excel riêng lẻ; nó chỉ trả về một số lượng các phiên bản được mở. Nếu bạn muốn phát triển mã để sử dụng các phiên bản, thì bạn không cần phải dựa vào Windows API. Thay vào đó, bạn có thể sử dụng mã như sau để xác định xem một phiên bản Excel có đang mở hay không:
Dim xlApp As Excel.Application Set xlApp = GetObject(, "Excel.Application")
Nếu một phiên bản đang chạy, bạn có thể truy cập nó bằng đối tượng xlApp. Nếu một phiên bản không chạy, bạn sẽ gặp lỗi thời gian chạy. Hàm GetObject lấy phiên bản Excel đầu tiên đã được tải. Để truy cập vào những người khác, bạn có thể đóng cái đó rồi thử GetObject lại để lấy cái tiếp theo, v.v.
Nếu bạn muốn đặt xlApp thành một phiên bản cụ thể của Excel, bạn có thể làm như vậy nếu bạn biết tên của sổ làm việc đang mở trong phiên bản đó:
Dim xlApp As Excel.Application Set xlApp = GetObject("ExampleBook").Application
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (9451) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: