استیون یک کاربرگ با سطرها و ستون های زیادی از داده ها دارد. او با فعال کردن سلول B2 و سپس فریز کردن پنجرهها، سطر و ستون اول را ثابت کرده است. این آنطور که او می خواهد کار می کند. او حتی میتواند کتاب کار را ذخیره کرده و ببندد، و وقتی کتاب کار را دوباره باز میکند، پنجرهها هنوز یخ زده هستند. با این حال، اگر استیون یک پنجره جدید برای کتاب کار باز کند (مشاهده | پنجره | پنجره جدید)، پنجره جدید پنجره های ثابتی ندارد. از آنجایی که او در بسیاری از برگههای این کتاب، صفحات یخ زده دارد، باید بسیار مراقب باشد که کدام پنجره را ابتدا میبندد. اگر ابتدا پنجره اصلی را ببندد، وقتی کتاب کار را ذخیره می کند، همه کاربرگ های فریز نشده را ذخیره می کند. استیون به این فکر می کند که آیا راهی وجود دارد که بتوان پنجره جدید را برای حفظ تنظیمات پنجره های ثابت نگه داشت؟
هیچ تنظیمی در اکسل وجود ندارد که بتواند آنچه استیون باید اتفاق بیفتد را مدیریت کند. دلیل ذخیره نشدن پنجره های ثابت این است که FreezePanes (به همراه Zoom، Split و چند تنظیمات دیگر) ویژگی های ویندوز هستند، نه کاربرگ ها یا کتاب های کاری. هنگامی که یک پنجره جدید ایجاد می شود، ویژگی ها از پنجره اصلی به ارث نمی رسند.
با این حال، می توانید با استفاده از یک ماکرو برای انجام تنظیمات، این رفتار را دور بزنید (و مشکل استیونز را حل کنید). یک رویکرد بسیار کوتاه این است که از ابزار نوار برای ایجاد پنجره جدید خودداری کنید. در عوض، این ماکرو را به QAT اضافه کنید و از آن برای ایجاد پنجره استفاده کنید:
Sub CreateNewWindow1()
Dim rPane As Range
Set rPane = ActiveWindow.VisibleRange(1)
ActiveWindow.NewWindow
ActiveSheet.Range("B2").Select
ActiveWindow.FreezePanes = True
End Sub
ماکرو یک پنجره جدید ایجاد می کند، سلول های قابل مشاهده را برابر با آنچه در پنجره اصلی نشان داده شده است تنظیم می کند، سلول B2 را در پنجره جدید انتخاب می کند و سپس پنجره ها را ثابت می کند.
با این حال، اگر نیازهای "انجماد پنجره" شما متنوع تر باشد، این روش ساده ممکن است کارساز نباشد. به عنوان مثال، ممکن است بخواهید راهی برای ایجاد یک پنجره جدید و مطابقت آن با هر پنجره ای که در هنگام ایجاد پنجره جدید فعال بود، داشته باشید.
ماکرو زیر بررسی می کند که آیا پنجره فعلی دارای یک صفحه فوزن است یا خیر. اگر این کار را انجام داد، متوجه می شود که کجا ثابت شده است و از آن برای تنظیم پنجره های ثابت در یک پنجره جدید استفاده می کند. اگر هیچ صفحه ثابتی وجود نداشته باشد، به هر حال یک پنجره جدید ایجاد می شود و هیچ چیز در آنجا ثابت نیست. در هر صورت، همان سلولی که در صفحه اصلی انتخاب شده بود، در پنجره جدید انتخاب می شود.
Sub CreateNewWindow2()
Dim iRow As Integer
Dim iCol As Integer
Dim rOldPos As Range
iRow = 0
iCol = 0
If ActiveWindow.FreezePanes Then
iRow = ActiveWindow.ScrollRow
iCol = ActiveWindow.ScrollColumn
End If
Set rOldPos = ActiveCell
ActiveWindow.NewWindow
If (iRow > 0) And (iCol > 0) Then
Cells(iRow, iCol).Select
ActiveWindow.FreezePanes = True
End If
rOldPos.Select
End Sub
این کد، دوباره، می تواند برای ایجاد هر پنجره جدیدی که می خواهید استفاده شود. آنها کاری را که استیون باید انجام میداد انجام میدهند زیرا تنظیمات صفحه ثابت را از پنجره فعال به پنجره جدید ایجاد شده کپی میکنند.