بحث مخصص من جوجل فى أوفيسنا
Custom Search
|
محمد حجازي
المشرفين السابقين-
Posts
771 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
2
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو محمد حجازي
-
السلام عليكم ... تتطلب هذه الدالة وجود الوظيفة الإضافية Analysis ToolPak
-
السلام عليكم ... إذا كان قصدك جعل التاريخ يظهر كالأرقام العشرية ، فيمكنك ذلك عن طريق تغيير إعدادات الويندوز ، فقط اتبع الخطوات التالية : Control Panel > Regional and Language Options في علامة التبويب Regional Options اضغط على الزر Customize ليظهر لك فورم جديد : تحت لسان التبويب Time : - في المربع Time format ضع التنسيق التالي : h:m:s tt - في المربع Time separator ضع الرمز الذي تريد استخدامه للفصل بين الساعات و الدقائق و الثواني . الكلام السابق كان تحت نظام الويندوز XP. بالتوفيق
-
اين تحفظ البيانات المدخلة في الاتو لوك
محمد حجازي replied to ahmedspcc's topic in منتدى الاوتلوك Outlook
السلام عليكم ... انقر على الخيار Options الموجود في القائمة Tools لتظهر لك نافذة : تحت لسان التبويب Mail Setup و ضمن المجموعة Data Fils انقر على الزر Data Fils لتظهر لك نافذة جديدة تحتوي على مسار المجلد الخاص بالمعلومات . اضغط على الزر Open Folder ليفتح لك المجلد . قم بنسخه على هارد آخر و عاود لصقه بعد فرمتة الجهاز وتنزيل النظام (مع مراعاة عنوان المجلد على النسخة الجديدة) . ملاحظة : هذه الطريقة مجربة على البرنامج Outlook Express و لا أعرف فيما إذا كانت فعالة على Microsoft Office Outlook ، و كما أنصحك قبل الفورمات بأن تحفظ عناوين الأشخاص المسجلين عندك بواسطة خيارات التصدير المختلفة ، وذلك لأن الطريقة السابقة تحتفظ بمجلدات الرسائل الموجودة في الـ Outlook Express دون العناوين. -
الإدارة الحديثة
محمد حجازي replied to محمد طاهر عرفه's topic in المنتدى التقني العام و تطبيقات الأوفيس الأخرى
السلام عليكم ... طيب جرب هذه محبوكة أكتر :d Exam.zip -
لمن لديه بريد Gmail
محمد حجازي replied to أحمد العيسى's topic in المنتدى التقني العام و تطبيقات الأوفيس الأخرى
السلام عليكم ... الأخ أحمد العيسى ، لا أعرف بالضبط إذا كان هناك إصدار خاص بهذه النسخة من الويندوز . على أية حال فالملف حصلت عليه من الوصلة التالية : http://toolbar.google.com/gmail-helper/ و لمزيد من الأدوات راجع الرابط التالي : http://www.google.com/downloads تحياتي -
دعوات لبريد GMAIL
محمد حجازي replied to محمد حجازي's topic in المنتدى التقني العام و تطبيقات الأوفيس الأخرى
السلام عليكم ... الأخوة skyblue و hussein_abd ، تم إرسال الدعوات. -
السلام عليكم ... عند استخدام المحرر و لصق النص الناتج في المربع الموجود في المنتدى تظهر عندي الحروف بصورة غير مفهومة . الرجاء مساعدتي لحل مشكلة الاختلاف في الترميز .
-
السلام عليكم ... أرجو إرفاق مثال لمشكلتك في قسم التحميل المؤقت للأعضاء ، وذلك حتى يتمكن الأعضاء من فهم المشكلة بصورة واضحة.
-
السلام عليكم .... جرب التعديل التالي : Public NewWorkbok As Object Sub SaveSheet() On Error GoTo NoSave Dim NumberSheets() As Integer Set NewWorkbok = Workbooks.Add Workbooks("Book1").ActiveSheet.Copy Before:=Workbooks(NewWorkbok.Name).Sheets(1) ReDim NumberSheets(2 To NewWorkbok.Worksheets.Count) For i = 2 To NewWorkbok.Worksheets.Count NumberSheets(i) = i Next i Application.DisplayAlerts = False With NewWorkbok .Sheets(NumberSheets).Delete Application.DisplayAlerts = True .SaveAs Filename:=Workbooks("Book1").Path & "\" & Workbooks("Book1").ActiveSheet.Range("A1").Value .Close End With Exit Sub NoSave: If Err = 1004 Then Application.DisplayAlerts = False NewWorkbok.Close Application.DisplayAlerts = True Else MsgBox Err.Description End If End Sub و لكن انتبه إلى أن المصنف هو باسم Book1 و أن اسم المصنف الجديد موجود في الخلية A1 من الورقة النشطة (التي تريد حفظها).
-
لمن لديه بريد Gmail
محمد حجازي replied to أحمد العيسى's topic in المنتدى التقني العام و تطبيقات الأوفيس الأخرى
السلام عليكم ... شكراً لك يا أخي على هذه الميزة التي أفادتني كثيراً . و إليك هذه الميزة (الإبلاغ عن الرسائل الجديدة دون الدخول إلى الـ GMAIL). الحقيقة فإن الـ gmail يقدم مزايا مبهرة في كل مرة . GmailInstaller.rar -
السلام عليكم ... بالنسبة لمشكلتك الثانية : يمكنك حلها عن طريق الدالة DSUM ، مرفق المثال معدل (بالنسبة للمشكلة الثانية) : customers.rar
-
السلام عليكم ... يجب أن يكون لديك مساحة في إحدى السيرفرات لكي تستطيع عرض الصور . سجل في موقع جيران أو الياهو و حمل الصور و ضع رابطها عندما يحتاجها محرر المنتدى . هذه المشكلة تكمن في تحويل نظام الترميز الموجود في الاكسل من A1 إلى R1C1 ، الرجاء مراجعة الأكواد لمعرفة السطر الذي يقوم بهذا العمل و العمل على معالجته.
-
راجع الرابط التالي : http://www.officena.net/ib/index.php?showtopic=7876 جرب الكود : Public NewWorkbok As Object Sub SaveSheet() On Error GoTo NoSave Dim MyPath As String Dim NumberSheets() As Integer MyPath = Application.GetSaveAsFilename(InitialFileName:="officena", FileFilter:="Excel Files (*.xls), *.xls", Title:="أدخل اسم الملف الذي تريد حفظه") If MyPath = "False" Then Exit Sub Set NewWorkbok = Workbooks.Add Workbooks("16834").ActiveSheet.Copy Before:=Workbooks(NewWorkbok.Name).Sheets(1) ReDim NumberSheets(2 To NewWorkbok.Worksheets.Count) For i = 2 To NewWorkbok.Worksheets.Count NumberSheets(i) = i Next i Application.DisplayAlerts = False With NewWorkbok .Sheets(NumberSheets).Delete Application.DisplayAlerts = True .SaveAs Filename:=MyPath .Close End With Exit Sub NoSave: If Err = 1004 Then Application.DisplayAlerts = False NewWorkbok.Close Application.DisplayAlerts = True Else MsgBox Err.Description End If End Sub الموجود في الرابط ارابط التالي : http://www.officena.net/ib/index.php?showtopic=7581 لا أعتقد أنك بحاجة لهذا الكود ، وذلك لأن الرسائل التي سيظهرها الكود لن تختلف أبدأ عن معالج الطباعة الخاص بالاكسل .
-
الطباعة مع اخفاء الصفوف التي لا تحتوي بيانات
محمد حجازي replied to mr_looking's topic in منتدى الاكسيل Excel
السلام عليكم ... جرب الكود التالي : Sub MyPrint() Application.ScreenUpdating = False With Sheets("Sheet1") With .Range("A4:F3249") .Sort Key1:=.Cells(1, 2), Order1:=xlAscending For i = 1 To .Rows.Count If Application.WorksheetFunction.CountIf(.Rows(i), "") >= 6 Then .Rows(i).Hidden = True End If Next i End With .PrintOut .Rows.Hidden = False End With Application.ScreenUpdating = True End Sub ولكن انتبه إلى ما يلي : 1. لا حظ (من الكود) أن اسم الورقة هو Sheet1 (يمكن تغييره). 2. بالنسبة لتكرار الصفوف الثلاثة الأولى ، يمكنك ذلك عن طريق ما يلي : انقر على الخيار Page Setup الموجود ضمن القائمة File لتظهر لك نافذة : ضمن علامة التبويب Sheet حدد الصفوف المراد تكرارها عند طباعة كل صفحة (وكذلك الأعمدة) . -
السلام عليكم ... في علم الذكاء الاصطناعي ، هناك لعبة تسمى لعبة الشجرة و الأغصان . اللعبة مفادها أنه يتم قطع الغصن الذي لا يحقق الشرط (حذف الاحتمال المستحيل) من الاختبار ، وبذلك فإن مساحة الاختبار لا تنفتئ أن تتقلص . هذه الطريقة استخدمت في بناء لعبة الشطرنج التي غلبت كسباروف. الخلاصة : لا يوجد ضرورة لاختبار المجال من اليمين و اليسار (عن طريق التعليمة AND) و يكتفى بالاختبار من جهة واحدة. راجع الرابط : http://www.officena.net/ib/index.php?showtopic=7757
-
السلام عليكم ... بالنسبة لي ، لم تظهر عندي أي رسالة خطأ . قد يكون الخطأ (كما قال الأخ هنداوي) في تعريف مراجع الفيجوال.
-
3. الفرق بين Range و Cells : - يستخدم الأسلوب Range للإشارة إلى مجال الخلايا و ذلك عن طريق كتابة المجال باستخدام نظام الترميز A1 (تتم الإشارة إلى خلية ما بإدخال حرف العمود متبوعاً برقم الصف) ، لاحظ الأكواد التالية : Sub Test1() Sheets("Sheet1").Range("A1").ClearContents End Sub الكود السابق يقوم بمسح القيم الموجودة في الخلية A1 . Sub Test2() Sheets("Sheet1").Range("B2:C5").ClearContents End Sub الكود السابق يقوم بمسح القيم الموجودة في المجال B2:C5 . Sub Test3() Sheets("Sheet1").Range("A2:B3,D3,E5:G7,H11").ClearContents End Sub الكود السابق يقوم بمسح القيم الموجودة في المجالات A2:B3 ، D3 ، E5:G7 ، H11 . - أما الأسلوب Cells فيستخدم للإشارة إلى الخلايا المختلفة عن طريق كتابة رقم صف الخلية يليه رقم العامود ، لاحظ الكود التالي : Sub Test4() Sheets("Sheet1").Cells(2, 5).ClearContents End Sub الكود السابق يقوم بمسح القيم الموجودة في الخلية الواقعة في الصف الثاني و العامود الخامس من الورقة Sheet1 (أي الخلية E2). بالنسبة لقدرة الأسلوب Cells على الإشارة للمجالات المختلفة فهي محدودة ، ولا يستطيع ذلك إلى عن طريق الاستعانة بالأسلوب Range ، لاحظ الكود التالي : Sub Test5() Sheets("Sheet1").Range(Cells(2, 3), Cells(5, 7)).ClearContents End Sub الكود السابق يقوم بمسح القيم الموجودة في المجال C2:G5 الموجود في الورقة Sheet1 . مما سبق فإنه يبدو لنا أن التعامل مع الأسلوب Range هو أسهل بكثير من التعامل مع مثيلها Cells ، ولكن مهلاً ....... فالأسلوب Cells يمتلك مرونة عالية في التعامل مع الأهداف المتغيرة ، لاحظ الكود التالي : Sub MultiplicationTable1() Dim i As Byte, ii As Byte With Sheets("Sheet1") For i = 1 To 10 For ii = 1 To 10 .Cells(i, ii) = i * ii Next ii Next i End With End Sub الكود السابق هو كود مدرج في أحد مشاركاتنا السابقة ، ويقوم بإنشاء جدول الضرب في الورقة Sheet1 . لاحظ مقدار المرونة الذي يوفره لنا الأسلوب Cells ، و فكر بالصعوبات التي من المحتمل أن تواجهنا عند استخدام الأسلوب Range (و خصوصاً عند التعامل مع ترتيب الأعمدة) . مثال آخر يظهر مرونة الأسلوب Cells : بفرض أن لدينا جدول متوضع بين العامودين B و E ، ونريد إنشاء زر أمر لمسح قيم أي سجل بالاعتماد على رقمه . بالاعتماد على الأسلوب Cells فإننا نستطيع كتابة الكود التالي : Sub DeleteRecord1() Dim NumberRow As Long NumberRow = Application.InputBox(prompt:="ادخل رقم الصف", Title:="رقم الصف", Type:=1) If NumberRow = False Or NumberRow > 65536 Then Exit Sub Sheets("Sheet1").Range(Cells(NumberRow, 2), Cells(NumberRow, 5)).ClearContents End Sub الآن إذا أردنا الاعتماد على الأسلوب Range في الكود السابق عوضاً عن الأسلوب Cells ، فإننا سنحتاج لتعريف متغير إضافي MyRange من نوع نص و كتابة سطر إضافي لإنشاء المرجع المطلوب قبل استخدامه في الأسلوب Range ، لاحظ الكود التالي : Sub DeleteRecord2() Dim NumberRow As Long Dim MyRange As String NumberRow = Application.InputBox(prompt:="ادخل رقم الصف", Title:="رقم الصف", Type:=1) If NumberRow = False Or NumberRow > 65536 Then Exit Sub MyRange = "B" & NumberRow & ":E" & NumberRow Sheets("Sheet1").Range(MyRange).ClearContents End Sub بنظرة بسيطة نلاحظ أ الكود الأول هو أكثر كفاءة من الكود الثاني . لأخذ العلم ، فإن الطريقة السابقة أدرجت لتبيان الفرق بين الأسلوبين ، وذلك مع العلم بأنه يمكن حل المشكلة السابقة بطريقة أكثر بساطة و ذلك إذا ما اعتمدنا على الأسلوب Offset . ملاحظات هامة جداً عن الأسلوبين Cells و Range : 1. عندما تجري عملية مناقلة بين خلايا معينة ، فإنه لا يشترط استخدام نفس الأسلوب للإشارة إلى الخلايا أو النطاقات في كلتا المجموعتين : فمثلاً إذا أردنا لصق قيم المجال A1:A5 في المجال B1:B5 فإننا نستطيع عمل ذلك باستخدام أي طريقة من الطرق التالية : Sub Test6() With Sheets("Sheet1") Range("B1:B5").Value = Range("A1:A5").Value End With End Sub Sub Test7() With Sheets("Sheet1") Range(Cells(1, 2), Cells(5, 2)).Value = Range(Cells(1, 1), Cells(5, 1)).Value End With End Sub Sub Test8() With Sheets("Sheet1") Range(Cells(1, 2), Cells(5, 2)).Value = Range("A1:A5").Value End With End Sub Sub Test9() With Sheets("Sheet1") Range("B1:B5").Value = Range(Cells(1, 1), Cells(5, 1)).Value End With End Sub 2. قدرة كلا الأسلوبين Cells و Range على التكيف مع مجموعات الأهداف المختلفة : وهذه برأيي أهم ميزة يمتلكها هذين الأسلوبين ، وتقوم هذه الميزة على أن الأسلوب يشير للموضع النسبي للهدف المحتضن بالاعتماد على الهدف الحاضن له . لفهم هذه الميزة بشكل أوضح لاحظ الكودين التاليين : Sub Cells_Place1() Dim MyRange As Range Set MyRange = Sheets("Sheet1").Range("C5:H10") Sheets("Sheet1").Cells(1, 1).Value = "هذه الخلية الأولى من الورقة Sheet1" MyRange.Cells(1, 1).Value = "هذه الخلية الأولى من المجال MyRange" End Sub Sub Cells_Place2() Dim MyRange As Range Set MyRange = Sheets("Sheet1").Range("C5:H10") Sheets("Sheet1").Range("A1").Value = "هذه الخلية الأولى من الورقة Sheet1" MyRange.Range("A1").Value = "هذه الخلية الأولى من المجال MyRange" End Sub نلاحظ أن الأسلوبين Cells و Range قد اعتمدا على كل من الهدفين Sheet1 و MyRange ـ (C5:H10) من أجل تحديد الهدف الناتج (المحتضن) . بالنسبة لي ، فإنني أعتقد أن الأسلوب Cells أقدر على التعامل مع هذه الميزة بصورة أكثر كفاءة ، لاحظ الكود التالي : Sub Cell_Index() On Error GoTo NoRange Dim MyRange As Range Dim NumberRow As Long Dim NumberColumn As Long Set MyRange = Application.InputBox(prompt:="أدخل مجال الخلايا الذي تريده", Title:="مجال الخلايا", Type:=8) On Error GoTo 0 For NumberRow = 1 To MyRange.Rows.Count For NumberColumn = 1 To MyRange.Columns.Count MyRange.Cells(NumberRow, NumberColumn).Value = NumberRow & "×" & NumberColumn Next NumberColumn Next NumberRow Exit Sub NoRange: If Err = 424 Then Exit Sub Else MsgBox Err.Description End If End Sub الكود السابق يقوم بإدراج ترتيب كل خلية (رقم صفها و عامودها) وذلك بالنسبة للهدف الحاضن MyRange . لا تقلق أخي إذا لم تفهم هذه الميزة بصورة كاملة ، وذلك لأن لنا عودة معها عندما نقوم بشرح الأسلوبين CurrentRegion و UsedRange . تحياتي
-
كيف احصل على اعلى 10 سجلات موزعة على ورقتين
محمد حجازي replied to المثابر's topic in منتدى الاكسيل Excel
السلام عليكم ... حسب فهمي لسؤالك فإن حل مشكلتك يكمن في السطرين التاليين : Sheets("Result").Cells(EndRow + 1, 1) = .Cells(ii, 1).Value Sheets("Result").Cells(EndRow + 1, 2) = .Cells(ii, 2).Value و يمكنك هنا إضافة أسطر بعدد الأعمدة الموجودة لديك ، وذلك طبعاً مع الانتباه لتغيير ترتيب العامود (المتغير الثاني في الأسلوب Cells). جرب ما قلته لك و أخبرني بالنتيجة. تحياتي -
دعوات لبريد GMAIL
محمد حجازي replied to محمد حجازي's topic in المنتدى التقني العام و تطبيقات الأوفيس الأخرى
السلام عليكم ... الأخ صالح ، تم ارسال الدعوة -
السلام عليكم ... تم نقل الموضوع لقسم الوورد العام
-
السلام عليكم..شكراً لقبولي عضو بينكم
محمد حجازي replied to al3aqel's topic in المنتدى التقني العام و تطبيقات الأوفيس الأخرى
السلام عليكم ... أهلاً و سهلاً بك -
كيف يمكنك جعل كود الـ VBA أكثر كفاءة
محمد حجازي replied to محمد حجازي's topic in منتدى الاكسيل Excel
6. طرق أخرى لتجنب الهدر الناتج عن إبقاء العديد من الجمل داخل الحلقات التكرارية : تحدثنا في المشاركة السابقة عن كيفية استخدام الجملة With من أجل التقليل من الاستدعاء المتكرر للأهداف و الأساليب داخل الحلقات التكرارية ، و بقي لدينا في هذا الدرس ذكر بعض الطرق الفنية الإضافية التي يمكننا من خلالها التقليل من استدعاء هذه الأهداف و الأساليب من داخل الحلقات التكرارية : قارن بين الكودين التاليين : Sub Test1() Dim i As Integer With Sheets("Sheet1") For i = 2 To 100 .Cells(i, 1).Value = .Cells(1, 1).Value * i Next i End With End Sub Sub Test2() Dim i As Integer Dim MyNumber As Double With Sheets("Sheet1") MyNumber = .Cells(1, 1).Value For i = 2 To 100 .Cells(i, 1).Value = MyNumber * i Next i End With End Sub لاحظ أخي أننا في الكود الأول قمنا باستدعاء القيمة الموجودة داخل الخلية A1 باستخدام الجملة التالية : .Cells(1, 1).Value و قد اضطررنا إلى استدعاء نفس الأسلوب السابق (و بالتالي نفس القيمة) 99 مرة في الكود الأول ، وهذا طبعاً سيقلل من سرعة هذا الكود. لحل المشكلة السابقة قمنا في الكود الثاني بتعريف المتغير MyNumber و تخصيص القيمة الموجودة في الخلية A1 بداخله ، وبهذا فإننا لم نضطر للتعامل مع الهدف A1 بصورة مباشرة سوى مرة واحدة فقط ، واستبدلنا ذلك بالتعامل مع القيمة المخزنة داخل المتغير MyNumber ، وهذا بالطبع سيزيد من سرعة الكود . هذه حالة أخرى أكثر تعقيداً ، يمكنك التعرف عليها بصورة أدق عن طريق مراجعة الشرح الموجود في الملف المرفق : الكود الأول : Sub Test3() With Sheets("Sheet2") For Each MyCell In .Range("B2:B11").Cells If MyCell.Value > 90000 Then .Cells(MyCell.Row, 3).Value = .Cells(2, 8).Value * 0.3 .Cells(MyCell.Row, 4).Value = .Cells(3, 8).Value * 0.7 .Cells(MyCell.Row, 5).Value = .Cells(4, 8).Value * 0.85 ElseIf MyCell.Value > 60000 Then .Cells(MyCell.Row, 3).Value = .Cells(2, 8).Value * 0.25 .Cells(MyCell.Row, 4).Value = .Cells(3, 8).Value * 0.4 .Cells(MyCell.Row, 5).Value = .Cells(4, 8).Value * 0.65 Else .Cells(MyCell.Row, 3).Value = .Cells(2, 8).Value * 0.2 .Cells(MyCell.Row, 4).Value = .Cells(3, 8).Value * 0.3 .Cells(MyCell.Row, 5).Value = .Cells(4, 8).Value * 0.5 End If Next MyCell End With End Sub الكود الثاني (المعدل) : Sub Test4() With Sheets("Sheet2") Group1 = Array(.Cells(2, 8).Value * 0.2, .Cells(3, 8).Value * 0.3, .Cells(4, 8).Value * 0.5) Group2 = Array(.Cells(2, 8).Value * 0.25, .Cells(3, 8).Value * 0.4, .Cells(4, 8).Value * 0.65) Group3 = Array(.Cells(2, 8).Value * 0.3, .Cells(3, 8).Value * 0.7, .Cells(4, 8).Value * 0.85) For Each MyCell In .Range("B2:B11").Cells If MyCell.Value > 90000 Then .Range(Cells(MyCell.Row, 3), Cells(MyCell.Row, 5)).Value = Group3 ElseIf MyCell.Value > 60000 Then .Range(Cells(MyCell.Row, 3), Cells(MyCell.Row, 5)).Value = Group2 Else .Range(Cells(MyCell.Row, 3), Cells(MyCell.Row, 5)).Value = Group1 End If Next MyCell End With End Sub بالتوفيق Loops.zip -
ماكرو تحديث ورقة اكسل من الإنترنت
محمد حجازي replied to عبدالله السعيد's topic in منتدى الاكسيل Excel
السلام عليكم ... استخدم الكود التالي : Sub MyRefresh() Sheets("Sheet1").Range("A1:A10").QueryTable.Refresh BackgroundQuery:=False End Sub الكود السابق يقوم بتحديث البيانات المرتبطة بالجدول A1:A10 الموجود في الورقة Sheet1 . تحياتي -
السلام عليكم ... جرب الكود التالي : Private Sub Worksheet_Change(ByVal Target As Range) If Me.Cells(Target.Row, 2).Value > 0 Then Me.Columns("A:B").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom End If End Sub المشكلة السابقة كانت تكمن في تنشيط الهدف قبل فرزه ، راجع الرابط التالي : http://www.officena.net/ib/index.php?showtopic=5827 بالتوفيق
-
السلام عليكم ... بالنسبة للفاصلة العادية و الفاصلة المنقوطة ، فإن استخدام أحداهما في الصيغ يتبع لإعدادات نظام التشغيل الذي يعمل عليه الاكسل ، راجع الرابط التالي : http://www.officena.net/ib/index.php?showtopic=5119