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

( موضوع مميز ) معالم على طريق البرمجة بلغة VBA


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

اخى زياد على شكرا لك على هذا المجهود الكريم كم تمنيت ان ينفرد هذا المنتدى بهذه الافكار الحلوه والجميلة

فبدلا من ان ابذل مجهودات جباره لتلبية طلبات الاعضاء اعلمهم كيف يلبون طلبات انفسهم

ياريت ادارة المنتدى تقرأ هذه الكلمات

نحن نعلم انكم لاتتاخرون علينا فى اى طلب

نحن نعلم انكم من افضل المنتديات فى التعاون

المهم

ما نريده هى مواضيع مثل مواضيع زياد على

بل ارجو تقسيمه فمثلا نتكلم عن التعامل مع الكائنات ثم عن الحماية ثم عن الترحيل ثم عن الحفظ والاغلاق

شكرا لك وبارك الله فيك والى اللقاء وارجو ان تستمر بل ارجو ان يثبت موضوعك

تم تعديل بواسطه سعد عابد
رابط هذا التعليق
شارك

السلام عليكم

أخي مزلزل

أخي هشام شلبي

لكم أسعدني مروركم وكلماتكم الطيبة يا أخوتي فجزاكم الله عني كل خير أيها الأحبة ،،،

أستاذي طارق

منور كالعادة والكود رائع ،، و نحن في انتظار المزيد من هذه الأكواد الصغيرة السحرية .

اخي DR.ZUHAIR

بارك الله مروركم ،،، وإن شاء الله نبذل ما في الوسع

أخي خالد القدس

حبيب والله أنت ،،، أعزكم الله ،،، ونشكر لك هذا التواصل المستمر معنا ،،، أحسنت

تحياتي للجميع

رابط هذا التعليق
شارك

والأن عودٌ على بدء

بسم الله

والصلاة والسلام على رسول الله

لا يزال الحديث متصل بالنطاق أو ما يسمى بكائن المدى

توقفنا عند الجملة WITH التي تستخدم عند الشروع في ضبط مجموعة خصائص لكائن بعينه ،،،

وهذا مثال آخر عليها :

Sub zezo43()

With Cells(1, "D")

.Value = "زياد علي"

.Font.Bold = True

.Font.Name = "Arial"

.Font.Size = 72

.Font.Color = RGB(0, 0, 250)

.Columns.AutoFit

.Interior.Color = RGB(0, 255, 255)

.Borders.Weight = xlThick

.Borders.Color = RGB(0, 0, 255)

End With

End Sub
في هذا الكود : استخدمنا الخاصية Cells للإشارة إلى الخلية الأولى من العمود D ،،، ويمكن شرح هذا الكود البسيط كما يلي عند الخلية الأولى من العمود D أعطها قيمة نصية "زياد علي" قم بتغليظ الخط قم باستخدام نوع الخط Arial وحجم خط 72 واختيار اللون الأزرق ،،، ثم استخدم خاصة الأحتواء المناسب لضبط النص داخل الخلية واجعل الخلفية باللون "تركوازي" ،،، قم بإحاطة الخلية برسم حد ذي حد غليظ ،،، ثم اختر للحد لوناً أزرق ... ثم قم بإنهاء جملة WITH ... وتجدر الإشارة إلى أن أنواع ال .Borders.Weight هي كما يلي :
خط رفيع جداً	xlHairline

خط رفيع	xlThin

خط متوسط	xlMedium

خط ثخين	xlThick
Sub zezo44()

With Range("A1:A5,H1:H5")

.Value = "ziad ali"

.Font.Bold = True

. Columns.AutoFit

End With

End Sub
في هذا الكود تم الإشارة لمجالين مختلفين مع جملة WHIT ثم تم كتابة قيمة نصية ZIAD ALI ، تم اختيار نوع الخط الثخين ، تم عمل احتواء مناسب للأعمدة .ثم إنهاء جملة WITH. ================================================================================================= - و الآن سنرفع مجدداً من درجة الانتباه : جميع ما سبق الحديث عنه بالنسبة للمدى كان محدد ومعلوم ، أي أن الأبعاد ثابتة ومحددة مثلاً الخلية A1 ، A1:H10 ، ولكن ماذا لو كان المجال المطلوب العمل ضمنه هو مجال متغير الأبعاد . - وتأسيساً على ما سبق يجب علينا التعرف على ما يلي : - جمل التخصيص : SET AND LET الحديث عن هذه الجمل يقودنا للحديث عن المتغيرات ،،، واختصارا للوقت والجهد فيوجد بحث وافي بهذا الخصوص لأساتذتنا الأفاضل : أمير عاطف على هذا الرابط : http://www.officena.net/ib/index.php?showtopic=116&st=0&p=390 والأخر للأستاذ محمد حجازي ولكن للأسف لم أعثر على المشاركة عند البحث في المنتدى و عنوان المشاركة الحديث عن المتغيرات ،،، لذا يرجى البحث عنها في مشاركات استأذنا الفاضل . واهم انواع المتغيرات يمكن اختصاره في هذا الرسم التوضيحي :
Sub zezo45()

