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

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

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

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

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

  • Days Won

    411

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

  1. السلام عليكم أخي الكريم

    بدايةً أهلاً بك في المنتدى ونورت بين إخوانك

    ثانياً عند طرح موضوع يجب إرفاق الملف في المنتدى وليس على رابط خارجي

    ثالثاُ الملف المرفق في الرابط الخارجي ملف محبط واعذرني لصراحتي .. حيث وجدت حجم الملف كبير جداً حوالي (11.7 ميجا) ، فاعتقدت في البداية أن هناك أوراق عمل أخرى أو أوراق عمل مخفية ، ولكني فوجئت بورقة عمل واحدة فقلت لابد أن هناك صفوف أو أعمدة مخفية وبها بيانات ولكن وجدت فقط النطاق المستخدم  إلى الصف رقم 21 ...

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

    المهم قم بوضع الكود التالي في حدث الفورم وجرب بنفسك 

    Private Sub CommandButton1_Click()
        Dim ws      As Worksheet
        Dim xf      As Variant
        Dim lr      As Integer
    
        Set ws = Sheets("ss")
        If Me.TextBox1.Value = "" Then MsgBox "Please Enter Name": Exit Sub
        If Me.TextBox2.Value = "" Then MsgBox "Please Enter Salary": Exit Sub
        If Me.ComboBox1.Value = "" Then MsgBox "Please Enter Statement": Exit Sub
    
        xf = Application.Match(ComboBox1.Value, ws.Rows(1), 0)
    
        If IsNumeric(xf) Then
            lr = ws.Cells(21, xf).End(xlUp).Row
            If lr = 2 Then MsgBox "This Is The Last Row", vbExclamation: Exit Sub
    
            ws.Cells(lr + 1, xf).Value = TextBox1.Value
            ws.Cells(lr + 1, xf + 1).Value = TextBox2.Value
            
            Call Reset_UserForm_Controls
        End If
    End Sub
    
    Private Sub CommandButton2_Click()
        Unload Me
    End Sub
    
    Sub Reset_UserForm_Controls()
        Dim c       As Control
    
        For Each c In Me.Controls
            Select Case TypeName(c)
                Case "TextBox"
                    c.Text = vbNullString
                Case "ListBox", "ComboBox"
                    c.ListIndex = -1
            End Select
        Next c
        TextBox1.SetFocus
    End Sub

     

    • Thanks 1
  2. وعليكم السلام

    جرب الكود التالي عله يفي بالغرض

    Sub Test()
        Dim ws          As Worksheet
        Dim sh          As Worksheet
        Dim arr         As Variant
        Dim temp        As Variant
        Dim x           As Variant
        Dim i           As Long
        Dim j           As Long
        Dim k           As Long
        
        Set ws = Sheets("البيانات")
        Set sh = Sheets("الخلاصة")
        arr = sh.Range("A2:A" & sh.Cells(Rows.Count, 1).End(xlUp).Row).Value
        ReDim temp(1 To UBound(arr, 1), 1 To 1)
        k = -1
        
        Application.ScreenUpdating = False
            For i = LBound(arr, 1) To UBound(arr, 1)
                k = k + 1
                x = Application.Match(CStr(arr(i, 1)), ws.Columns(8), 0)
                If IsNumeric(x) Then
                    For j = 18 To 29
                        If ws.Cells(i, 18) = "" Then GoTo Skipper
                        If ws.Cells(i, j) = "" Then temp(k, 1) = ws.Cells(i, j - 1): GoTo Skipper
                    Next j
                Else
                    temp(k, 1) = ""
                End If
    Skipper:
            Next i
        
            sh.Range("E2").Resize(k, UBound(temp, 2)).Value = temp
        Application.ScreenUpdating = True
    End Sub

     

    • Like 1
  3. تستخدم IIF لاختبار شرط زي IF لكن مختصرة في شرط واحد .. لو تحقق يعمل كذا ولو لم يتحقق يعمل كذا ..

    بالنسبة للدالة المعرفة تقوم بمعرفة رقم آخر صف أو رقم آخر عمود .. حيث قمت بدمج الدالتين المعرفتين في دالة معرفة واحدة .. فإذا أردت معرفة رقم الصف تكتب في البارامتر الثاني حرف الـ R ، وإذا أردت معرفة رقم آخر عمود تكتب الحرف C
    المهم في السطر الكود بيشوف رقم آخر صف فلو كان رقم آخر صف يساوي 9 .. إذاً المتغير المسمى lr هيساوي 9

    أما إذا كان لا يساوي 9 يتحقق الجزء الثاني من الشرط حيث تقوم الدالة المعرفة باحتساب رقم آخر صف

    والمتغير sh يشير لورقة العمل المطلوب استخراج رقم آخر صف منها ، وهذا المتغير بدوره متغير لأنه يعمل على مصفوفة من أوراق العمل

    أرجو أن تكون الصورة قد اتضحت الآن

    • Like 2
  4. أعتذر أخي الكريم عن عدم الشرح فليس لدي من الوقت ما يكفي لذلك ... ربما يتقدم أحد الأخوة ويقوم بالشرح

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

  5. جربوا الكود التالي عله يفي بالغرض 

    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
        
                For Each sh In Sheets(Array("بيانات الطلبة", "إنجاز1", "تحريرى ف 1", "تحريرى ف 2", "أعمال السنة", "كشف ناجح", "الحاله", "كنترول شيت", "رصد الترم الثانى", "كنترول شيت (2)", "رصد الترم الأول", "كشف الدور الثاني"))
                    lr = IIf(LastRowColumn(sh, "R") = 9, 9, LastRowColumn(sh, "R"))
                    lc = LastRowColumn(sh, "C")
                    sh.Range("A" & lr).Resize(1, lc).AutoFill Destination:=sh.Range("A" & lr).Resize(c + 1, 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
    
    Function LastRowColumn(ws As Worksheet, rc As String) As Long
        Dim lng As Long
    
        If Application.WorksheetFunction.CountA(ws.Cells) <> 0 Then
            With ws
                If UCase(rc) = "R" Then
                    lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
                ElseIf UCase(rc) = "C" Then
                    lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
                End If
            End With
        Else
            lng = 1
        End If
    
        LastRowColumn = lng
    End Function

     

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

Important Information