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

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

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

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

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

  • Days Won

    411

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

  1. السلام عليكم نبدأ بها 

    جرب الكود التالي

    Sub Test()
        Dim ws As Worksheet, sh As Worksheet, sTarget As String, lr As Long, m As Long, iRow As Long
        Application.ScreenUpdating = False
        Set ws = ThisWorkbook.Worksheets("اذن")
        lr = ws.Cells(Rows.Count, 1).End(xlUp).Row
        If lr < 6 Then MsgBox "No Data", vbExclamation: Exit Sub
        Select Case ws.Range("C2").Value
            Case "اذن صرف": sTarget = "صرف"
            Case "اذن اضافه": sTarget = "اضافه"
            Case Else: MsgBox "No Such Worksheet", vbExclamation: Exit Sub
        End Select
        Set sh = ThisWorkbook.Worksheets(sTarget)
        m = sh.Cells(Rows.Count, "B").End(xlUp).Row + 1
        For iRow = 6 To lr
            sh.Range("A" & m).Resize(, 6).Value = Array(sh.Range("A" & m).Row - 2, ws.Range("E2").Value, ws.Range("C4").Value, ws.Range("C3").Value, ws.Cells(iRow, 1).Value, ws.Cells(iRow, 2).Value)
            sh.Range("I" & m).Value = ws.Cells(iRow, 4).Value
            If sh.Name = "اضافه" Then
                sh.Range("J" & m).Value = ws.Cells(iRow, 5).Value
            End If
            m = m + 1
        Next iRow
        Application.ScreenUpdating = True
        MsgBox "Done", 64
    End Sub

     

    • Like 2
    • Thanks 1
  2. ولتجنب استخدام جملة On Error Resume Next يمكن تعديل الكود بهذا الشكل

    Sub Test2()
        Dim ws As Worksheet
        Application.ScreenUpdating = False
            For Each ws In ThisWorkbook.Worksheets
                With ws
                    If .AutoFilterMode Then
                        .AutoFilterMode = False
                        If .FilterMode = True Then .ShowAllData
                    End If
                End With
            Next ws
        Application.ScreenUpdating = True
    End Sub

     

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

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

    Sub Test()
        Dim ws As Worksheet
        Application.ScreenUpdating = False
            For Each ws In ThisWorkbook.Worksheets
                If ws.AutoFilterMode Then
                    On Error Resume Next
                        ws.ShowAllData
                    On Error GoTo 0
                End If
            Next ws
        Application.ScreenUpdating = True
    End Sub

     

    • Like 1
  4. وعليكم السلام أخي الكريم

    أدرج موديول جديد وضع الدالة المعرفة التالية في الموديول

    Function xDupsV(fCol As Range, Optional offsetCol As Integer = -1)
        Dim a, r1 As Range, r2 As Range, c As Range, cc As Range, i As Long, j As Long
        Application.Volatile True
        Set r1 = fCol
        Set r2 = r1.Offset(, offsetCol)
        ReDim a(1 To 1)
        For Each c In r1
            Set cc = c.Offset(, offsetCol)
            If Not IsEmpty(c) And cc > 0 Then
                For j = 1 To cc
                    i = i + 1
                    ReDim Preserve a(1 To i)
                    a(i) = c
                Next j
            End If
        Next c
        xDupsV = WorksheetFunction.Transpose(a)
    End Function

    ثم في الخلية C11 ضع المعادلة بهذا الشكل

    =xdupsv(F3:F6)

    لا تنسى أن تقوم بمسح النطاق C11 إلى آخر النطاق قبل وضع المعادلة

    • Like 2
  5. وعليكم السلام

    جرب الكود التالي

    Private Sub UserForm_Initialize()
        Dim fso As Object, oFolder As Object, sPath As String, i As Long
        sPath = "D:\"
        Set fso = CreateObject("Scripting.FileSystemObject")
        UserForm1.ListBox1.Clear
        If fso.FolderExists(sPath) Then
            Set oFolder = fso.GetFolder(sPath)
            For Each oFolder In oFolder.SubFolders
                If Left(oFolder.Name, 1) <> "$" Then
                    i = i + 1
                    UserForm1.ListBox1.AddItem oFolder.Name
                End If
            Next oFolder
        End If
        Set fso = Nothing
    End Sub

     

    • Like 4
    • Thanks 1
  6. السلام عليكم ورحمة الله وبركاته

    إخواني وأحبابي في الله
    أقدم لكم الملف التالي وهو ببساطة ملف يتم فيه تسجيل الغياب اليومي بشكل سهل ومرن ، ومن خلاله يمكنك الحصول على تقارير لأيام الغياب لأي أسبوع وهو مفيد لشئون الطلبة ومسئولي الحكومة الإلكترونية في التعامل مع خدمة تسجيل الغياب الأسبوعي.
    وسأترك الشرح بالتفصيل للأخ العزيز / عماد غازي ، وإليكم رابط الفيديو
     

     

     

    الخطوة الأولي: فك الضغط عن الملف المضغوط ستجد ملف باسم Dummy.xlsx هذا الملف يتم وضع بيانات المدرسة فيه (كود الطالب - اسم الطالب - الصف - الفصل)
    والملف الثاني ملف برنامج السجل الالكتروني قم بفتحه ونفذ الأمر GETDATA مرة واحدة فقط عند أول استخدام للبرنامج ، بحيث يتم إضافة بيانات الطلاب في البرنامج ، والأمر موجود في شريط الوصول السريع على شكل جرس.
    أكرر هذا الأمر يقوم بمسح البيانات في البرنامج من قاعدة البيانات DB بالكامل ، لذا وجب التنبيه أن هذا الأمر يتم تنفيذه مرة واحدة فقط عند استخدام البرنامج لأول مرة.
     

    Kc9ac_01

     

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

    ** في انتظار إضافاتكم ومقترحاتكم واستفساراتكم حول كيفية استخدام البرنامج أو الإبلاغ عن أي خطأ لكي يتم معالجته إن شاء الله


    تم تحديث الملف المرفق بتاريخ 6 أكتوبر 2023 الساعة 06:00 مساءاً

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

     

    أخوكم في الله / ياسر خليل أبو البراء

     

    رابط الموضوع الأصلي من هنا

    https://techno7asry.com/forum/t6265

     

    • Like 5
  7. وعليكم السلام

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

    • Like 1
    • Thanks 2
  8. حاول تتبع الكود سطر بسطر وأشر لي على السطر الذي يحتاج لشرح وتوضيح لأني لا أملك الوقت الكافي للشرح.

    أو انتظر أحد الأخوة يقدم لك شرح ولو مبسط
    عموماً السطر الذي يهمك أعتق هذا السطر

    dic.Add sName, Array(c.Offset(0, 1).Value, c.Offset(0, 2).Value, c.Offset(0, 3).Value)

    حيث يتم تخزين القيم المطلوب التعامل معها في مصفوفة أحادية الأبعاد .. للخلايا التي تلي خلية الاسم في الأعمدة التالية لها مباشرة حيث تم استخدام الدالة Offset وهي دالة الإزاحة وتختلف الإزاحة في كل مرة حسب مكان العمود ..

    • Like 2
  9. وعليكم السلام أخي الكريم

    قم بتغيير اسم الملف المسمى بيانات العاملين 21-9-2023 إلى Employees DB أو قم بتغيير الاسم في الكود (كما يحلو لك)

    ضع الكود التالي في الملف المسمى الإدارة العامة

    Sub Test()
        Dim a, wb As Workbook, ws As Worksheet, sh As Worksheet, c As Range, dic As Object, sName As String, lr As Long
        Application.ScreenUpdating = False
            Set dic = CreateObject("Scripting.Dictionary")
            Set wb = Workbooks.Open(ThisWorkbook.Path & "\Employees DB.xls")
            Set ws = wb.Worksheets(1)
            Set sh = ThisWorkbook.ActiveSheet
            For Each c In ws.Range("C6:C" & ws.Cells(Rows.Count, "C").End(xlUp).Row)
                sName = c.Value
                If Not dic.Exists(sName) And sName <> Empty Then
                    dic.Add sName, Array(c.Offset(0, 1).Value, c.Offset(0, 2).Value, c.Offset(0, 3).Value)
                End If
            Next c
            wb.Close SaveChanges:=False
            lr = sh.Cells(Rows.Count, "B").End(xlUp).Row
            sh.Range("E3:G" & lr).ClearContents
            For Each c In sh.Range("B3:B" & lr)
                sName = c.Value
                If dic.Exists(sName) Then
                    a = dic(sName)
                    c.Offset(, 3).Resize(, 3).Value = a
                End If
            Next c
        Application.ScreenUpdating = True
    End Sub

     

    • Like 3
    • Thanks 1
  10. جرب الكود التالي عله يفي بالغرض بإذن الله

    Sub Test()
        Dim x, ws As Worksheet, lr As Long, i As Long, j As Long, startSeq As Long, endSeq As Long
        Application.ScreenUpdating = False
            Set ws = ThisWorkbook.Worksheets(1)
            lr = ws.Cells(ws.Rows.Count, "L").End(xlUp).Row
            ws.Range("A2:A" & lr).ClearContents
            For i = 2 To lr
                j = 0
                x = Application.Match(ws.Cells(i, "L").Value, ws.Columns("T"), 0)
                If Not IsError(x) Then
                    startSeq = ws.Cells(x, "U").Value
                    endSeq = ws.Cells(x, "V").Value
                    Do
                        j = j + 1
                        ws.Cells(i + j - 1, "A").Value = startSeq
                        If startSeq > endSeq Then ws.Cells(i + j - 1, "A").Value = Empty
                        startSeq = startSeq + 1
                    Loop Until ws.Cells(i, "L").Value <> ws.Cells(i + j, "L").Value
                    i = i + j - 1
                End If
            Next i
        Application.ScreenUpdating = True
    End Sub

    إذا قمت بحذف صفوف من البيانات سيلزمك تنفيذ الكود من جديد لضبط التسلسل

    • Like 4
  11. وعليكم السلام أخي الكريم ياسر

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

    تم الاعتماد على العمود R في الورقة الثانية لتسجيل اسم Check Box الذي تم ترحيله تفادياً لترحيله مرة أخرى .. يمكنك إخفاء العمود أو إخفاء القيم في العمود R

    Sub Test()
        Dim x, ws As Worksheet, sh As Worksheet, chkBox As CheckBox, r As Long, m As Long, cnt As Long
        Application.ScreenUpdating = False
            Set ws = ThisWorkbook.Sheets(1)
            Set sh = ThisWorkbook.Sheets(2)
            For r = 3 To ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
                Set chkBox = ws.Shapes("Check Box " & r - 2).OLEFormat.Object
                x = Application.Match(chkBox.Name, sh.Columns("R"), 0)
                If IsError(x) Then
                    If chkBox.Value = 1 Then
                        m = sh.Cells(Rows.Count, 1).End(xlUp).Row + 1
                        sh.Range("A" & m).Resize(, 17).Value = ws.Range("A" & r).Resize(, 17).Value
                        sh.Range("R" & m).Value = chkBox.Name
                        cnt = cnt + 1
                    End If
                End If
            Next r
        Application.ScreenUpdating = True
        If cnt > 0 Then MsgBox "Total = " & cnt, 64 Else MsgBox "Nothing Transferred", vbExclamation
    End Sub

     

    • Like 3
×
×
  • اضف...

Important Information