Dim R1 As Range

Dim R2 As Range

Dim ZEZO As Range


Set R1 = Range("B2:C5")

Set R2 = Range("F2:J5")

Set ZEZO = Union(r1, r2)


With ZEZO


.Value = "ZIAD ALI "

.Font.Size = 20

.Font.Bold = True

.Font.Italic = True

.Font.ColorIndex = 5

.Borders.Weight = xlMedium

.Borders.Color = RGB(0, 255, 255)

.Interior.ColorIndex = 6

.Columns.AutoFit


End With
السطر الأول والثاني والثالث إعلان عن المتغيرات على أنها من النوع RANGE ،،، السطر الرابع والخامس تخصيص المجال المذكور للمجال الأول والثاني R1 ، R2 وذلك باستخدام جملة Set السطر السادس تخصيص المجال ZEZO الذي نريده أن يعبر عن دمج المجالين R1 ، R2 وذلك باستخدام الأمر Union ،،، والفائدة من ذلك كله تكٌمن في السطر السابع ، فعند تخصيص المجال ZEZO كمتغير من نوع نطاق ليعبر عن المجالين R1 ، R2 أمكن لنا أن نقرنه بالجملة WHIT ليأخذ الخصائص المطلوبة في الأسطر الباقية من الكود . مثال أخر على جملة SET :
Sub zezo46()

Dim Z As Worksheet

Set Z = Application.Worksheets(2)

Z.Name = "ZEZO46"

End Sub

فقد تم تخصيص الكائن من ورقة عمل للمتغير Z وبالتالي عند استخدام خاصية NAME مع المتغير Z أمكن تغيير أسم الورقة ،،، باختصار فإن المتغير Z بفضل الجملة SET يعبر عن كائن ورقة

العمل المحددة .

وللأستاذ العزيز والغالي مشاركة فريدة منذ أكثر من عامين على هذا الرابط :

http://www.officena.net/ib/index.php?showtopic=22221&st=0&p=103182&#entry103182

هذا والله الموفق

الحمد لله رب العالمين

==========================================يتبع بإذن الله========================================

A7lashare-3946d061ee.jpg
والخلاصة بالنسبة لجمل التخصيص المذكورة أعلاه SET ، LET أن كلاهما تستخدم لتخصيص قيم المتغيرات المُعلن عنها ككائنات والفرق بينهما في أن جملة SET تستخدم لتخصيص المتغيرات من نوع كائن ، أما LET فتستخدم لتخصيص القيم الرقمية أو الحرفية للمتغيرات الأخرى. وفي التالي سنسوق مثال على جملة SET لأنها هي ما يعنينا الآن وسنؤجل الحديث عن جملة LET والذي سيشير أيضاً إلى مجالين مختلفين :
تم تعديل بواسطه ziad ali
رابط هذا التعليق
شارك

السلام عليكم

اخي سعد عابد

متأسف والله لم أرى ردك ،،، شكراً شكراً

وبارك الله فيك اخي الحبيب ،،،

احنا في الخدمة اخي الكريم ،،،

واقتراحك في محله ،،،

وكذلك إدارة الموقع والمنتدى ،،،

غير مقصرين و لا يألونا جهداً في سبيل توصيل المعلومة بمختلف السَبل ،،،

مودتي وتقديري

رابط هذا التعليق
شارك

السلام عليكم

أستاذي الفاضل ابوعبدالله

هنيئًا لي بهذا الحضور الذي أعتز به..

و هذه الكلمات التي زادت فرحتي واسعدتني ،،،

فبارككم الله وأسعدكم في الدنيا والأخرة

اخي عبدالناصر

أدعو الله أن يمتعكم بالصحة والعافية..

و أن يوفقني لتقديم الأفضل

أشكركم كثيرا ولكم كل مودتي وتقديري

رابط هذا التعليق
شارك

بسم الله

والصلاة والسلام على رسول الله

السلام عليكم

والأن عودٌ على بدء :

لا يزال الحديث موصولاً بكائن النطاق RANGE

