اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الردود الموصى بها

قام بنشر

السلام عليكم ...

كثرت في الآونة الأخيرة التساؤلات عن كيفية إخفاء أشرطة القوائم و المعلومات و الأدوات وحتى تبويبات ورقة العمل من مصنف الاكسل ، وكان لابد من حسم النقاش بموضوع متكامل يسد هذه الثغرة العويصة ، وسوف أعرض لكم في هذا الموضوع آخر ما توصلت إليه :

يمكننا تقسيم التغيرات (الإظهار/الإخفاء) التي يمكننا تطبيقها على مكونات مصنف الاكسل إلى ما يلي :

1.تغيرات لا تؤثر سوى على المصنف المطبق عليها :

مثل إخفاء/إظهار ما يلي :

أشرطة التمرير العامودية و السفلية ، خطوط الشبكة ، علامات تبويب الأوراق ، رؤوس الصفوف و الأعمدة .

ومشكلة هذه المجموعة بسيطة ، وذلك لأن أي تغيير نجريه عليها لا يتأثر به سوى المصنف المعدل ، وعملية إظهار/إخفاء عناصر هذه المجموعة تتم كما يلي :

انقر على الخيار Options الموجود ضمن القائمة Tools لتظهر لك نافذة ، وفي علامة التبويب View وتحت Window options توجد عدة خيارات حدد/ألغي تحديد ما تشاء منها و اضغط على OK .

2. تغيرات تؤثر على المستخدم الحالي :

مثل إخفاء/إظهار ما يلي :

أشرطة الأدوات ، شريط المعلومات ، شريط القوائم ، شريط الصيغة .

و المشكلة تكمن في تعديل خصائص أحد العناصر الموجودة في هذه المجموعة ، وذلك لأن أي تغيير نجريه على عناصر هذه المجموعة يؤثر على المستخدم الحالي ، فضلاً عن عدم تخزين هذا التغيير في مصنف العمل المعدل ، كيف ؟

لنفترض أنك تقوم بتسجيل دخولك على نظام التشغيل ويندوز تحت اسم معين (ليكن MAH) ، الآن إذا فتحت الملف Book1 و قمت بإخفاء شريط الأدوات القياسي فإن هذا التغيير سينسحب على جميع مصنفات الاكسل التي تفتحها من داخل المستخدم MAH ، وبنفس الوقت فإن هذا التغيير لن يحفظ في المصنف Book1 السابق (جرب فتح المصنف Book1 من مستخدم آخر لنظام تشغيلك أو من جهاز آخر و لاحظ النتيجة).

مما سبق نلاحظ أنه لا مناص من استخدام أكواد الفيجوال من أجل حل هذه المشكلة .

ضع الكود التالي في الـ ThisWorkbook :

Private Sub Workbook_Open()
  Call HideCommandBars
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Call UnhideCommandBars
End Sub
و الكود التالي في الـ Module :
Dim MyCommandBars_Name() As String
Sub HideCommandBars()
  On Error GoTo OutOfRange
  Dim cd As CommandBar
  With Application
    .DisplayFormulaBar = False
    .DisplayStatusBar = False
    For Each cb In .CommandBars
      If cb.Visible = True Then
        ReDim Preserve MyCommandBars_Name(UBound(MyCommandBars_Name) + 1)
        MyCommandBars_Name(UBound(MyCommandBars_Name)) = cb.Name
        If cb.Name = "Worksheet Menu Bar" Then
          cb.Enabled = False
        Else
          cb.Visible = False
        End If
      End If
    Next cb
  End With
  Exit Sub

OutOfRange:
  If Err = 9 Then
    ReDim MyCommandBars_Name(0)
    Resume Next
  Else
    MsgBox Err.Description
  End If
End Sub
Sub UnhideCommandBars()
  With Application
    .DisplayFormulaBar = True
    .DisplayStatusBar = True
    For i = 0 To UBound(MyCommandBars_Name)
      If MyCommandBars_Name(i) = "Worksheet Menu Bar" Then
        .CommandBars(MyCommandBars_Name(i)).Enabled = True
      Else
        .CommandBars(MyCommandBars_Name(i)).Visible = True
      End If
    Next i
  End With
End Sub

الكود HideCommandBars السابق يقوم بما يلي :

- إخفاء شريط المعلومات و شريط الصيغة (عند فتح المصنف) .

- البحث داخل التطبيق عن أشرطة الأدوات (بما فيها شريط القوائم) الموجودة و الظاهرة و إدراج أسماءها في المصفوفة الديناميكية MyCommandBars_Name ومن ثم القيام بإخفائها (عند فتح المصنف).

الكود UnhideCommandBars السابق يقوم بإعادة إظهار شريط المعلومات و شريط الصيغة ، وكما يقوم أيضاً بإظهار أشرطة الأدوات (بما فيها شريط القوائم) بالاعتماد على أسمائها الموجودة داخل المصفوفة MyCommandBars_Name السابقة (عند إغلاق المصنف) ، وبهذه الطريقة فإننا قمنا بإخفاء أشرطة الأدوات (المحددة بواسطة المستخدم) عند فتح المصنف و إعادتها دون زيادة أو نقصان عند إغلاق المصنف ، و بذلك فلن يعاني المستخدم من إشكاليات و ذلك لأن أشرطة الأدوات ستظهر كما حددها هو بنفسه.

