مشاركة عبر


كيفية القيام بما يلي: البحث عن نص في نطاقات ورقة العمل.

ينطبق على

تنطبق المعلومات الموجودة في هذا الموضوع فقط على أنواع المشاريع وإصدارات Microsoft Office التالية: لمزيد من المعلومات، راجع الميزات المتوفرة بواسطة تطبيقات Office و نوع المشروع.

نوع المشروع

  • مشروعات على مستوى المستند

  • مشروعات على مستوى التطبيق

إصدار Microsoft Office

  • Excel 2007

  • Excel 2010

إن أسلوب Find للكائن Microsoft.Office.Interop.Excel.Range يمكّنك من البحث عن نص داخل النطاق. أيضاً يمكن أن يكون هذا النص أي من سلاسل الخطأ التي يمكن أن تظهر في خلية ورقة العمل مثل #NULL! أو #VALUE!. لمزيد من المعلومات حول سلاسل الخطأ راجع قيم الخطأ بالخلية .

يبحث المثال التالي على نطاق يسمى Fruits و يعدل الخط للخلايا التي تحتوي على الكلمة "apples". يستخدم هذا الإجراء أيضاً الأسلوب FindNext الذي يستخدم إعدادات البحث المعينة مسبقاً لتكرار البحث. تقوم بتحديد الخلية التي سيقوم بالبحث بعدها، ثم سيقوم الاسلوب FindNext بمعالجة الباقي.

ملاحظة

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

ارتباط إلى فيديو للحصول على عرض فيديو توضيحي ذي صلة، راجع كيف يمكنني القيام بما يلي: استخدام أسلوب البحث في الوظيفة الاضافية لExcel ؟.

للبحث عن نص في نطاق ورقة العمل.

  1. قم بالتصريح بالمتغيرات لتعقب النطاق بأكمله، النطاق المعثور عليه أولاً و النطاق المعثور عليه حالياً.

    Dim currentFind As Excel.Range = Nothing
    Dim firstFind As Excel.Range = Nothing
    
    Excel.Range currentFind = null; 
    Excel.Range firstFind = null; 
    
  2. ابحث عن التطابق الأول، الذى يحدد كافة المعلمات فيما عدا الخلية المراد البحث فيها فيما بعد.

    currentFind = Fruits.Find("apples", , _
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
    
    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing); 
    
  3. تابع البحث طالما أن هناك تطابقات.

    While Not currentFind Is Nothing
    
    while(currentFind != null) 
    
  4. قارن النطاق المعثور عليه أولاً ( firstFind) بـ Nothing. إذا كان firstFind لا يحتوي على أية قيمة، ستقوم التعليمات البرمجية بتخزين النطاق المعثور عليه ( currentFind) جانباً.

    If firstFind Is Nothing Then
        firstFind = currentFind
    
    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. اخرج من الحلقة إذا تطابق عنوان النطاق المعثور عليه مع عنوان النطاق الأول المعثور عليه.

    ElseIf currentFind.Address = firstFind.Address Then
        Exit While
    End If
    
    else if (currentFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)
          == firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing))
    {
        break;
    }
    
  6. قم بتعيين مظهر النطاق المعثور عليه.

    With currentFind.Font
        .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
        .Bold = True
    End With
    
    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true; 
    
  7. قم بإجراء بحث آخر.

    currentFind = Fruits.FindNext(currentFind)
    
    currentFind = Fruits.FindNext(currentFind); 
    

يوضح المثال التالي الأسلوب الكامل.

مثال

Private Sub DemoFind()
    Dim currentFind As Excel.Range = Nothing
    Dim firstFind As Excel.Range = Nothing

    Dim Fruits As Excel.Range = Me.Application.Range("A1", "B2")
    ' You should specify all these parameters every time you call this method, 
    ' since they can be overridden in the user interface.
    currentFind = Fruits.Find("apples", , _
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)

    While Not currentFind Is Nothing

        ' Keep track of the first range you find.
        If firstFind Is Nothing Then
            firstFind = currentFind

        ' If you didn't move to a new range, you are done.
        ElseIf currentFind.Address = firstFind.Address Then
            Exit While
        End If

        With currentFind.Font
            .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
            .Bold = True
        End With

        currentFind = Fruits.FindNext(currentFind)
    End While
End Sub
private void DemoFind() 
{
    Excel.Range currentFind = null; 
    Excel.Range firstFind = null; 

    Excel.Range Fruits = Application.get_Range("A1", "B3");
    // You should specify all these parameters every time you call this method,
    // since they can be overridden in the user interface. 
    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing); 

    while(currentFind != null) 
    { 
        // Keep track of the first range you find. 
        if (firstFind == null)
        {
            firstFind = currentFind; 
        }

        // If you didn't move to a new range, you are done.
        else if (currentFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing)
              == firstFind.get_Address(missing, missing, Excel.XlReferenceStyle.xlA1, missing, missing))
        {
            break;
        }

        currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
        currentFind.Font.Bold = true; 

        currentFind = Fruits.FindNext(currentFind); 
    }
}

راجع أيضًا:

المهام

كيفية القيام بما يلي: تطبيق أنماط إلى نطاقات في مصنفات

كيفية القيام بما يلي: الإشارة إلى نطاقات ورقة العمل في التعليمات البرمجية

المبادئ

العمل مع النطاقات

المعلمات الاختيارية في حلول Office