ولقد استغرق منا هذا المبحث تقريباً جميع حالات الإشارة إلى كائن النطاق RANGE وذلك نظراً لأهمية

الموضوع وأهميته ،،، ولكن الملاحظ فيما سبق أننا قد نحتاج من حين لأخر لزيادة أو إنقاص حجم مساحة

العمل ( المدى) الذي نريد العمل ضمنه ، وبالتالي نضطر لتعديل أبعاد المدى من داخل الكود ،،، ومن هنا

جاءت الفكرة ،،،

فماذا لو كان مجال العمل ( المدى) متحرك – ديناميكي - ،،

عندها يصبح الكود والعمل المنجز أكثر فعالية ومفعماً بالحيوية ،،،

- ومثال على ذلك قد نعد تنسيقات لجدول بحجم ضخم ولكن لا نستخدم منه إلا الجزء اليسير وينتج عن ذلك

إرهاق لموارد البرنامج وبطء ملحوظة في كفاءة ملف العمل .

والكود التالي يلخص فكرة ما سبق الحديث عنه :

Private Sub Worksheet_Change(ByVal Target As Range)


With Range("MYRANGE")


.Font.Size = 16

.Font.Bold = True

.Font.ColorIndex = 5

.Borders.Weight = xlMedium

.Borders.ColorIndex = 3

.Interior.ColorIndex = 36

.Columns.AutoFit

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.RowHeight = 25


End With


End Sub

وجميع اسطر الكود تقريباً تم شرحها سابقاُ فيما عدا أن الكود لا يبدأ بكلمة SUB المعهودة وذلك لأنه مقترن بحدث التغير في ورقة العمل عند المجال MYRANGE الديناميكي ليعطي الحيوية المطلوبة ،، كذلك سطري الأوامر :
.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter
واللذان يعنيان توسيط البيانات افقياً وعمودياً ، أيضا سطر الأوامر :
.RowHeight = 25

والذي يعني جعل الصفوف متساوية بأرتفاع 25

والملف المرفق كذلك يوضح الفكرة ،،،

طبعاً فكرة المجال الديناميكي قام بشرحها الأستاذ الفاضل والعزيز والمبدع ابوتامر على هذا الرابط :

http://www.officena.net/ib/index.php?showtopic=14859&view=findpost&p=65188

كما قام اخونا العزيز ومشرفنا الكريم يحي حسين بشرحه بالفيديو على هذا الرابط :

http://www.4shared.com/file/56705631/8b66646/__3_-__.html

==========================================يتبع بإذن الله========================================

المدى الديناميكي.zip

تم تعديل بواسطه ziad ali
رابط هذا التعليق
شارك

السلام عليكم

أستاذ زياد علي

ربنا يزيد ويجعل هذا العمل في ميزان حسناتك

فمثل هذا الشرح لا شك يأخذ من الوقت والجهد الكثير

فجزاك الله عنا خير الجزاء

تم تعديل بواسطه TareQ M
رابط هذا التعليق
شارك

بسم الله

والصلاة والسلام على رسول الله

السلام عليكم

نلتقي مجدداً بحول الله وقوته

مع دفقة جديدة من الأكواد الصغيرة التي تشير لكائن النطاق

فعلى بركة الله نبدأ :

Sub zezo48()

Worksheets("sheet2").Range("a1").AddComment ("ziad ali")

End Sub
لإضافة تعليق بالخلية المذكورة
Sub zezo49()

Worksheets("sheet2").Range("a1.d12").ClearComments

End Sub
لمسح التعليق بالمجال المحدد
Sub zezo50()

MsgBox Worksheets("sheet2").Range("a3").Address

End Sub
لمعرفة عنوان الخلية المذكورة
Sub zezo51()

Worksheets("sheet2").Range("c3.b10").BorderAround (1)

End Sub
لعمل حدود للمجال المحدد وممكن زيادة بمقدار الرقم واحد لتشاهد التغير
Sub zezo52()

Worksheets("sheet2").Range("f8.h14").Calculate

End Sub
لاحتساب المجال المحدد فقط – طبعاً يستخدم في حالة عدم تفعيل الاحتساب التلقائي
Sub zezo53()

Worksheets("sheet2").Range("a3.d12").CheckSpelling

End Sub
لعمل تدقيق إملائي للمجال المحدد
Sub zezo54()

Worksheets("sheet2").Range("a3.d12").Clear

End Sub
لمسح الكل بالمجال المحدد
Sub zezo55()

Worksheets("sheet2").Range("a3.d12").ClearContents

