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

ياسر خليل أبو البراء

المشرفين السابقين
  • Posts

    13,165
  • تاريخ الانضمام

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

  • Days Won

    411

مشاركات المكتوبه بواسطه ياسر خليل أبو البراء

  1. جرب الكود التالي لعله يفي بالغرض (ومن غير شريط تقدم هيكون سريع إن شاء الله)

    Sub Test()
        Dim ws      As Worksheet
        Dim sh      As Worksheet
        Dim arr     As Variant
        Dim temp    As Variant
        Dim i       As Long
        Dim j       As Long
        Dim p       As Long
        Dim sW      As Double
        Dim sM      As Double
        
        Set ws = Sheets("Data")
        Set sh = Sheets("Report")
    
        arr = ws.Range("B2").CurrentRegion.Value
        ReDim temp(1 To UBound(arr, 1), 1 To 2)
    
        For i = 2 To UBound(arr, 1)
            If arr(i, 2) <> "" Or arr(i, 3) <> "" Then
                p = p + 1
                temp(p, 1) = arr(i, 1)
                sW = sW + Val(arr(i, 2))
                sM = sM + Val(arr(i, 3))
                temp(p, 2) = sW - sM
            End If
        Next i
    
        With sh
            .Columns("E:F").ClearContents
            .Range("E3:F3").Value = Array("التاريخ", "الرصيد التراكمي")
            .Range("E4").Resize(p - 1, UBound(temp, 2)).Value = temp
        End With
    End Sub

     

    • Like 2
  2. الكود مشروح في الأساس من قبل أخونا ياسر العربي .. والإضافات في الكود بسيطة ولا تحتاج لشرح حيث تم الاستعانة بدالة معرفة لمعرفة آخر صف مستخدم في ورقة العمل ، ودالة أخرى لمعرفة آخر عمود مستخدم في ورقة العمل .. وعلى أساس معرفة رقم آخر صف وآخر عمود يتم المسح والنسخ ..

  3. أخي الكريم ناصر

    والله لقد قمت بشرح الكثير والكثير من الأكواد ولكن بلا فائدة وهذا لا يعني أنني يأست .. ولكن المشكلة أنه لا يوجد همة للتعلم

    معظم من يرتاد الموقع يريد أن يقضي طلبه وفقط ولا يريد التعلم ... والله المستعان

    ومن يريد التعلم سيبحث هنا وهناك وفي كل مكان حتى يصل للمعلومة .. وكما أخبرتك ما جاء سهلاً سيذهب سدىً

     

  4. جرب اعمل كليك يمين على زر الـ Spin ثم Assign Macro ... وحول الماكرو الموجود لماكرو عادي في موديول عادي

    امسح الماكرو الموجود في حدث ورقة العمل ، وضع الكود التالي في موديول .. واعمل كليك يمين Assign Macro واختر اسم الماكرو Test ... لربط الزر بتنفيذ الكود

    Sub Test()
        Dim s As Worksheet
        Dim t As Worksheet
        Dim v As Variant
        Dim r As Long
    
        Set s = Sheets("تسجيل البيانات")
        Set t = Sheets("الكشوف النهائية")
        v = t.Range("P1").Value
    
        If Not IsNumeric(v) Or IsEmpty(v) Or v > 4 Then t.Range("B14").Resize(6, 4).ClearContents: Exit Sub
        r = (v * 6) + 5
    
        t.Range("B14").Resize(6, 4).Value = s.Range("A" & r).Resize(6, 4).Value
    End Sub

     

  5. لم أفهم المشكلة للآن .. الكود يقوم بعملية المسح بداية من الصف رقم 8 وإلى آخر رقم صف .. ورقم الصف متغير من ورقة لأخرى ..

    حاول توضح المشكلة بالصور لكي أفهم أين الخلل؟؟!

    بعد الإطلاع على الملف .. وبشغل التخمين جرب السطر التالي .. ابحث عنه في الكود واستبدله بهذا السطر

    sh.Range("A8").Resize(Rows.Count - 7, lc).Clear

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

  6. في الملف المرفق الجديد أيضاً قم بتعديل نفس السطر

    If Intersect(Range("A1:D1"), Target) Is Nothing Then

    بصراحة المشكلة في إني مش بقدر افهم المطلوب بشكل كويس .. ولذلك يفضل وضع صورة بالمطلوب .. ضع المعطيات وشكل النتائج المتوقعة في صورة أفضل حتى يسهل التواصل فيما بيننا 

  7. أخي العزيز ناصر 

    جرب الكود التالي عله يفي بالغرض ... امسح الأكواد الموجودة في الموديولات لأن هناك كودين بنفس الاسم Test وهذا لا يجوز ..

    ضع الكود التالي في حدث الفورم بعد مسح الكود القديم ، والشكر موصول للأخ الغالي ياسر العربي صاحب الفكرة الرائعة

    Private Sub CommandButton1_Click()
        Dim ws      As Worksheet
        Dim sh      As Worksheet
        Dim lr      As Long
        Dim lc      As Long
        Dim c       As Long
        
        Set ws = Sheets("بيانات الطلبة")
        c = ws.Range("Q1").Value
        
        If TextBox1.Text = ws.Range("F1") Then
            Me.Hide
            TextBox1.Text = ""
            MsgBox "كلمة المرور صحيحة و سيتم تنفيذ المطلوب", 64
            
            Application.ScreenUpdating = False
            Application.Calculation = xlManual
                If ws.Range("Q1") < 2 Then
                    Exit Sub
                End If
                
                For Each sh In Sheets(Array("بيانات الطلبة", "إنجاز1", "تحريرى ف 1", "تحريرى ف 2", "أعمال السنة", "كشف الدور الثاني", "كشف ناجح"))
                    lr = IIf(LastOccupiedRowNum(sh) = 7, 7, LastOccupiedRowNum(sh))
                    lc = LastOccupiedColNum(sh)
                    
                    sh.Range("A8").Resize(lr + 7, lc).Clear
                    sh.Range("A7").Resize(1, lc).AutoFill Destination:=sh.Range("A7").Resize(c, lc)
                Next sh
                
                Application.Goto ws.Range("A1")
            Application.Calculation = xlAutomatic
            Application.ScreenUpdating = True
            Unload Me
        Else
            MsgBox "عفواً كلمة المرور خاطئه و لن يتم تنفيذ المطلوب", vbExclamation
            TextBox1.Text = ""
            TextBox1.SetFocus
        End If
    End Sub
    
    Public Function LastOccupiedRowNum(Sheet As Worksheet) As Long
        Dim lng As Long
        
        If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
            With Sheet
                lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
            End With
        Else
            lng = 1
        End If
        
        LastOccupiedRowNum = lng
    End Function
    
    Public Function LastOccupiedColNum(Sheet As Worksheet) As Long
        Dim lng As Long
        
        If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
            With Sheet
                lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
            End With
        Else
            lng = 1
        End If
        
        LastOccupiedColNum = lng
    End Function

     

  8. هل اطلعت على المشاركة السابقة والملف المرفق .. لأنك لم تعلق عليه ، حاول أن تتبع نفس الأسلوب

    في ورقة العمل "كنترول شيت" وورقة العمل "كنترول شيت (2)" وورقة العمل "رصد الترم الأول" وورقة العمل "Sheet1" ليسوا بنفس الهيكلة أي أن البيانات لا تبدأ من الصف السابع كبقية الأوراق . فهل هذه أوراق سيتم استثنائها؟

    ولما لا ترفق نموذج مصغر كالذي أرفقته ليسهل العمل عليه .. اطلع على المرفق أعلاه في المشاركة السابقة وفيه نفس الفكرة حيث يتم عمل حلقة تكرارية لأوراق العمل ثم يتم تحديد رقم آخر عمود بناءً على وجود متغير يتم مقارنته في كل مرة مع رقم آخر عمود بالورقة التي عليها الدور في الحلقة التكرارية

  9. أخي الكريم الموضوع بسيط

    اعمل كليك يمين على اسم ورقة العمل المسماة "الكشوف النهائية" .. واختر الأمر View Code .. وانسخ الكود من المشاركة (بس خلي اتجاه لغة الكتابة باللغة العربية عند النسخ) ، وبعدين روح للنافذة اللي اتفتحت والصق الكود وبس خلاص

    الكود هيتنفذ بمجر وضع رقم في الخلية P1 في ورقة "الكشوف النهائية" ..

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

    دعك من تحميل الملف

    المهم الكود .. استخدم الكود الموجود في الموضوع .. الملف ما هو إلا مثال تطبيقي على الكود

    Sub Create_PDF_Files_For_Each_Sheet()
        Dim Ws As Worksheet
        Dim Fname As String
        
        Application.ScreenUpdating = False
            For Each Ws In ActiveWorkbook.Worksheets
                On Error Resume Next
                Fname = ThisWorkbook.Path & "\Exported " & Ws.Name
                Ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fname, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
            Next Ws
        Application.ScreenUpdating = True
        
        MsgBox "Done...", 64
    End Sub

     

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

Important Information