بالاستفادة من فكرة الأستاذ موسى،
دالة لتعطيك مخرج نعم/لا للاسم الذي يحتوي على عدد الأجزاء المطلوبة، ولا داعي لطرح واحد من عدد الأجزاء:
Option Explicit
Function NamePartsCounter(ByVal sName As String, ByVal Parts As Byte) As Boolean
Parts = Parts - 1
sName = Trim(sName)
Do While InStr(1, sName, " ") > 0
sName = Replace(sName, " ", " ")
Loop
NamePartsCounter = Parts = (Len(sName) - Len(Replace(sName, " ", "")))
'If NamePartsCounter Then Debug.Print sName
End Function
'إجراء لفحص الدالة
Sub test()
Debug.Print NamePartsCounter("عبدالله أحمد علي", 3)
End Sub
وأنصح في تخزين الأسماء باستخدام الـ "أندرسكور" بدلا من المسافة ، وعند العرض يتم معالجة الأسماء بتديل الأندرسكور بالمسافة باستخدام دالة Replace