End Sub
لمسح المحتويات بالمجال المحدد وممكن يشار إليها هكذا ،،،
Sub zezo56 ()

    Worksheets("Sheet2").[ a3:d12].ClearContents

End Sub
تغيير بسيط يعني في شكل الأقواس
Sub zezo57()

Worksheets("sheet2").Range("a3.d12").ClearFormats

End Sub
لمسح التنسيقات فقط بالمجال المحدد
Sub zezo58()

MsgBox Worksheets("sheet2").Range("f3").Column

End Sub
لمعرفة رقم العمود الذي تقع فيه الخلية المحددة
Sub zezo59()

MsgBox Worksheets("sheet2").Range("b5").Row

End Sub
لمعرفة رقم الصف الذي تقع فيه الخلية المحددة
Sub zezo60()

MsgBox Worksheets("sheet2").Range("b3.d12").Columns.Count

End Sub
لعد الأعمدة الواقعة بالمجال المحدد
Sub zezo61()

MsgBox Worksheets("sheet2").Range("b3.d12").Rows.Count

End Sub
لعد الصفوف الواقعة بالمجال المحدد
Sub zezo62()

MsgBox Worksheets("sheet2").Range("a3.d12").Cells.Count

End Sub
لعد الخلايا الواقعة في محيط المجال المحدد
Sub zezo63()

MsgBox Worksheets("sheet2").Range("a6").Text

End Sub
لقراءة محتوى الخلية المحددة
Sub zezo64()

Worksheets("sheet2").Range("b3.d12").ColumnWidth = 4

End Sub
لإعطاء عرض معين للأعمدة الواقعة في المجال المحدد
Sub zezo65()

Worksheets("sheet2").Range("b3.d12").RowHeight = 10

End Sub
لإعطاء ارتفاع معين للصفوف الواقعة في المجال المحدد
Sub zezo66()

Worksheets("sheet2").Range("f19.g20").PrintPreview

End Sub
لمعاينة البيانات بالمجال المحدد فقط
Sub zezo67()

Worksheets("sheet2").Range("f19.g20").PrintOut

End Sub

لطباعة البيانات بالمجال المحدد فقط

والله من وراء القصد

============================================يتبع بإذن الله=================================================

رابط هذا التعليق
شارك

السلام عليكم

أخي sunaien

أخي salamaxp

أخي waledresi

أخي خالد القدس

أخي هشام شلبي

بارك الله مروركم هذا ولكم مني كل المودة والتقدير والاحترام ،،،

ووفقنا الله وإياكم لما يحبه ويرضاه ،،،

وجمعنا بكم برفقة الحبيب المصطفى ،،،

شكراً شكراً شكراً

مع خالص مودتي وتقديري

رابط هذا التعليق
شارك

بسم الله

والصلاة والسلام على رسول الله

السلام عليكم

بما أن الكائن المسمى range قد استغرق وقتنا وجهدنا كله في هذه السلسلة فإن الأوان قد آن لكي نطرحه جانباً

ونلتفت قليلاً لبقية الكائنات والمكونات في برنامجنا المحبب الإكسيل ،،،، على أمل اللقاء به في لقاء آخر،،،

أما الأن فلنا لقاء مع كائن آخر يسمى Windows Object وهذا الكائن يمثل جميع النوافذ في تطبيق إكسل.

فتعالوا لنتعلم بعض الأكواد المتعلقة به لنتعرف عليه أكثر .

ومن أراد نبذة عامة عن أسرة الكائنات الرقمية فعليه بهذا الرابط :

http://www.officena.net/ib/index.php?showtopic=27109&st=20

إذن على بركةالله نبدأ :

لتغيير التسمية التوضيحية لأسم النافذة للمصنف النشط في الشريط العلوي من البرنامج ،،،

Sub zezo68()

ActiveWindow.Caption = "zezo"

End Sub
وممكن تكون هكذا – بدون أي تسمية توضيحية – شي ء عجيب
Sub zezo69()

ActiveWindow.Caption = ""

End Sub
ولتنشيط نافذة بعينها مفتوحة في الخلفية ،،،
Sub zezo70()

Windows("Book1").Activate

End Sub
كما يمكن ان يكون خيار التنشيط بأختيار التالي والسابق
Sub zezo71()

ActiveWindow.ActivateNext

End Sub
Sub zezo72()

ActiveWindow.ActivatePrevious

End Sub
لعمل إطار جديد لنافذة المصنف الحالي النشط ،،،
Sub zezo73()

ActiveWindow.NewWindow

End Sub
لإخفاء إطار نافذة المصنف الحالي النشط ،،، طبعاً يمكن إظهاره القائمة إظهار أو اختيار TRUE إذا كنت داخل محرر الأكواد .
Sub zezo74()

