مخفی کردن WorkBook و نمایش UserForm در اکسل

ما در پست نحوه طراحی UserForm یاد گرفتیم که چطور باید یک فرم در اکسل طراحی کنیم بعد از اون در پست روش های ران کردن و بستن UserForm با نحوه نمایش و عدم نمایش یوزرفرم (UserForm) آشنا شدیم.اکنون در این پست قصد داریم روش مخفی کردن WorkBook اکسل با اجرا شدن UserForm را یا بگیریم طوری که نرم افزار اکسل مخفی بشه و فقط خود یوزرفرم نمایش داده بشه.درواقع قصد داریم فایل اکسل را شبیه یک فایل اجرایی تحت فرم تبدیل کنیم تا دیگران به شیت های اون دسترسی نداشته باشند.

اگه یادتون باشه ما دو تا فرم به نام های my_form1 و my_form2 طراحی کردیم.حالا کاری که می خواهیم انجام بدیم این است که با باز شدن نرم افزار اکسل، my_form2 ران بشه و نرم افزار اکسل مخفی بشه تا امکان دسترسی به شیت های اکسل امکان پذیر نباشد.

مخفی کردن WorkBook با اجرای UserForm
شکل شماره 1 – یوزرفرم my_form2 برای ورود اطلاعات در اکسل

تعیین رویداد مخفی کردن WorkBook با اجرای اکسل

طبق دو آموزش قبلی، فرمی مانند شکل شماره 1 ایجاد کنید.سپس از قسمت Project واقع در سمت چپ روی ThisWorkbook کلیک راست نموده و گزینه View Code رو بزنید تا وارد محیط کدنویسی بشید.بالای محیط کدنویسی دو پنجره بصورت لیست کشویی وجود دارد که یکی در سمت چپ و یکی هم در سمت راست قرار دارد.پنجره سمت چپی را روی ThisWorkbook و سمت راستی را روی Open تنظیم کنید(مانند شکل شماره 2).

تنظیم رویداد فرم برای مخفی کردن WorkBook
شکل شماره 2 – تنظیم رویداد فرم ورود اطلاعات برای نمایش

اگر دقت کنید زمانی که شما رویداد رو تنظیم می کنید، دو خط کد پیشفرض برای شما تولید می شود که شما باید کدهای خودتون رو بین این دو کد پیشفرض بنویسید.حالا برای مخفی کردن اکسل کدهارو بصورت زیر تکمیل کنید:

حتما بخوانید:   فرم لاگین در اکسل چگونه طراحی می شود؟

توجه:

دقت داشته باشید تا این پست رو کامل نخوندید کدهارو اجرا نکنید و حتی فایلتون رو هم نبندید.چون هر زمان بخواهید این فایل اکسل رو باز کنید، نرم افزار اکسل مخفی خواهد شد.پس باید کد نمایش اکسل رو هم بنویسیم تا در زمان لازم بتوانیم به شیت ها دسترسی داشته باشیم.پس ادامه آموزش رو دنبال کنید.

توضیح کد مخفی کردن نرم افزار اکسل

در کد نوشته شده، Application اشاره به نرم افزار اکسل دارد و تابع Visible به نمایش یا عدم نمایش آن اشاره دارد که برای نمایش از مقدار True و برای عدم نمایش نرم افزار اکسل با False مقدار دهی می شود.خط دوم هم که مشخصه، یوزرفرم رو برای ما نمایش میده.درواقع زمانی که شما فایل اکسلی که این کدها داخلش هست رو باز می کنید، اول نرم افزار اکسل مخفی میشه و بعد یوزرفرم نمایش داده میشه.

نکته:

یادتون باشه هرکجا تابع Visible رو دیدید بدونید که اشاره به نمایش یا عدم نمایش اون آبجکت داره.شما از این کد حتی میتونید برای مخفی کردن یا نمایش Sheet , ListBox , ComboBox , CommandButton و سایر آبجکت ها نیز استفاده کنید.

نحوه نمایش WorkBook از طریق UserForm

خب ما تا اینجا کد مخفی کردن WorkBook اکسل رو نوشتیم.حالا یه سوال، اگه بخواهیم به شیت های اکسل دسترسی داشته باشیم چی…! خب خیلی راحت روی دکمه “نمایش شیت” که در فرممون قرار دادیم دبل کلیک کنید و کد زیر را بنویسید (رویداد Click) :

حتما بخوانید:   لیست کردن نام شیت ها در ComboBox با کد ساده VBA

به همین راحتی تونستین با چند خط کد ساده کارتون رو حرفه ای تر کنید.


اشتراک گذاری:
مطالب زیر را حتما بخوانید

