کنترل محتوا با Content Control در Word

3697 روز پیش

کنترل محتوا با Content Control در آفیس 2007 به مایکروسافت ورد اضافه شد و از وقتی که با اون ها آشنا شدم، علاقه خاصی به استفاده ازش پیدا کردم! شاید به خاطر تمیزی و زیبایی اون ها نسبت به سایز ابزارهای مشابه در ورد؛ بگذریم…
چیزی که می خوام تو این مطلب دربارش حرف بزنم توضیح یه کاربرد زیبا در Content Control هست که می تونه استفاده های زیاد داشته باشه که شما می تونید مورد استفاده از اون رو انتخاب کنید! برای بیشتر دونستن درباره Content Control با من همراه بشید…

سعی می کنم با یه مثال کوچیک براتون توضیح بدم، هدف ما اینه که یه نوع شماره انداز طراحی کنیم، حالا مورد استفادش می تونه در جاهای مختلفی باشه.

قبل از شروع کار چند نکته رو باید توضیح بدم. اول و مهم تر از همه نحوه ی استفاده از Content Control هست. برای این کار شما باید از ابزارهای توسعه دهندگان آفیس استفاده کنید. اگه نمایش اون ها رو بلد نیستید سری به مطلب قبلی بزنید.

برای رسیدن به هدفمون من در ابتدا یه سری توضیح میدم. ابتدا از تب توسعه دهندگان بر روی ویژوال بیسیک کلیک می کنیم تا پنجره ویژوال بیسیک باز بشه. در اینجااز سمت چپ روی (Project(Your-File-Name کلیک کرده سپس از پوشه ی Microsot Word Objects روی ThisDocument کلیک کنید تا چیزی شبیه شکل زیر جلو روی شما قرار بگیره.
VBA
حالا باید یکم کد نویسی انجام بدیم ولی قبلش یه توضیح کلی در باره کد ذکر شده در پایین: این کد وظیفش به روز رسانی تمام کانتنت کنترل هاست. به این صورت که در هر بار اجرای این زیرتابع، اولین کانتنت موجود در متن مقدار صفر رو نمایش داده و سپس از طریق حلقه ای برای کنترل های دوم تا آخر، هر بار مقدار کنترل شماره قبلی را گرفته و یکی اضافه می کنیم.
نکته: نحوه ی شماره گذاری کنترل ها در ورد به صورت بالا به پایین هست، یعنی از بالای پرونده یا فایل تا انتهای آن به ترتیب شماره گذاری می شوند و در هر بار افزودن یا حذف یک کنترل شماره ها به روزرسانی می شوند. حالا نگاهی به این کد داشته باشید.

Private Sub UpdateList()
    On Error Resume Next
    ContentControls(1).Range.Text = "(0)"
    ContentControls(1).Tag = 0
    Dim i As Integer
    
    For i = 2 To ContentControls.Count
        ContentControls(i).Range.Text = "(" & (Val(ContentControls(i - 1).Tag) + 1) & ")"
        ContentControls(i).Tag = ContentControls(i - 1).Tag + 1
    Next
End Sub

اگه آشنایی نسبی ای با برنامه نویسی داشته باشید، به نظرم کد بالا رو با توجه به خوانایی بالای زبان ویژوال بیسیک به راحتی درک می کنید. ولی یه توضیح که شاید لازم باشه استفاده از ویژگی تک هست که شماره رو توی اون نگهداری می کنیم و همچنین از طریق ویژگی Range.Text می تونیم به متن داخل کانتنت کنترل دسترسی پیدا کنیم. دلیل استفاده از تگ هم این بود که ما می خوایم شماره هامون رو داخل پرانتز بذاریم و به همین دلیل نمیشه برای دوباره خوندنشون به مشکل برمیخوریم.

برای اتوماتیک شدن شماره گذاری هم از کد زیر استفاده می کنیم. در این کد هم ما هر بار که یه کنترلی اضافه میشه میام و تابع بالا رو فراخونی می کنیم تا حالت اتوماتیک پیدا کنه.

Private Sub Document_ContentControlAfterAdd(ByVal NewContentControl As ContentControl, ByVal InUndoRedo As Boolean)
    UpdateList
End Sub

قابل ذکره که این مثال شاید در نگاه اول آن چنان کاربردی نباشه ولی کسانی که دنبال این چیزا هستن با همین راهنمایی ها راهشون رو پیدا می کنن. در انتها پس از آرزوی موفقیت شما رو به دیدن عکسی از محیط ویژوال بیسیک نهایی دعوت می کنم.
شماره گذاری اتوماتیک