ActiveWindow.Visible = False

End Sub
و لتحديد حالة النافذة الحالية للمصنف النشط من حيث التكبير والتصغير والوضع الطبيعي
Sub zezo75()

ActiveWindow.WindowState = xlMaximized

End Sub
Sub zezo76()

ActiveWindow.WindowState = xlMinimized

End Sub
Sub zezo77()

ActiveWindow.WindowState = xlNormal

End Sub
لإغلاق نافذة المصنف الحالي النشط :
Sub zezo78()

ActiveWindow.Close

End Sub
لإعطاء زووم بقيمة معينة لنافذة ورقة العمل الحالية :
Sub zezo79()

ActiveWindow.Zoom = 80

End Sub
لإخفاء علامات التبويب لأوراق العمل بنافذة المصنف النشط
Sub zezo80()

ActiveWindow.DisplayWorkbookTabs = False

End Sub
لإخفاء رؤوس الأعمدة والصفوف بنافذة ورقة العمل الحالية
Sub zezo81()

ActiveWindow.DisplayHeadings = False

End Sub
لإخفاء شريط التمرير الأفقي بنافذة المصنف النشط الحالي
Sub zezo82()

ActiveWindow.DisplayHorizontalScrollBar = False

End Sub
وللتحكم بشريط التمرير الأفقي من حيث الزيادة والنقصان يمكن التدرج بالشكل التالي :
Sub zezo83()

ActiveWindow.TabRatio = 1

End Sub
Sub zezo84()

ActiveWindow.TabRatio = 0

End Sub
Sub zezo85()

ActiveWindow.TabRatio = 0.5

End Sub
لإخفاء شريط التمرير العمودي بنافذة المصنف النشط الحالي
Sub zezo86()

ActiveWindow.DisplayVerticalScrollBar = False

End Sub
لعرض جميع الصيغ بنافذة ورقة العمل النشطة
Sub zezo87()

ActiveWindow.DisplayFormulas = True

End Sub
لإخفاء خطوط الشبكة بنافذة ورقة العمل النشطة
Sub zezo88()

ActiveWindow.DisplayGridlines = False

End Sub
لإعطاء لون محدد لخطوط الشبكة بنافذة ورقة العمل النشطة
Sub zezo89()

ActiveWindow.GridlineColor = QBColor(14)

End Sub
لعمل معاينة لفواصل الصفحات بالورقة النشطة حالياً
Sub zezo90()

ActiveWindow.View = xlPageBreakPreview

End Sub
وللعودة لوضع العرض العادي للورقة النشطة حاليا ً
Sub zezo91()

ActiveWindow.View = xlNormalView

End Sub
لإخفاء القيم الصفرية بنافذة ورقة العمل النشطة
Sub zezo92()

ActiveWindow.DisplayZeros = False

End Sub
لقراءة اسم الورقة الحالية في شكل مسج
Sub zezo93()

MsgBox Windows(1).ActiveSheet.Name

End Sub
لقراءة عنوان مدى محدد تم اختياره ليظهر العنوان في شكل مسج
Sub zezo94()

MsgBox ActiveWindow.RangeSelection.Address

End Sub
لقراءة عنوان الخلية النشطة بنافذة المصنف تم اختياره ليظهر العنوان في شكل مسج
Sub zezo95()

MsgBox Windows("zezo").ActiveCell.Address

End Sub
لعمل انقسام داخل نافذة ورقة العمل النشطة
Sub zezo96()

ActiveWindow.Split = True

End Sub
لمعرفة عدد الأجزاء المنقسمة داخل نافذة ورقة العمل النشطة واسترجاع الناتج في شكل مسج
Sub zezo97()

MsgBox ActiveWindow.Panes.Count

End Sub
لعمل تجميد الألواح داخل نافذة ورقة العمل النشطة
Sub zezo98()

ActiveWindow.FreezePanes = True

End Sub

،،،، والله من وراء القصد ،،،،

============================================يتبع بإذن الله=================================================

تم تعديل بواسطه ziad ali
رابط هذا التعليق
شارك

السلام عليكم

استاذ زياد علي

ما شاء الله لا قوة إلا بالله ،،، هذه السلسلة فعلاً كنوز ،،، وقلما نجد من يتحدث عن هذا الموضوع كمرجع عربي على صفحات الانترنت

ياريت إدارة المنتدى تثبت الموضوع ليستفيد الجميع ولتكون مرجع لهم،،،

مشكور وبارك الله فيك

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information