اذهب الي المحتوي
أوفيسنا

Saleh Ahmed Rabie

02 الأعضاء
  • Posts

    96
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    3

مشاركات المكتوبه بواسطه Saleh Ahmed Rabie

  1. ```vba
    Private Sub PrintInvoiceAndClearData()

        ' طباعة الفاتورة
        ActiveSheet.PrintOut

        ' مسح البيانات
        Range("A1:Z100").ClearContents

    End Sub
    ```

    سيقوم هذا الكود بطباعة الورقة النشطة ثم مسح محتويات الخلايا من A1:Z100.

    لاستخدام هذا الكود، يمكنك إنشاء زر على ورقة العمل وتعيين الكود أعلاه لحدث `OnClick` للزر. عند النقر فوق الزر، سيتم طباعة الفاتورة ومسح البيانات.

    فيما يلي مثال على كيفية تعيين الكود لزر:

    1. انقر بزر الماوس الأيمن على ورقة العمل وحدد "إدراج" > "زر".
    2. سيتم إدراج زر على ورقة العمل.
    3. انقر بزر الماوس الأيمن فوق الزر وحدد "تعيين ماكرو".
    4. في مربع الحوار "تعيين ماكرو"، حدد ماكرو `PrintInvoiceAndClearData` وانقر فوق "موافق".

    الآن، عند النقر فوق الزر، سيتم طباعة الفاتورة ومسح البيانات.

    أتمنى أن يساعدك هذا! 😊

     

  2. **السلام عليكم ورحمة الله وبركاته**

    **إليك معادلة لإظهار الوقت والتاريخ بمجرد كتابة رقم المرسى مع شرط كتابة الاسم في خانة الملاحظات قبل الانتقال إلى الصف التالي:**

    ```
    =IF(NOT(ISBLANK(A2)),IF(A2="","",NOW()),"")
    ```

    **حيث:**

    * A2: خلية رقم المرسى
    * NOW(): دالة لإرجاع الوقت والتاريخ الحاليين

    **طريقة الاستخدام:**

    1. انسخ المعادلة والصقها في خلية الملاحظات (أو أي خلية أخرى تريد عرض الوقت والتاريخ فيها).
    2. تأكد من كتابة رقم المرسى في خلية A2.
    3. تأكد من كتابة الاسم في خانة الملاحظات قبل الانتقال إلى الصف التالي.

    **مثال:**

    | رقم المرسى | الاسم | الملاحظات |
    |---|---|---|
    | 12345 | أحمد | |
    | 67890 | محمد | |
    | | علي | 12:00 PM |

    **ملاحظة:**

    سيظهر الوقت والتاريخ في خلية الملاحظات بمجرد كتابة رقم المرسى في خلية A2. إذا تم ترك خلية رقم المرسى فارغة، فلن يتم عرض الوقت والتاريخ.

  3. وعليكم السلام ورحمة الله وبركاته

    **لتعديل الماكرو الموجود بالملف:**

    1. افتح ملف الإكسيل الذي يحتوي على الماكرو.
    2. انتقل إلى علامة التبويب "المطور" (Developer).
    3. انقر على زر "Visual Basic" (أو اضغط على Alt + F11).
    4. في نافذة محرر Visual Basic، انقر على الماكرو "استدعاء بيانات المادة" في الجزء الأيسر.
    5. قم بتعديل السطر التالي في كود الماكرو:

    Range("G2").Value = "17"

    إلى:

    Range("G2").Value = InputBox("أدخل رقم المادة:")

    6. قم بتعديل السطر التالي في كود الماكرو:

    Sheets("data").Range("A2:B" & LastRow).Find(What:=Range("G2").Value, LookIn:=xlValues, LookAt:=xlPart).Offset(0, 1).Value

    إلى:

    Sheets("data").Range("A2:B" & LastRow).Find(What:=Range("G2").Value, LookIn:=xlValues, LookAt:=xlPart).Offset(0, 2).Value

    7. احفظ التغييرات وأغلق نافذة محرر Visual Basic.

    **لاستخدام الماكرو المعدل:**

    1. حدد الخلية G2 في ورقة العمل التي تحتوي على الماكرو.
    2. أدخل رقم المادة التي تريد استدعاء بياناتها.
    3. اضغط على مفتاح "Enter".
    4. سيتم جلب اسم المادة ورصيدها من ورقة العمل "data" وعرضها في الخلايا المقابلة في ورقة العمل الحالية.
    5. سيتم أيضًا نقل جميع الغرف التي تحتوي على أرقام من السطر 4 في ورقة العمل الحالية إلى الأعمدة C11 وE11 في ورقة العمل "form3".

    **ملاحظة:**

    * يمكنك تعديل السطر 

    
    LastRow = Sheets("data").Cells(Rows.Count, 1).End(xlUp).Row


    ` في كود الماكرو لتحديد نطاق البحث في ورقة العمل "data".
    * إذا لم يتم العثور على المادة المحددة في ورقة العمل "data"، فسيتم عرض رسالة خطأ.

  4. **كود VBA لترحيل البيانات من ليست بوكس في اليوزر فورم إلى شيت إكسيل:**`````

    Private Sub CommandButton1_Click()
        Dim ws As Worksheet
        Dim i As Long
    
        Set ws = ThisWorkbook.Worksheets("Sheet1")
    
        For i = 0 To Me.ListBox1.ListCount - 1
            ws.Cells(i + 1, 1).Value = Me.ListBox1.List(i, 0)
            ws.Cells(i + 1, 2).Value = Me.ListBox1.List(i, 1)
        Next i
    End Sub

    **كود VBA لترحيل البيانات من ليست بوكس في اليوزر فورم إلى ملف PDF:**```

    
    Private Sub CommandButton2_Click()
        Dim pdf As Object
        Dim i As Long
    
        Set pdf = CreateObject("AcroExch.PDDoc")
        pdf.Open "C:\Path\To\Your.pdf"
    
        For i = 0 To Me.ListBox1.ListCount - 1
            pdf.Page(1).CreateTextField(i + 1, 100, 100, 100, 100)
            pdf.Page(1).Fields(i + 1).Value = Me.ListBox1.List(i, 0)
        Next i
    
        pdf.Save
        pdf.Close
    End Sub


    **كود VBA لإنشاء ملف جديد في مجلد العمل:**

    Private Sub CommandButton3_Click()
        Dim wb As Workbook
    
        Set wb = Workbooks.Add
        wb.SaveAs "C:\Path\To\NewWorkbook.xlsx"
    End Sub

    **ملاحظة:**

    * تأكد من استبدال المسارات في أكواد VBA بالمسارات الصحيحة للملفات الخاصة بك.
    * يمكنك أيضًا تخصيص أكواد VBA لتناسب احتياجاتك الخاصة.

     

  5. **الإجابة:**

    يمكنك تعديل الكود الخاص بك كما يلي:

    
    Dim dat, dat_bon As Date
    Dim X As Integer
    Dim v As Integer
    Dim Uf As Integer
    Dim i As Long
    Dim J As Long
    Set fa = Sheets("Stock")
    With Feuil1
    Uf = fa.Range("A" & Rows.Count).End(xlUp).Row
    For i = 0 To ListBox1.ListCount - 1
    For J = 2 To Uf
    If .Cells(J, 1) = Val(ListBox1.List(i, 0)) And .Cells(J, 5) = ComboBox1 Then
          If Me.OptionButton1 = True Or Me.OptionButton2 = True Then
            dat_bon = .Cells(J, 9)
            If dat_bon < dat Then
            dat_bon = dat
            End If  
          End If
    End If
    Next J
    Next i
    For i = 0 To ListBox1.ListCount - 1
    For J = 2 To Uf
    If .Cells(J, 1) = Val(ListBox1.List(i, 0)) And .Cells(J, 5) = ComboBox1 And .Cells(J, 9) = dat_bon Then
          If Me.OptionButton1 = True Then
            .Cells(J, 4) = .Cells(J, 4) + Val(ListBox1.List(i, 3))
            .Cells(J, 6) = .Cells(J, 6) - Val(ListBox1.List(i, 3))
             If (Cells(J, 4).value) = 0 Then
                Cells(J, 4).EntireRow.Delete
                            
            End If
          ElseIf Me.OptionButton2 = True Then
            .Cells(J, 4) = .Cells(J, 4) - Val(ListBox1.List(i, 3))
            .Cells(J, 7) = .Cells(J, 7) + Val(ListBox1.List(i, 3))
             If (Cells(J, 4).value) = 0 Then
                Cells(J, 4).EntireRow.Delete
             
            End If
          End If
     End If
    Next J
    Next i
    End With

    **ملاحظة:**

    * هذا التعديل سيقوم بدمج الخلية 4 مع الخلية 5 إذا كان اسم المخزن غير مكرر في ورقة العمل "Stock".
    * إذا كان اسم المخزن مكررًا، فسيتم حذف الخلية 4 بالكامل.

     

  6. **وعليكم السلام ورحمة الله وبركاته**

    **إليك المعادلة المطلوبة للتنسيق الشرطي:**

    ```
    =COUNTIF($B$1:$B$5,A1)>0
    ```

    **كيفية عمل المعادلة:**

    * تقوم دالة `COUNTIF` بحساب عدد المرات التي تظهر فيها قيمة الخلية `A1` في النطاق `$B$1:$B$5`.
    * إذا كانت النتيجة أكبر من 0، فهذا يعني أن قيمة الخلية `A1` موجودة في النطاق `$B$1:$B$5`.
    * في هذه الحالة، سيتم تنسيق الخلية `A1` وفقًا لقاعدة التنسيق الشرطي التي تم تعيينها.

    **مثال على الاستخدام:**

    في المثال الذي قدمته، يمكنك استخدام المعادلة التالية في التنسيق الشرطي للخلية `A1`:

    ```
    =COUNTIF($B$1:$B$5,A1)>0
    ```

    إذا تم تلوين الخلية `A1` باللون الأحمر عند تلبية هذا الشرط، فستتمكن من معرفة الخلايا التي لم يتم جمعها بعد بنظرة واحدة على الألوان.

    **ملاحظة:**

    * تأكد من استبدال النطاق `$B$1:$B$5` بالنطاق الفعلي الذي يحتوي على قيم المجموع.
    * يمكنك تخصيص قاعدة التنسيق الشرطي لتلوين الخلية بأي لون تريده.

     

  7. **إليك كود VBA لإكمال المهمة المطلوبة:**

    Sub CopyColumnToAnotherSheet()
        Dim wsSource As Worksheet, wsDestination As Worksheet
        Dim rngSource As Range, rngDestination As Range
        Dim i As Integer, j As Integer
        ' تعيين أوراق العمل المصدر والوجهة
        Set wsSource = ThisWorkbook.Worksheets("الحجم الساعي اليومي")
        Set wsDestination = ThisWorkbook.Worksheets("نسبة الغياب")
        ' تحديد نطاق العمود في ورقة العمل المصدر
        Set rngSource = wsSource.Range("A:A")
        ' تحديد نطاق العمود في ورقة العمل الوجهة
        Set rngDestination = wsDestination.Range("A:A")
        ' نسخ البيانات من ورقة العمل المصدر إلى ورقة العمل الوجهة
        For i = 1 To rngSource.Rows.Count
            For j = 1 To rngSource.Columns.Count
                If rngSource.Cells(i, j).Interior.Color <> RGB(255, 255, 0) Then
                    rngDestination.Cells(i, j).Value = rngSource.Cells(i, j).Value
                End If
            Next j
        Next i
        ' إظهار رسالة تأكيد
        MsgBox "تم نسخ البيانات بنجاح."
    End Sub

    **شرح الكود:**

    * يحدد الكود ورقتي العمل المصدر والوجهة.
    * يحدد نطاق العمود في ورقة العمل المصدر.
    * يحدد نطاق العمود في ورقة العمل الوجهة.
    * ينسخ الكود البيانات من ورقة العمل المصدر إلى ورقة العمل الوجهة، مع تخطي الخلايا الملونة باللون الأصفر (RGB(255, 255, 0)).
    * يعرض الكود رسالة تأكيد عند اكتمال النسخ.

    **ملاحظة:**

    * يجب أن تكون ورقتا العمل "الحجم الساعي اليومي" و"نسبة الغياب" في نفس المصنف.
    * إذا كنت تريد نسخ البيانات إلى أعمدة مختلفة في ورقة العمل الوجهة، فقم بتعديل نطاق rngDestination

    وفقًا لذلك.

     

  8. **وعليكم السلام ورحمة الله وبركاته**

    **إليك كيفية طباعة الصفحات التي تحتوي على بيانات فقط في Excel:**

    **الخطوات:**

    1. **حدد نطاق البيانات:** حدد جميع الخلايا التي تحتوي على البيانات التي تريد طباعتها.
    2. **انتقل إلى "ملف":** انقر فوق علامة التبويب "ملف" في الزاوية العلوية اليسرى.
    3. **اختر "طباعة":** انقر فوق خيار "طباعة" في القائمة الموجودة على الجانب الأيسر.
    4. **حدد "إعدادات":** انقر فوق الزر "إعدادات" الموجود في الجزء العلوي الأيمن من نافذة الطباعة.
    5. **تبويب "الصفحة":** انقر فوق علامة التبويب "الصفحة" في نافذة "إعدادات الطباعة".
    6. **إلغاء تحديد "طباعة الصفحات الفارغة":** قم بإلغاء تحديد مربع الاختيار "طباعة الصفحات الفارغة".
    7. **انقر فوق "موافق":** انقر فوق الزر "موافق" لحفظ الإعدادات.
    8. **طباعة:** انقر فوق الزر "طباعة" لطباعة النطاق المحدد من البيانات فقط.

    **الكود:**

    يمكنك أيضًا استخدام الكود التالي لطباعة الصفحات التي تحتوي على بيانات فقط:

     

    Sub PrintDataOnly()
        'حدد نطاق البيانات
        Range("A1:D10").Select
        'إعدادات الطباعة
        With ActiveSheet.PageSetup
            .PrintArea = Range("A1:D10").Address
            .PrintComments = False
            .PrintEmptyRows = False
            .PrintEmptyColumns = False
        End With
        'طباعة النطاق المحدد
        ActiveSheet.PrintOut
    End Sub

     

    **ملاحظة:**

    * سيؤدي هذا الكود إلى طباعة نطاق البيانات المحدد "A1:D10" فقط.
    * يمكنك تعديل نطاق البيانات في الكود وفقًا لاحتياجاتك.

    • Thanks 1
×
×
  • اضف...

Important Information