В теме у соседей http://www.excelworld.ru/forum/2-44912-1 Слепилось вот такое , но на основе Word c этим связана и проблема, вызов долгий, а если после первого вызова держать объект Word открытым, то не понятно как и когда закрывать его. В целом аргумент - слово , возвращает от 0 до 9 и -1 если совсем запутали.
Скрытый текст
Код
Function GetPartsOfSpeech(strWord As String, Optional LanguageId As Integer) As Integer
'https://docs.microsoft.com/en-us/previous-versions/office/developer/office-xp/aa209839(v=office.10)?redirectedfrom=MSDN
'Const wdAdjective = 0 'Прилагательное
'Const wdNoun = 1 'Существительное
'Const wdAdverb = 2 'Наречие
'Const wdVerb = 3 'Глагол
'Const wdPronoun = 4 'Местоимение
'Const wdConjunction = 5 'Союз
'Const wdPreposition = 6 'Предлог
'Const wdInterjection = 7 'Междометие
'Const wdIdiom = 8 'Идиома
'Const wdOther = 9 'Прочее
Dim myPos As Variant
If LanguageId = 0 Then
LanguageId = Application.LanguageSettings.LanguageId(msoLanguageIDExeMode)
End If
Set ObjWord = CreateObject("Word.Application")
Set SynInfo = ObjWord.SynonymInfo(Word:=strWord, LanguageId:=LanguageId)
If SynInfo.MeaningCount <> 0 Then
For Each myPos In SynInfo.PartOfSpeechList
GetPartsOfSpeech = myPos
Exit For
Next
Else
GetPartsOfSpeech = -1
End If
ObjWord.Quit
Set ObjWord = Nothing
End Function
Как говорится, любая оптимизация привествуется, а еще есть ссылка на самостоятельную функцию но её нужно переписать на VBA.