فروشگاه
انبارداری پیشرفته تحت اکسل

قفل کردن شیت اکسل با کد VBA

قفل کردن شیت اکسل با کد VBA برای قفل کردن شیت با استفاده از VBA در اکسل، می‌توانید کد زیر را استفاده کنید:

در این کد، تابع “LockSheet” اجرا می‌شود و شیت فعلی قفل می‌شود. پسورد “password” به عنوان گذرواژه برای باز کردن شیت استفاده می‌شود. با اضافه کردن آرگومان “UserInterfaceOnly:=True”، فقط رابط کاربری اجازه دسترسی به شیت را دارد ولی کد VBA هیچ تغییری در شیت اعمال نمی‌کند. این آرگومان برای اجرای کد VBA در زمان اجرای برنامه اکسل مفید است.

قفل کردن شیت اکسل با کد VBA

قفل کردن شیت اکسل با کد VBA

قفل کردن شیت اکسل با کد VBA

برای استفاده از این کد، مراحل زیر را دنبال کنید:

  1. در اکسل، فایلی را باز کنید که شیتی را که می‌خواهید قفل کنید، شامل ماکروهای VBA دارد.
  2. از منوی “ماکرو” (Macro) در منوی “ابزارهای توسعه” (Developer Tools) یا با فشردن کلید Alt + F8، ماکروی “LockSheet” را اجرا کنید.
  3. اکنون شیت شما به صورت قفل شده در دسترس قرار می‌گیرد و تنها کاربرانی که دارای مجوز دسترسی به آن هستند، می‌توانند آن را ویرایش کنند.

آموزش های پیشنهادی برای شما

قبل از هر کاری آموزش زیر را مشاهده فرمایید👇

نحوه ذخیره فایل اکسل حاوی ماکرو

آموزش فعال کردن ماکرو اکسل

نحوه ورود به محیط vba اکسل با 3 روش

پیش نهاد آکادمی روح الله برای شما :
جابجایی ستون در اکسل فقط با یک کلیک

آموزش قفل کردن شیت اکسل بدون کد نویسی vba

پیشنهاد آکادمی روح الله برای شما 

بانک کد VBA در اکسل

آموزش رایگان اکسل

در اکسل حرفه ای شوید روح الله

دوره های جامع اکسل

فایل های آماده اکسل

 

 

میانگین رتبه 4.3/5 تعداد رای : 6
اکسل را حرفه ای یاد بگیر
نظر شما در مورد این مقاله چیست؟

نظر یا سوال شما در این مورد چیست؟

سلام دوست عزیز خوشحال میشوم نظر شما را در مورد این مقاله بدانم 👇

    عبدالرحمن

    سلام
    وقتتون بخیر
    ممنون از محتوای خوبتون. یه سوال داشتم فایل من چندتا شیت داره که میخوام همه رو غیر از یکی قفل کنم بطوریکه اشخاصی که پسورد ندارن اصلا نتونن اون شیتها رو ببینن.

    پاسخ

      سلام و ممنون از لطفتون. 👋
      درست می‌فرمایید: اگر می‌خواهید بعضی شیت‌ها برای کاربرانی که رمز ندارند «اصلاً نمایش داده نشوند»، بهترین راه استفاده از حالت VeryHidden برای آن شیت‌ها و سپس قفل کردن ساختار کارپوشه (Workbook Structure) با رمز است. حالت VeryHidden با روش معمولی اکسل (Format → Unhide) قابل مشاهده نیست — فقط از داخل ویرایشگر VBA یا با کد می‌توان آن را برگرداند، پس حتماً VBAProject را هم با رمز محافظت کنید تا ایمنی بیشتر شود. با این توضیحات، کد نمونه کامل و آماده را اینجا گذاشتم.

      توضیح امنیتی کوتاه: این روش برای جلوگیری از دسترسی عادی کاربران خوب است، ولی اصولاً هیچ روش VBA/Excel صددرصد در برابر یک کاربر با دانش فنی یا ابزار کرکِ پسورد مقاوم نیست. اگر به امنیت خیلی بالا نیاز دارید باید از روش‌های توزیع رمز / سرویس سرور کمک بگیرید.
      ۱) ماکروی قفل کننده — قفل همه شیت‌ها به جز یک شیت مشخص

      قرار دهید این ماکرو در یک ماژول استاندارد و اجرا کنید (یا نام شیت و رمز را در Workbook_Open صدا بزنید)

      Sub LockAllExcept(sheetToKeep As String, pwd As String)
      Dim ws As Worksheet
      Application.ScreenUpdating = False
      ' مخفی کردن و محافظت شیت‌ها
      For Each ws In ThisWorkbook.Worksheets
      If ws.Name <> sheetToKeep Then
      On Error Resume Next
      ws.Visible = xlSheetVeryHidden ' خیلی پنهان
      ws.Protect Password:=pwd, UserInterfaceOnly:=True
      On Error GoTo 0
      Else
      ws.Visible = xlSheetVisible
      ws.Protect Password:=pwd, UserInterfaceOnly:=True
      End If
      Next ws
      ' حفاظت ساختار کارپوشه (جلوگیری از Unhide/Move/Delete sheets)
      ThisWorkbook.Protect Password:=pwd, Structure:=True
      Application.ScreenUpdating = True
      End Sub


      مثال اجرا


      Sub ApplyLock()
      ' نام شیتی که می‌خواهید در دسترس بماند و رمز را اینجا قرار دهید:
      LockAllExcept "Dashboard", "mypassword123"
      End Sub


      ۲) باز کردن (Unhide) همه شیت‌ها با وارد کردن رمز

      یک ماکروی بازکن که از کاربر رمز می‌پرسد و در صورت صحیح بودن همه را نمایان می‌کند:

      Sub UnhideAllWithPassword()
      Dim p As String, ws As Worksheet
      p = InputBox("لطفاً رمز را وارد کنید:", "باز کردن شیت‌ها")
      If p = "" Then Exit Sub
      If p = "mypassword123" Then
      ThisWorkbook.Unprotect Password:=p
      For Each ws In ThisWorkbook.Worksheets
      ws.Visible = xlSheetVisible
      ws.Unprotect Password:=p
      Next ws
      MsgBox "تمام شیت‌ها نمایان شدند.", vbInformation
      Else
      MsgBox "رمز اشتباه است.", vbExclamation
      End If
      End Sub

      (در کد بالا “mypassword123” را با رمز دلخواه خود جایگزین کنید یا از متغیر استفاده کنید.)

      ۳) اجرای خودکار هنگام باز شدن فایل

      برای اینکه قفل‌ها هنگام باز کردن فایل خودکار اعمال شوند، کد زیر را در ماژول ThisWorkbook قرار دهید:

      Private Sub Workbook_Open()
      ' نام شیت قابل دسترس و رمز را تنظیم کنید:
      LockAllExcept "Dashboard", "mypassword123"
      End Sub

      ۴) محافظت اضافی (توصیه‌شده)

      قفل کردن پروژه VBA: در ویرایشگر VBA بروید Tools → VBAProject Properties → Protection، تیک Lock project for viewing را بزنید و یک پسورد مناسب انتخاب کنید — این کار از دیدن کد در VBA جلوگیری می‌کند.

      از پسورد قوی استفاده کنید و آن را در جای امن نگهدارید.

      اگر نیاز به امنیت بسیار بالاست، از راهکارهای سروری/رمزنگاری یا فایل‌های رمزگذاری‌شده استفاده کنید — محافظت اکسل محدود است.

      پاسخ
    الماسی

    sg

    سلام این برنامه در فتیلی که دارم و دارای چندین شیت می باشد اجرا کردم ولی فقط در یک شین جواب می دهد و در شیت دیگر اجرا نمی شود لزفا رااهنمایی بفرمائید تشکر الماسی

    پاسخ

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

      پاسخ
    mi4i161803

    سلام . بنده یک سوال داشتم . وقتی شیت رو قفل میکنیم. (protect sheet ) در جدول (Table) نمیشه ردیف و ستون حذف و اضافه کرد. آیا راهی هست؟

    پاسخ

      سلام ارادت خدمت شما دوست عزیز
      در حالت پیشفرض، وقتی یک برگه را در اکسل قفل می‌کنید و از گزینه “Protect Sheet” استفاده می‌کنید، قابلیت حذف و اضافه کردن ردیف‌ها و ستون‌ها در جدول‌ها غیرفعال می‌شود. این روش یک راه ساده برای جلوگیری از تغییر ساختار جدول در هنگام قفل شدن برگه است.

      اما، اگر شما نیاز دارید تا روشی داشته باشید که ردیف‌ها و ستون‌ها را همچنان بتوانید در جدول قفل شده اضافه یا حذف کنید، باید از راهکار دیگری استفاده کنید.

      یک روش برای این کار استفاده از فرمول‌های داینامیک است. به این صورت که ردیف‌ها و ستون‌ها را به صورت دستی قفل نمی‌کنید، اما از فرمول‌ها استفاده می‌کنید تا بررسی کنید که آیا یک ردیف یا ستون خاص باید قفل شود یا خیر. با استفاده از فرمول‌های مناسب، می‌توانید بر اساس شرایط خاصی که دارید، ردیف‌ها و ستون‌ها را قفل کنید یا آن‌ها را باز کنید.

      برای مثال، می‌توانید از تابع IF در اکسل استفاده کنید تا در صورت برقراری یک شرط، ردیف یا ستون را قفل کنید. به صورت ساده‌تر، می‌توانید از تابع VBA (Visual Basic for Applications) استفاده کنید تا یک ماکرو ایجاد کنید که در آن شرایط و قوانین خاصی برای قفل و باز کردن ردیف‌ها و ستون‌ها تعیین کنید.

      لطفا توجه داشته باشید که استفاده از فرمول‌ها و ماکروها به نیازها و محدودیت‌های خاص شما بستگی دارد و ممکن است نیاز به مهارت

      ‌های برنامه‌نویسی و پیشرفته‌تر در اکسل داشته باشد.
      موفق باشید

      پاسخ