تیمز برگه هایی دارد که دارای دو بخش مجزا هستند (بگذارید آنها را بخش های بالا و پایین بنامیم) که سربرگ ستون ها کمی متفاوت است. او ردیف بالا را ثابت کرد تا سرصفحه های بخش بالایی در حین پیمایش به پایین قابل مشاهده باشد، اما پس از گذشتن از یک نقطه خاص، تیم در نهایت به داده های بخش پایین نگاه می کند و سرصفحه های بخش بالایی همچنان در بالا هستند. دوست دارم بدانم آیا راهی برای تغییر آن ردیف سرصفحه ثابت وجود دارد تا سرصفحه های بخش پایینی را زمانی که به سمت پایین حرکت می کند تا جایی که فقط داده های بخش پایین نشان داده می شوند نشان داده شود.
بله، راهی برای انجام این کار وجود دارد، اما شامل استفاده از ماکروها است. قبل از در نظر گرفتن یک راه حل مبتنی بر کلان، ممکن است بخواهید ساختار داده های خود را به گونه ای در نظر بگیرید که هر یک از بخش های شما در کاربرگ های مختلف باشد. (از دیدگاه طراحی، این ساده ترین راه حل خواهد بود.) اگر این امکان پذیر نیست، پس باید به ماکروها نگاه کنید.
یک روش آسان این است که به سادگی آنچه را که در ردیف بالایی (ردیف 1) کاربرگ ذخیره می شود، بسته به ردیف انتخاب شده تغییر دهید. به عنوان مثال، ماکرو زیر بر اساس محل قرارگیری سلول فعال، تغییراتی را در ردیف بالا ایجاد می کند. اگر قبل از ردیف 40 باشد، یک سری سرصفحه در ردیف اول قرار می گیرد. اگر بعد از ردیف 40، مجموعه دیگری از هدرها پر شده است.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim iBottomData As Integer
iBottomData = 40
If ActiveCell.Row < iBottomData Then
Cells(1, 1).Value = "Last Name"
Cells(1, 2).Value = "First Name"
Cells(1, 3).Value = "Address"
Cells(1, 4).Value = "Balance"
Else
Cells(1, 1).Value = "Account"
Cells(1, 2).Value = "Sales Rep"
Cells(1, 3).Value = "Status"
Cells(1, 4).Value = ""
End If
End Sub
برای استفاده از ماکرو، فقط مطمئن شوید که آن را در پنجره کد مربوط به کاربرگ حاوی دو بخش داده قرار دهید. همچنین باید مقدار تخصیص داده شده به متغیر iBottomData را تغییر دهید تا شماره ردیف جایی که بخش پایین داده شما شروع می شود را نشان دهد.
اگر می خواهید با حرکت به سمت پایین صفحه کار، ردیف ثابت را تغییر دهید، ماکرو باید کمی قوی تر باشد. در واقع، دو ماکرو وجود دارد که دنبال می شوند (هر دو دوباره در پنجره کد صفحه کار می روند)، و با تغییر سلول انتخاب شده و با کلیک راست روی کاربرگ، وارد عمل می شوند.
Private Sub Worksheet_BeforeRightClick(ByVal _
Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
ActiveWindow.FreezePanes = False
ActiveWindow.Split = False
Application.EnableEvents = False
Application.Goto Cells(1, 1), scroll:=True
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
Application.Goto Cells(Target.Row - 1, _
Target.Column), scroll:=True
Application.EnableEvents = True
On Error Resume Next MUST reenable events
Application.EnableEvents = False
ActiveCell.Offset(-1, 1 - Target.Column).Select
so the right click menu doesnt popup
only if this is the second header row.
Cancel = True
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Cells(Target.Row, 1).Value <> "title2" Then Exit Sub
ActiveWindow.FreezePanes = False
ActiveWindow.Split = False
Application.Goto Cells(Target.Row, 1), scroll:=True
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
On Error Resume Next MUST reenable events
Application.EnableEvents = False
ActiveCell.Offset(1, 1 - Target.Column).Select
Application.EnableEvents = True
End Sub
کنترل کننده رویداد Worksheet_SelectionChange زمانی که مکان نمای سلول فعال شما به آن خط برخورد می کند، به طور خودکار تقسیم ثابت را به زیر ردیف دوم سرفصل ها منتقل می کند. این خط در دستور If شناسایی می شود که بررسی می کند آیا اولین سلول در ردیف حاوی متن "title2" است یا خیر. (بدیهی است که این باید تغییر کند تا نشان دهد که واقعاً در آن سلول اول چه خواهد بود.)
کنترل کننده رویداد Worksheet_BeforeRightClick تقسیم بندی ثابت شده را به مجموعه اول سرفصل ها برمی گرداند اما سلول فعال را در ردیف بالای مجموعه دوم سرفصل ها ترک می کند.
باید بدانید که هر دو راه حل ماکرو ارائه شده در این نکته فرض می کنند که شما واقعاً در صفحه کار پیمایش می کنید و سلول انتخاب شده را در حین حرکت تغییر می دهید. (به عبارت دیگر، برای انجام پیمایش خود، کلید پیکان رو به پایین را فشار می دهید.) اگر به سادگی با استفاده از نوار اسکرول عمودی، آنچه را که در کاربرگ نمایش داده می شود تغییر می دهید، سرفصل های ثابت تغییر نمی کنند زیرا سلول انتخاب شده را تغییر نمی دهید. و کنترل کننده های رویداد هرگز فعال نمی شوند.
ایجاد یک راه حل گسترده تر خارج از محدوده این نکته است زیرا مستلزم ارتباط با سیستم عامل واقعی است. با این حال، اگر شما علاقه مند به رفتن به این مسیر هستید، یک مکان شروع خوب ممکن است این صفحه در وب سایت Chip Pearsons باشد:
http://www.cpearson.com/excel/DetectScroll.htm