است
دنیز در حال توسعه یک ماکرو است و باید آزمایش کند تا ببیند آیا نقطه درج در یک نشانک قرار دارد یا خیر. او باید این را بداند زیرا اگر نقطه درج در یک نشانک باشد، باید کد را اصلاح کند. اگر در یک نشانک نیست، کد او باید یکی را ایجاد کند.
در تئوری، این فرآیند بسیار ساده است. تنها کاری که باید انجام دهید این است که بررسی کنید ببینید چند نشانک در انتخاب وجود دارد، به این ترتیب:
If Selection.Bookmarks.Count > 0 ThenInside a bookmark End If
این کار چه انتخاب یک محدوده از متن باشد و چه انتخاب فقط در نقطه درج جمع شود. با این حال، چند "گوچا" بالقوه وجود دارد که باید از آنها آگاه بود. اولین مورد این است که اگر نقطه درج بلافاصله در سمت چپ یک نشانک باشد (فقط با لمس شروع نشانک)، خاصیت Count همچنان بزرگتر از 0 خواهد بود. این به این دلیل است که انتخابی که با نقطه درج جمع شده تعریف می شود، در نظر گرفته می شود که شامل کاراکتر درست در سمت راست نقطه درج می شود.
دومین چیزی که باید از آن آگاه باشید این است که اگر انتخاب شما جمع شود، نمی توانید به 0 یا 1 بودن خاصیت شمارش تکیه کنید. در واقع، ممکن است بیش از 1 باشد زیرا ممکن است نشانک ها "همپوشانی" داشته باشند و بنابراین، برای اینکه نقطه درج به طور همزمان در بیش از یک نشانک باشد. بنابراین، ممکن است برای آزمایش اینکه نقطه درج در کدام نشانک ها قرار دارد، به کد خود نیاز داشته باشید. ساده ترین راه برای انجام این کار این است که ویژگی Name بوکمارک ها را به این ترتیب بررسی کنید:
Dim bFoundIt As Boolean Dim J As Integer bFoundIt = False Selection.Collapse If Selection.Bookmarks.Count > 0 ThenInside a bookmark For J = 1 To Selection.Bookmarks.Count If Selection.Bookmarks(J).Name = "DesiredName" Then bFoundIt = True End If Next J End If
هنگامی که این کد اجرا می شود، bFoundIt فقط در صورتی True خواهد بود که نقطه درج در داخل نشانک مورد نظر باشد. همچنین به گنجاندن دستوری برای جمع کردن انتخاب توجه کنید تا مطمئن شوید که واقعاً در یک نقطه درج است و نه محدوده ای از متن انتخاب شده.
سومین "گوچا" بالقوه این است که Word در واقع از بوکمارک ها در داخل برای اهداف بسیاری استفاده می کند. به عنوان مثال، از آنها برای تعریف محدوده چاپ استفاده می کند، اما این تنها مکان نیست. با این حال، نشانک های تعریف شده توسط سیستم را می توان شناسایی کرد، زیرا آنها همیشه با یک خط زیر شروع می شوند. در حالی که این مشکلی در کد بالا نیست (از آنجایی که شما به طور خاص به دنبال یک نشانک با نام خاصی هستید)، اگر کد شما به دنبال هر نشانکی باشد، یک مشکل بالقوه خواهد بود. کد زیر که به عنوان یک تابع قابل فراخوانی نوشته شده است، ممکن است در چنین شرایطی مفید باشد.
Function InBookmark() As BooleanReturns True if the insertion point is insideany non-system bookmark. Also collapses theselection to an insertion point Dim bFoundIt As Boolean Dim J As Integer bFoundIt = False Selection.Collapse For J = 1 To Selection.Bookmarks.Count If Left(Selection.Bookmarks(J).Name) <> "_" Then bFoundIt = True End If Next J InBookmark = bFoundIt End Function
برای استفاده از این تابع از داخل ماکرو خود، می توانید از چیزی به این سادگی استفاده کنید:
If Not InBookmark Thencreate new bookmark End If