[ تمت الإجابة ]اريد تقسيم اسم كامل الى اسم اول واسم اخير
السلام عليكم
دائما حاول أرفاق مثالك .. أخي الكريم
الحل مش مشكلة لكن المشكلة أني لا أجد الوقت في إنشاء قاعدة
ثم جدول ثم بيانات .. هل من الممكن ارفاق مثالك وإن شاء الله خير
اكسيرالحياة
السلام عليكم ورحمة الله وبركاته ،،
تحية معطرة الى استاذنا الكبير أكسير الحياة
وتحية للأخ Micro0x0
لدي مثال لما طلبت قديم وهو يقوم بارجاع الكلمة الأولى أو الثانية أو حتى الأخيرة من الحقل باستخدام وظيفة Function
وطريقة استخدام الوظيفة هي كالآتي:
تقوم بكتابة الوظيفة ملحوقه بالعدد 1 وتعني الكلمة الاولى و2 تعني الكلمة الثانية الخ...
أو تقوم بكتابة -1 وتعني آخر كلمة -2 وتعني ثاني آخر كلمة الخ...
مثال اذا كان لدينا حقل اسمه txt وفيه الاسم التالي " أكسير الحياة"
ونريد ارجاع الكلمة الاولى
word([txt];1)
الناتج يكون
"أكسير"
طيب اذا قمنا بكتابة سالب 1
تكون النتيجة
"الحياة"
اتركك مع الكود والمرفق
Function Word(varPhrase As Variant, ByVal iWordNum As Integer, Optional strDelimiter As String = " ", _ Optional bRemoveLeadingDelimiters As Boolean, Optional bIgnoreDoubleDelimiters As Boolean) As Variant On Error GoTo Err_Handler Dim varArray As Variant Dim strPhrase As String Dim strResult As String Dim lngLen As Long Dim lngLenDelimiter As Long Dim bCancel As Boolean If IsError(varPhrase) Then bCancel = True Else strPhrase = Nz(varPhrase, vbNullString) If strPhrase = vbNullString Then bCancel = True End If End If If iWordNum = 0 And Not bCancel Then strResult = strPhrase bCancel = True End If If Not bCancel Then lngLenDelimiter = Len(strDelimiter) If lngLenDelimiter = 0& Then bCancel = True End If End If If Not bCancel Then strPhrase = varPhrase If bRemoveLeadingDelimiters Then strPhrase = Nz(varPhrase, vbNullString) Do While Left$(strPhrase, lngLenDelimiter) = strDelimiter strPhrase = Mid(strPhrase, lngLenDelimiter + 1&) Loop End If If bIgnoreDoubleDelimiters Then Do lngLen = Len(strPhrase) strPhrase = Replace(strPhrase, strDelimiter & strDelimiter, strDelimiter) Loop Until Len(strPhrase) = lngLen End If If Len(strPhrase) = 0& Then bCancel = True End If End If If Not bCancel Then varArray = Split(strPhrase, strDelimiter) If UBound(varArray) >= 0 Then If iWordNum > 0 Then iWordNum = iWordNum - 1 If iWordNum <= UBound(varArray) Then strResult = varArray(iWordNum) End If Else iWordNum = UBound(varArray) + iWordNum + 1 If iWordNum >= 0 Then strResult = varArray(iWordNum) End If End If End If End If If strResult <> vbNullString Then Word = strResult Else Word = Null End If Exit_Handler: Exit Function Err_Handler: Resume Exit_Handler End Function
أخوك مشكاة
تم تعديل هذه المشاركة بواسطة Mishkat ibrahim في 13 مايو 2008 في 02:48
السلام عليكم
بسم الله .. ماشاء الله .. تسلم أخي مشكاة
حل رائع .. ولا عطر ,, بعد عروس
أخي واستاذي الكبير / اكسير الحياة ..المحترم
أشكرك على تشجيعك وإن شاء الله أكون عند حسن ضن الطيبين و لا أنسى أبدا الأمثلة التي أخذتها منك وتعلمت منها الكثير
فلك مني خالص التحيات والتقدير..
أخوك مشكاة
الف شكر اخى مشكاه
وشكرا لمتابعتك اخى اكسير
اخوكم مصطفى
بسم الله الرحمن الرحيم
تمت الإجابة على الموضوع
إدارة الفريق العربي للبرمجة
مشكور يا استاذنا الغالي
والله خوش دالة مفيده جداً وهذه داله اخرى للارجاع عدد معين من الاحرف وصيغتها
Right(string, length)
left(string, length)
وكل واحده بالاتجاه المشار اليه بالترتيب حيث يمكن وضع [اسم الحقل ] في جزء ال String ومن ثم تحديد عدد الخطوات المطلوبة
ما شاء الله صراحة فكرة رائعة
كما أود أن أنبهكم لمشكلة لو وجدتم لها حل يكون أفضل
وهي مشكلة الأسماء المركبة أو الأسماء التي تتكون من جزئين مثل:
عبد الله - عبد الرحمن - عبد الكريم ... الخ
أعرف أنه يمكن حل هذه المشكلة بالصاق الجزئين مع بعضهما دون وضع مسافة لكن أحياناً نجد أسماء لا تنفع معها هذه الطريقة
ولو تم إيجاد حل يكون أفضل.
ويمكن الاستفادة من برنامج دليل الهاتف الموجود في برنامج الأوت لوك تبع مايكروسوفت
أتمنى أن أكون وفقت في تنبيهكم لنصل معاً إلى حلول فريدة ومميزة نخدم بها منتدانا الجميل
والله ولي التوفيق
باؤك الله فيك خيو مصطفي وجزالك الله كل خير