Xem các ô giống nhau trên các trang tính khác nhau (Microsoft Excel)
Khi sử dụng nhiều trang tính, Chris tự hỏi liệu có cách nào để ‘khóa’ việc cuộn qua tất cả các trang tính. Ví dụ: nếu anh ta cuộn xuống và lướt qua trên Trang tính1 cho đến khi hàng 100 đến 140 và cột G đến P được hiển thị, thì khi anh ta chuyển sang Trang tính2 (hoặc bất kỳ trang tính nào khác), anh ta muốn các hàng và cột giống nhau được hiển thị trên những trang tính.
Cách duy nhất để hoàn thành nhiệm vụ này là sử dụng macro. Điều phải xảy ra là macro cần xác định những hàng và cột nào được hiển thị khi một trang tính bị hủy kích hoạt (đang ở bên trái) và sau đó đặt hiển thị trang tính đã kích hoạt (trang mà bạn sắp sử dụng) thành các hàng và cột giống nhau. Các macro sau, được thêm vào mô-đun ThisWorkbook, thực hiện chính xác tác vụ này.
Dim grngSelection As Range Dim gintScrollColumn As Integer Dim glngScrollRow As Long Private Sub Workbook_SheetActivate(ByVal Sh As Object) If TypeName(ActiveSheet) = "Worksheet" Then On Error Resume Next With ActiveWindow Sh.Range(grngSelection.Address).Select .ScrollColumn = gintScrollColumn .ScrollRow = glngScrollRow End With End If End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Dim oSheet As Object If TypeName(Sh) = "Worksheet" Then Set oSheet = ActiveSheet Application.EnableEvents = False Sh.Activate With ActiveWindow gintScrollColumn = .ScrollColumn glngScrollRow = .ScrollRow Set grngSelection = .RangeSelection End With oSheet.Activate Application.EnableEvents = True End If End Sub
Lưu ý việc sử dụng các biến bên ngoài trình xử lý sự kiện. Các biến này được sử dụng để chuyển các giá trị của cột, hàng và vùng đã chọn từ trình xử lý SheetDeactivate sang trình xử lý SheetActivate.
Tất nhiên, bạn có thể không muốn một giải pháp tự động. Thay vào đó, bạn có thể muốn người dùng thực hiện một bước cụ thể để kích hoạt xem các trang tính có được đồng bộ hóa hay không. Điều này có thể được thực hiện bằng cách thêm macro sau vào một mô-đun thông thường trong sổ làm việc của bạn:
Global WindowScrollRow Global WindowScrollCol Global WindowSyncOn As Boolean Public Sub WindowLock() If Not WindowSyncOn Then WindowScrollRow = ActiveWindow.VisibleRange.Row WindowScrollCol = ActiveWindow.VisibleRange.Column Application.StatusBar = "WindowSync: ON" Else Application.StatusBar = "" End If WindowSyncOn = Not WindowSyncOn End Sub
Tất cả những gì macro này làm là để kiểm tra trạng thái của biến toàn cục WindowSyncOn. Nếu giá trị là Sai, thì cài đặt hiện tại cho hàng hiển thị trên cùng và cột hiển thị ngoài cùng bên trái được lưu trữ thành các biến toàn cục. Thiết lập của các biến này sau đó được sử dụng bởi trình xử lý sự kiện sau, được thêm vào mô-đun ThisWorkbook:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) If WindowSyncOn Then If Not ActiveWindow Is Nothing Then ActiveWindow.ScrollRow = WindowScrollRow ActiveWindow.ScrollColumn = WindowScrollCol End If End If End Sub
Macro chỉ cần kiểm tra cài đặt của biến WindowSyncOn và nếu nó là True (nó đã được đặt), thì macro sẽ đặt hàng và cột nào ở trên cùng và bên trái của cửa sổ đang hoạt động.
_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 (3860) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.