PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : گرفتن امکان دسترسي به محيط اکسل از کاربر



Ali Parsaei
2015/03/12, 20:12
گاهي اوقات شما فايلهايي را تهيه مي کنيد که کاربران بايد در آن اطلاعاتي وارد کرده و پس از پردازش اطلاعات در فايل ياد شده، نتيجه نهايي به کاربر برگردانده شود.
با توجه به اينکه دستکاري ناخواسته يا کنجکاوي در ساختار فايل يا ناواردي يا اشتباهات کاربران اغلب باعث آسيب ديدگي يا پاک شدن بانکهاي اطلاعاتي و فرمولهاي محاسباتي مي گردد لذا در اين مواقع که کاربر جز ورود اطلاعات خام کار ديگري با اکسل ندارد بهتر است امکان دسترسي به محيط عادي اکسل (يعني شيت ها و سل ها و منوها و ...) از کاربر گرفته شود.
در زير قصد دارم يکي از راهکارهاي موجود را توضيح دهم:

روال کار به اين نحو است:
1- يک فرم تشکيل مي دهيم.
2- کدي تعريف مي کنيم که در موقع اجراي فايل فرم ياد شده نيز فعال گردد.
3- تنظيمات فرم را "تمام صفحه" مي کنيم.
4- ضربدر قرمز بالاي فرم را غير فعال مي کنيم تا کاربر نتواند فرم را ببندد.
5-روي فرم ياد شده يک دگمه قرار مي دهيم که بستن فايل فقط توسط آن دگمه انجام شود.
ظاهرا" با انجام مراحل فوق به خواستمان رسيده ايم ..... اما يک مشکل وجود دارد .......
6- بايد خود برنامه اکسل هم "تمام صفحه" باشد.
يعني در هنگام اجراي اکسل در ايونت WORKBOOK بايد Application.DisplayFullScreen را مساوي TRUE قرار دهيم.
وگرنه اگر کاربر برنامه اکسل خود را طوري کوچک کرده باشد که فقط مقداري از مانيتور را شامل شده باشد، شما هم فقط به همان مقدار از فرم مذکور را خواهيد ديد!
7-يادتان باشد حتما" در دگمه اي که براي بستن فايل روي فرم ايجاد مي کنيد دوباره Application.DisplayFullScreen را به حالت FALSE برگردانيد.

و اما کدها:
مرحله 2و6- فعال سازي فرم در هنگام اجراي اوليه فايل (با فرض اينکه نام فرم USERFORM1 باشد) همچنين تمام صفحه کردن برنامه اکسل:



Private Sub WORKBOOK_OPEN
Application.DisplayFullScreen = True
UserForm1.Show
End Sub

مرحله 3-تمام صفحه کردن تنظيمات خود فرم:


Private Sub UserForm_Activate
With Application
Me.Top = .Top
Me.Left = .Left
Me.Height = .Height
Me.Width = .Width
End With
End Sub

مرحله 4-غير فعال کردن ضربدر قرمز بالاي فرم:



Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer
If CloseMode = vbFormControlMenu Then Cancel = 1
End Sub

مرحله 5و7-اين کد را براي دگمه اي که براي بستن فايل روي فرم قرار داده ام نوشته ام (با فرض اينکه نام دگمه CommandButton1 باشد):
(توجه کنيد که من کد را به صورتي نوشته ام که حتما" تغييرات فايل قبل از بستن SAVE شود، ولي شما مي توانيد اون خط کد مربوط به SAVE را حذف کنيد تا قبل از بستن از کاربر سوال شود)



Private Sub CommandButton1_Click()
Dim C As Integer
C = MsgBox("آيا از برنامه خارج مي شوبد؟", vbOKCancel, "خروج")
If C = vbOK Then
Application.DisplayFullScreen = False
Application.ActiveWorkbook.Save
Application.ActiveWorkbook.Close
Else
Exit Sub
End If
End Sub


اگر براي ورود به قسمت VBA فايل هم رمز بگذاريد ديگر خيالتان راحت خواهد بود که کسي از سر کنجکاوي و اشتباهات ساده فايل را به هم نخواهد ريخت.
بديهي است اينکه روي فرم اصلي چه چيزهاي ديگري قرار دهيد تا بتوانيد توسط آنها اطلاعات را به فايل انتقال و نتايج را از آن استخراج کنيد ديگر بستگي به ساختار فايل و خلاقيت خودتان داشته و از موضوع اين آموزش خارج است.
ضمنا" اگر خواستيد خودتان فايل را ويرايش کنيد بهترين راه اين است که اول يک فايل خام اکسل باز کنيد ALT+F11 را زده و سپس پنجره باز شده VBA را کوچک کرده و از قسمت FILE->OPEN در همين فايل خام، فايل اصلي را باز کرده و سپس دوباره پنجره VBA را بزرگ کرده و اقدام به ويرايش کنيد وگرنه بايد ماکرو ها را غير فعال کرده و .....
اين هم يک فايل نمونه: (اول فايل را روي کامپيوتر خود SAVE کنيد بعد باز کنيد تا درست عمل کند- رمز VBA اش 123 است)

پیام
2016/01/20, 23:16
این فرم یک اشکالی که داره اینه که میتونی قسمت بالای فرم رو بگیری و پایین بیاری.که صفحه پشت فرم پیداست.

Ali Parsaei
2016/01/21, 20:43
از نکته سنجي شما متشکرم،
البته موضوع آموزش فوق در ارتباط با گرفتن امکان دسترسي کاربر به محيط اکسل بود و ديدن يا نديدن خود محيط مد نظر نبوده، ولي با اين وجود مي توانيد يک کم اعداد مربوط به مکان و اندازه يوزرفرم را تغيير دهيد تا تيتر بالاي آن در دسترس قرار نگيرد، مثلا" بدين صورت:


Private Sub UserForm_Activate()
With Application
Me.Top = .Top - 50
Me.Left = .Left
Me.Height = .Height + 50
Me.Width = .Width
End With
End Sub

فايل پيوست را هم ببينيد (اول فايل را روي کامپيوتر خود save کنيد، بعد باز کنيد تا درست عمل کند)
ضمنا" توجه داشته باشيد که اصولا" اکسل از لحاظ کلي از نظر امنيت در سطح بالايي نيست و اين کارها فقط جهت جلوگيري از فضولي! يا کنجکاوي يا اشتباهات عادي کاربران است و نه جلوگيري از دسترسي هکرها! به اطلاعات
يا مثلا" با غير فعال کردن ماکروها ديگر کل نکات فوق بي اعتبار خواهد شد!، ليکن به کارگيري مجموعه اي از نکات از قبيل موارد ياد شده مي تواند تا حد زيادي از خرابي و از دست رفتن اطلاعات جلوگيري نمايد.

mobinsaffarpour
2016/01/22, 11:43
سلام دوستان این هم یک نمونه دیگه

Ali Parsaei
2016/01/22, 18:55
با تشکر از جناب صفرپور بابت فايل ارسالي،
اتفاقا" فايل ايشان خيلي نمونه خوبي است تا اين تاپيک تکميل تر گردد،
روشي که در فايل مربوطه اعمال شده نيز يکي از راههاي ممکن است فقط بايد توجه داشت که اين روش کل application اکسل را مخفي مي کند، يعني کل فايلهاي باز اکسل مخفي مي شوند.