ملاحظات :

1. انتبه إلى أن سير عمل الكود سيتأثر بشكل كبير فيما إذا فقدت المعلومات الموجودة داخل المصفوفة MyCommandBars_Name ، وتفقد المعلومات من المصفوفة السابقة في إحدى الحالات التالية:

تحرير الأكواد ، إغلاق المصنف بشكل غير قانوني ، توقف الجهاز قبل إغلاق الملف (بسبب عطل في التيار الكهربائي مثلاً) .

ولذلك فإن عملية الاعتماد على المصفوفات لحفظ هكذا معلومات يعتبر أمراً غير مناسب ، وهنا لك الخيار في اختيار طريقة الحفظ (كحفظ هذه المعلومات في ورقة عمل معينة).

2. لاحظ أخي الكريم أننا اعتمدنا على الخاصية Enabled من أجل إخفاء شريط القوائم ، و على الخاصية Visible من أجل إخفاء أشرطة الأدوات الباقية .

أرجو أن أكون قد وفقت في إيصال المعلومة بشكل صحيح :rol:

مرفق مثال يوضح ما سبق :

تحياتي :fff:

CommandBars.zip

  • 1 month later...
قام بنشر (معدل)

بسم الله الرحمن الرحيم

في الكود الذي كتبه الاخ محمد قد تفقد المصفوفة اللتي تم تخزين عدد اشرطة الادوات قيمتها فيها وبالتالي ظهور رسالة خطأ اذا قاك المستخدم بالاغلاق بطريقة غير شرعية او اذا انقطع التيار الكهربائي فجأة لذلك كما اقترح الاخ محممد حجازي قمت بتخزين اسماء وعدد اشرطة الادوات في ورقة عمل معينة

اولا كود اخفاء الاشرطة

Sub hide()

Sheets("data").Cells(1, 1) = 0
Dim cb As CommandBar
Dim comd() As String
 With Application
   .DisplayFormulaBar = False
   .DisplayStatusBar = False
   For Each cb In .CommandBars
     If cb.Visible = True Then
Sheets("data").Cells(1, 1) = Sheets("data").Cells(1, 1) + 1
End If
Next
End With
'''''''''''''''''''''''''''''''''''
tt = Sheets("data").Cells(1, 1)
With Application
gg = 1
For Each cb In .CommandBars
If cb.Visible = True Then
 Sheets("data").Cells(gg, 4) = cb.Name
gg = gg + 1
End If
Next
End With

'''''''''''''''''''''''''''''''''''
With Application
   .DisplayFormulaBar = False
   .DisplayStatusBar = False
   For Each cb In .CommandBars
     If cb.Visible = True Then
     ReDim Preserve comd(Sheets("data").Cells(1, 1))
         comd(UBound(comd)) = cb.Name
       If cb.Name = "Worksheet Menu Bar" Then
         cb.Enabled = False
       Else
         cb.Visible = False
       End If
     End If
   Next cb
 End With

End Sub
ثانيا كود الاظهار
Sub sohw()
On Error GoTo errr

 Application.CommandBars("Worksheet Menu Bar").Enabled = True
With Application
   .DisplayFormulaBar = True
   .DisplayStatusBar = True

 End With
    For YY = 2 To Sheets("data").Cells(1, 1).Value
   
Application.CommandBars(Sheets("data").Cells(YY , 4).Text).Visible = True
Next
For YY = 1 To Sheets("data").Cells(1, 1).Value
Sheets("data").Cells(YY , 4) = ""

Next
Sheets("data").Cells(1, 1) = 0
errr:
If Err = 9 Then

For YY = 1 To Sheets("data").Cells(1, 1).Value
Sheets("data").Cells(YY , 4) = ""

Next
Sheets("data").Cells(1, 1) = 0
Exit Sub
End If
End Sub
ثم تضع الكود التالي في الworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sohw
End Sub

Private Sub Workbook_Open()
hide
End Sub

ولكن لا تنسي ان تنشئ ورقة جديدة باسم data

تم تعديل بواسطه m.hindawi
قام بنشر

السلام عليكم ...

شكراً لك أخ مصعب ، وبالفعل فإن طريقتك هي الأضمن (y)

ولكن عندي إضافة بسيطة :

قد تتسبب الأكواد السابقة في بعض الأخطاء عند تشغيل أكثر من ملف اكسل معاً ، و الحل يكمن بالاعتماد على اسم الملف الذي يحتوي على الكود عند الإشارة للأهداف المختلفة ، كأن نكتب :

Workbooks("Book1").Sheets("data").Cells(1, 1).Value
بدلاً من :
Sheets("data").Cells(1, 1).Value

تحياتي

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information