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.