17 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • سلام و خسته نباشید

    کدی هست که بتوانم با استفاده از آن یوزرفرم اکسل در زمان باز شدن اکسل اجرا بشود و ورک بود خود همون فایل را مخفی کند؟ این کد Application.Visible = False اگر چند از فایل های اکسل دیگر هم باز باشد آن ها را هم مخفی میکند و امکان دسترسی به آن نیست

    • سلام. وقت بخیر…

      برای مخفی کردن یک فایل اکسل از بین چندین فایل از کد زیر استفاده کنید:

      Application.ActiveWindow.Visible = False

      یا میتونید به خود نام فایل یا شماره پنجره اون اشاره کنید:

      Application.Windows(2).Visible = False

    • سلام.

      منظورتان را دقیق مطرح نکردید.

      اگر میخواهید دستور پیشنمایش پرینت رو بدونید برای مثال از کد زیر استفاده کنید:

      sheet1.PrintPreview

      اگر میخواهید خود یوزرفرم رو چاپ کنید از کد زیر استفاده کنید:

      Me.PrintForm

  • سلام

    می خواهم پیش نمایش پرینت اطلاعات داخل sheet2 را داخل خود userform نمایش بدهد (داخل frame یا label و ….)

    • خب شما باید یک ListBox داخل فرمتون ایجاد کنید و با کدنویسی اطلاعات جدول شیت رو فراخوانی کنید.از نامگذاری محدوده مثل Name Manager هم میتونید استفاده کنید.

  • سلام چطور میشه دو یوزرفرم همزمان اجرا بشن ؟ یه یوزر فرم دارم که درصد پیشرفت شبیه کپی کردن ویندوز را شبیه سازی میکنه و یوزر فرم اصلی ام دیتابیس رو بروز رسانی میکنه . و اینکار چون زمانبر هست برای اینکه حوصله کاربر سر نره و همچنین متوجه بشه که سیستم در حل انجام عملیاتی هست ، اومدم و یک یوزر فرم پیشرفت اجرا کد رو طرراحی کردم اما موندم ایندو یوزرفرم چطور همزمان اجرا بشن ؟

    • سلام

      کافیه کدهای نمایش یوزرفرم رو همزمان بنویسید.

      مثلا:

      UserForm1.Show
      UserForm2.Show

  • آخه یوزور فرم اصلی از چندین قسمت تکشیل شده و چند باتون اون بروز رسانی هست . یعنی بروزرسانی با کلیلک بر روی باتون مورد نظر انجام میشه . اگر اون کار رو بکنم یوزرفرم دومم اجرا میشه و کاربر شاید اصلا بروزرسانی نکته یا با تاخیر انجام بده . قصد من اینه که با کلیک بر روی بانون بروزرسانی ، یوزرفرم اصلی شروه به اجرای کدهای خودش بکنه و همزمان یوزرفرم توم پیشرفت اجرای کد رو نمایش بده

    • شما یک ماژول برای بروزرسانی UserForm1 ، یک ماژول برای بروزرسانی UserForm2 ،یک ماژول برای بروزرسانی UserForm3 و … ایجاد کنید و کدهای بروزرسانی مربوط به هر فرم رو داخلش بنویسید.

      بعد فقط یدونه باتن قرار بدین و با کد زیر تمام ماژول هارو فراخوانی کنید تا همزمان اجرا بشه:

      “Application.Run “Module1
      “Application.Run “Module2
      “Application.Run “Module3
      و…

      فقط دقت داشته باشید زمانی که می خواهید اطلاعات یک زورفرم رو بروزرسانی کنید حتما به نام یوزرفرم اشاره کنید.مثلا : UserForm1.ListBox1

  • “Application.Run “Module1
    “Application.Run “Module2
    “Application.Run “Module3
    UserForm1.ListBox1
    اینها رو کجا باید بنویسم ؟
    داخل کد بروز رسانی ام ؟ متوجه نمیشم

  • سلام مجدد
    من اون یوزرفرمی که نمایش پیشرفت رو نشون میده به داخل ماکروی بروزرسانی آوردم . کار کرد اما با یک اشکال بزرک ….
    و مشکل این بود که اول کد یوزرفرم نمایش پیشرفت اجرا شد و نوشت Complate 100% بعدش کدهای بروز رسانی اجرا شد. یعنی هیچ به هیچ …

  • بله بدون مشکل اجرا میشن اما چه فایده ؟ من میخوام دو تا یوزرفرم همزمان و بطور موازی اجرا بشن . یا یک یوزرفرم با یک ماژول بطور همزمان و موازی اجرا بشند . توی سایت های خارجی هم از صبح میگردم ولی چیزی پیدا نکردم

    • اجرای چند سطحی کدها یا همان Multi-threading در VBA پشتیبانی نمی شود.مگر با ترفندهایی که مطمئنم دردسر انجامش، شمارو از انجام این کار منصرف میکنه

پاسخی بگذارید