Xác lập vùng cuộn ( ScrollArea ) (5 người xem)

  • Thread starter Thread starter Blad01
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Blad01

Thành viên thường trực
Tham gia
6/10/07
Bài viết
350
Được thích
28
Xin hỏi các bạn, tôi muốn cố định thanh cuộn dọc và thanh cuộn ngang theo một vùng tùy ý thì phải làm thế nào ???.
Tôi thấy khi vào cửa sổ VBA, mở cửa sổ Properties Windows của VBA. Chọn một sheet bất kì, trong thẻ Alphabetic tìm tới dòng ScrollArea và nhập vùng cố định thanh cuộn (VD: $A$1:$A$10) trở về sheet vừa chọn lập tức thanh cuộn sẽ được giới hạn trong vùng ta vừa chọn. Nhưng khi thoát file Excell đó VBA không lưu lại vùng cuộn mà ta đã chọn trước đó. Vậy làm thế nào để vùng cuộn mà ta chọn trong ScrollArea có thể lưu lại được ??? (nếu giải quyết được vấn đề này thì không cần phải viết code xác lập vùng cuộn).
Mời các bạn xem hình.
 
Lần chỉnh sửa cuối:
Dùng code sau đâu là 1 gợi ý:
Mã:
Private Sub Worksheet_Activate()
Me.ScrollArea = "A1:O40"
End Sub
Sẽ chỉ cho phép cuộn đến dòng 40 cột O
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng code sau đâu là 1 gợi ý:
Mã:
Private Sub Worksheet_Activate()
Me.ScrollArea = "A1:O40"
End Sub
Sẽ chỉ cho phép cuộn đến dòng 40 cột O
Cảm ơn bạn, nhưng cho mình hỏi đoạn code trên là áp dụng cho tất cả các Sheet có phải không ? vậy mình muốn chỉ áp dụng cho Sheet1 thôi thì phải làm thế nào ???
 
Upvote 0
Cảm ơn bạn, nhưng cho mình hỏi đoạn code trên là áp dụng cho tất cả các Sheet có phải không ? vậy mình muốn chỉ áp dụng cho Sheet1 thôi thì phải làm thế nào ???
Bạn muốn nó có tác dụng ở sheet nào thì copy code và Alt + F11 rồi paste vào sheet ấy là xong
(Worksheet_Activate đương nhiên có tác dụng trong 1 sheet... cái sheet nào có chứa code)
Cho bạn file tham khảo luôn đây
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn muốn nó có tác dụng ở sheet nào thì copy code và Alt + F11 rồi paste vào sheet ấy là xong
(Worksheet_Activate đương nhiên có tác dụng trong 1 sheet... cái sheet nào có chứa code)
Cho bạn file tham khảo luôn đây
Cái này của bạn có một nhược điểm là phải di chuyển qua lại giữa các Sheet thì mới có tác dụng, còn nếu mở mặc định ở Sheet 1 (là sheet đặt code) thì code mất tác dụng ngay.
 
Upvote 0
Mình lượm được cái này trên đường, có thẻ giúp gì cho bạn chăng(?!)

Cái của bạn có một nhược điểm: Di chuyển qua lại giữa các Sheet mới có tác dụng, còn nếu mở mặc định ở Sheet 1 (là sheet đặt code) thì code mất tác dụng ngay.
PHP:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim lCol As Integer, lRow As Long

 If WorksheetFunction.CountA(Cells) > 0 Then
'Search by Rows.'
    lRow = Cells.Find(What:="*", After:=[A1], _
        SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    If lRow < 65536 Then lRow = lRow + 1
'Search by Columns.'
    lCol = Cells.Find(What:="*", After:=[A1], _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    If lCol < 256 Then lCol = lCol + 1
    Me.ScrollArea = Range(Cells(1, 1), Cells(lRow, lCol)).Address
'    MsgBox Me.ScrollArea '<<==''
 Else
    Me.ScrollArea = ""
 End If
End Sub
 
Upvote 0
Cái này của bạn có một nhược điểm là phải di chuyển qua lại giữa các Sheet thì mới có tác dụng, còn nếu mở mặc định ở Sheet 1 (là sheet đặt code) thì code mất tác dụng ngay.
Nếu vậy thì bạn copy code này vào trong cái Module1

Mã:
Public Sub SetScrollArea()
ActiveSheet.ScrollArea = ""
Set RngSel = Application.InputBox("Xin chon vung lam viec", "Set Workspace", Selection.Address, , , , , 8)
ActiveSheet.ScrollArea = RngSel.Address
End Sub

Muốn giới hạn vùng làm việc ở đâu thì kích hoạt code và định vùng ở đó. Nếu có đặt cái code worksheet_activate định vùng thì nên xóa đi để tránh lập lại thao tác không cần thiết.

Mến
 
Upvote 0
Cái này của bạn có một nhược điểm là phải di chuyển qua lại giữa các Sheet thì mới có tác dụng, còn nếu mở mặc định ở Sheet 1 (là sheet đặt code) thì code mất tác dụng ngay.
Đúng vậy! Vì sự kiện Active nó như vậy!
Học từ thấp lên cao! Nếu không đòi hỏi cao thì cũng chẳng có vấn đề!
(dùng Selection_Change thì quá phí)
 
Upvote 0
Nếu vậy thì bạn copy code này vào trong cái Module1

Mã:
Public Sub SetScrollArea()
ActiveSheet.ScrollArea = ""
Set RngSel = Application.InputBox("Xin chon vung lam viec", "Set Workspace", Selection.Address, , , , , 8)
ActiveSheet.ScrollArea = RngSel.Address
End Sub
Muốn giới hạn vùng làm việc ở đâu thì kích hoạt code và định vùng ở đó. Nếu có đặt cái code worksheet_activate định vùng thì nên xóa đi để tránh lập lại thao tác không cần thiết.

Mến
Sao mình làm không được nhỉ ???
 
Upvote 0
Trời ạ, vậy mà mình cứ hùng hục thực hiện nó. hix hix quả thực thiếu hiểu biết về VBA quá mức.
Bạn muốn nó tự động thì phải chọn sự kiện hợp lý, chẳng hạn là Selection_Change hoặc Active
Sự kiện Active đơn giản (theo tôi là ít hao tốn tài nguyên) nhưng lại có nhựoc điểm như bạn đã phát hiện
Sự kiện Selection_Change có thể khắc phục nhựoc điểm này nhưng quá tốn tài nguyên (mổi khi bạn click chuột chọn 1 cell là code hoạt động mặc dù không cần thiết)
Tôi chỉ hiểu tàm tạm như vậy!
 
Upvote 0
MÌnh có 1 ý kiến nhỏ về khắc fục việc nhược điểm của Activate.ta có thể thay bằng
PHP:
Private Sub Workbook_Open()
    Sheet1.ScrollArea = "H16:H16"
End Sub
 

File đính kèm

Upvote 0
Xin hỏi mình có thể chọn 2 vùng ScrollArea trên cùng 1 sheet bằng cách này được không
"C3:C5" và
"C12:D100"

Cám ơn
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom