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

قفل کردن شیت اکسل با کد VBA
برای استفاده از این کد، مراحل زیر را دنبال کنید:
- در اکسل، فایلی را باز کنید که شیتی را که میخواهید قفل کنید، شامل ماکروهای VBA دارد.
- از منوی “ماکرو” (Macro) در منوی “ابزارهای توسعه” (Developer Tools) یا با فشردن کلید Alt + F8، ماکروی “LockSheet” را اجرا کنید.
- اکنون شیت شما به صورت قفل شده در دسترس قرار میگیرد و تنها کاربرانی که دارای مجوز دسترسی به آن هستند، میتوانند آن را ویرایش کنند.
آموزش های پیشنهادی برای شما
قبل از هر کاری آموزش زیر را مشاهده فرمایید👇
نحوه ذخیره فایل اکسل حاوی ماکرو
نحوه ورود به محیط vba اکسل با 3 روش
آموزش قفل کردن شیت اکسل بدون کد نویسی vba
پیشنهاد آکادمی روح الله برای شما
|
1 2 3 4 |
Sub LockSheet() ' https://academyruhollah.com/ ActiveSheet.Protect Password:="password", UserInterfaceOnly:=True End Sub |

سلام
وقتتون بخیر
ممنون از محتوای خوبتون. یه سوال داشتم فایل من چندتا شیت داره که میخوام همه رو غیر از یکی قفل کنم بطوریکه اشخاصی که پسورد ندارن اصلا نتونن اون شیتها رو ببینن.
سلام و ممنون از لطفتون. 👋
درست میفرمایید: اگر میخواهید بعضی شیتها برای کاربرانی که رمز ندارند «اصلاً نمایش داده نشوند»، بهترین راه استفاده از حالت 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
سلام این برنامه در فتیلی که دارم و دارای چندین شیت می باشد اجرا کردم ولی فقط در یک شین جواب می دهد و در شیت دیگر اجرا نمی شود لزفا رااهنمایی بفرمائید تشکر الماسی
سلام ارادت خدمت شما دوست عزیز
شما این ماکروی که است را توی هر شیت اجرا کنید شیت فعال بصورت خودکار قفل میشه اگر منظر تون چیزی دیگه است کامل توضیح بدهید بند در خدمت تون هستم
راهنمایی می کنم
شاد پیروز باشید
سلام . بنده یک سوال داشتم . وقتی شیت رو قفل میکنیم. (protect sheet ) در جدول (Table) نمیشه ردیف و ستون حذف و اضافه کرد. آیا راهی هست؟
سلام ارادت خدمت شما دوست عزیز
در حالت پیشفرض، وقتی یک برگه را در اکسل قفل میکنید و از گزینه “Protect Sheet” استفاده میکنید، قابلیت حذف و اضافه کردن ردیفها و ستونها در جدولها غیرفعال میشود. این روش یک راه ساده برای جلوگیری از تغییر ساختار جدول در هنگام قفل شدن برگه است.
اما، اگر شما نیاز دارید تا روشی داشته باشید که ردیفها و ستونها را همچنان بتوانید در جدول قفل شده اضافه یا حذف کنید، باید از راهکار دیگری استفاده کنید.
یک روش برای این کار استفاده از فرمولهای داینامیک است. به این صورت که ردیفها و ستونها را به صورت دستی قفل نمیکنید، اما از فرمولها استفاده میکنید تا بررسی کنید که آیا یک ردیف یا ستون خاص باید قفل شود یا خیر. با استفاده از فرمولهای مناسب، میتوانید بر اساس شرایط خاصی که دارید، ردیفها و ستونها را قفل کنید یا آنها را باز کنید.
برای مثال، میتوانید از تابع IF در اکسل استفاده کنید تا در صورت برقراری یک شرط، ردیف یا ستون را قفل کنید. به صورت سادهتر، میتوانید از تابع VBA (Visual Basic for Applications) استفاده کنید تا یک ماکرو ایجاد کنید که در آن شرایط و قوانین خاصی برای قفل و باز کردن ردیفها و ستونها تعیین کنید.
لطفا توجه داشته باشید که استفاده از فرمولها و ماکروها به نیازها و محدودیتهای خاص شما بستگی دارد و ممکن است نیاز به مهارت
های برنامهنویسی و پیشرفتهتر در اکسل داشته باشد.
موفق باشید