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

شرح كود للاستاذ عبدالله بشر


إذهب إلى أفضل إجابة Solved by عبدالله بشير عبدالله,

الردود الموصى بها

شرح 

هذه الفقره\

data = wsSource.Range(foundCell.Offset(0, 1), foundCell.Offset(0, 10)).Value

data = wsSource.Range(foundCell.Offset(0, 10), foundCell.Offset(0, 19)).Value

data = wsSource.Range(foundCell.Offset(0, 28), foundCell.Offset(0, 38)).Value

 

الموجودة في هذا الملف

شرح.xlsm

رابط هذا التعليق
شارك

  • أفضل إجابة

تفضل الشرح بالتفصيل الشرح استعنت بالذكاء الاصطناعي

الهدف من هذا الكود هو البحث عن اسم معين في ورقة عمل تسمى “السجل” وعند العثور عليه، نسخ مجموعة من البيانات المرتبطة بهذا الاسم إلى ورقة عمل أخرى تسمى “استدعاء”. إليك الخطوات الرئيسية التي يقوم بها الكود لتحقيق هذا الهدف:

  1. مراقبة التغييرات في الخلية B6 في ورقة “استدعاء”.
  2. البحث عن الاسم المدخل في الخلية B6 داخل العمود B في ورقة “السجل”.
  3. نسخ البيانات المرتبطة بالاسم الموجود في ورقة “السجل” إلى مواقع محددة في ورقة “استدعاء”.

إذا تم العثور على الاسم، يتم نسخ البيانات إلى الصفوف 9، 12، 15، و18 في ورقة “استدعاء”. إذا لم يتم العثور على الاسم، يتم عرض رسالة تفيد بأن الاسم غير موجود في السجل

 

       If Not foundCell Is Nothing Then

  1. هذا السطر يتحقق مما إذا كانت الخلية foundCell تحتوي على قيمة أم لا. إذا كانت foundCell تحتوي على قيمة، فهذا يعني أن الاسم الذي تم البحث عنه قد تم العثور عليه في العمود B في الورقة “السجل”. إذا لم يتم العثور على الاسم، فإن foundCell ستكون Nothing.

  2. نسخ البيانات إلى الصف 9:

    data = wsSource.Range(foundCell.Offset(0, 1), foundCell.Offset(0, 10)).Value
    wsTarget.Range("A9:I9").Value = data
    
    • foundCell.Offset(0, 1) تعني الانتقال من الخلية التي تم العثور عليها بمقدار عمود واحد إلى اليمين.
    • foundCell.Offset(0, 10) تعني الانتقال من الخلية التي تم العثور عليها بمقدار 10 أعمدة إلى اليمين.
    • يتم نسخ البيانات من العمود الثاني إلى العمود الحادي عشر في الصف الذي تم العثور فيه على الاسم إلى الصف 9 في الورقة “استدعاء”.
    • نسخ البيانات إلى الصف 12:

      data = wsSource.Range(foundCell.Offset(0, 10), foundCell.Offset(0, 19)).Value
      wsTarget.Range("A12:I12").Value = data
      
      • foundCell.Offset(0, 10) تعني الانتقال من الخلية التي تم العثور عليها بمقدار 10 أعمدة إلى اليمين.
      • foundCell.Offset(0, 19) تعني الانتقال من الخلية التي تم العثور عليها بمقدار 19 عمودًا إلى اليمين.
      • يتم نسخ البيانات من العمود الحادي عشر إلى العمود العشرين في الصف الذي تم العثور فيه على الاسم إلى الصف 12 في الورقة “استدعاء”.
      • نسخ البيانات إلى الصف 15:

        data = wsSource.Range(foundCell.Offset(0, 19), foundCell.Offset(0, 28)).Value
        wsTarget.Range("A15:I15").Value = data
        
        • foundCell.Offset(0, 19) تعني الانتقال من الخلية التي تم العثور عليها بمقدار 19 عمودًا إلى اليمين.
        • foundCell.Offset(0, 28) تعني الانتقال من الخلية التي تم العثور عليها بمقدار 28 عمودًا إلى اليمين.
        • يتم نسخ البيانات من العمود العشرين إلى العمود التاسع والعشرين في الصف الذي تم العثور فيه على الاسم إلى الصف 15 في الورقة “استدعاء”.
        • نسخ البيانات إلى الصف 18:

          data = wsSource.Range(foundCell.Offset(0, 28), foundCell.Offset(0, 38)).Value
          wsTarget.Range("A18:I18").Value = data
          
          • foundCell.Offset(0, 28) تعني الانتقال من الخلية التي تم العثور عليها بمقدار 28 عمودًا إلى اليمين.
          • foundCell.Offset(0, 38) تعني الانتقال من الخلية التي تم العثور عليها بمقدار 38 عمودًا إلى اليمين.
          • يتم نسخ البيانات من العمود التاسع والعشرين إلى العمود الثامن والثلاثين في الصف الذي تم العثور فيه على الاسم إلى الصف 18 في الورقة “استدعاء”.
          • إذا لم يتم العثور على الاسم:

            Else
                MsgBox "الاسم غير موجود في السجل."
            End If
            

            إذا لم يتم العثور على الاسم، يتم عرض رسالة تفيد بأن الاسم غير موجود في السجل

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

عبد إذن أخونا الفاضل @عبدالله بشير عبدالله

بطريقة مختصرة 

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$6" Then
        Application.ScreenUpdating = False
        
        Dim f As Worksheet, WS As Worksheet, search As String, tmp As Range, Lr As Long, i As Integer
        Set f = Sheets("السجل")
        Set WS = Sheets("استدعاء")
        
        search = WS.Range("B6").Value
        If search = "" Then Exit Sub
        Lr = f.Cells(f.Rows.Count, "B").End(xlUp).Row
        Set tmp = f.Range("B2:B" & Lr).Find(search, LookIn:=xlValues, LookAt:=xlWhole)
        
        If Not tmp Is Nothing Then
            For i = 0 To 3
                WS.Range("A" & 9 + i * 3 & ":I" & 9 + i * 3).Value = _
                f.Range(tmp.Offset(0, i * 9 + 1), tmp.Offset(0, (i + 1) * 9)).Value
            Next i
        Else
            MsgBox "الإسم غير موجود في السجل"
        End If
        Application.ScreenUpdating = True
    End If
End Sub

OR

If Not tmp Is Nothing Then
            For i = 1 To 4
             '(i - 1) * 9  لإزاحة النطاق المنسوخ 9 أعمدة في كل مرة
              '(i - 1) * 3  تحريك الصفوف بمقدار 3 صفوف في كل مرة
                WS.Range("A" & 9 + (i - 1) * 3 & ":I" & 9 + (i - 1) * 3).Value = _
                f.Range(tmp.Offset(0, (i - 1) * 9 + 1), tmp.Offset(0, i * 9)).Value
            Next i
      Else

 

تم تعديل بواسطه محمد هشام.
  • Like 2
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

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



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information