2016-04-01 3 views
0

Я немного борюсь с CheckSpelling в Excel. У меня есть объединенная ячейка, которую я хочу проверить, но только эта ячейка. Вот что я делаю.excel checkspelling single cell

ActiveSheet.Unprotect strSheetPassword 
Application.DisplayAlerts = False 
Set ma = Range("B21").MergeArea 
ma.MergeCells = False 
Union(Range("B1"), ma(1, 1)).CheckSpelling 
ma.MergeCells = True 
Application.DisplayAlerts = True 
ActiveSheet.Protect strSheetPassword 

Это проверка ячейки, которую я хочу, но она также проверяет остальную часть документа. При чтении других сообщений у меня создалось впечатление, что проверка одной ячейки заставляет CheckSpelling проверять весь документ. Вот почему я ввел Союз с диапазоном («B1») - B1 содержит текст заголовка, который не имеет орфографических ошибок и обычно заблокирован, поэтому пользователи не могут его изменить. Но он все еще проверяет остальную часть листа! Я пробовал довольно много вариаций, но он все еще проверяет остальную часть листа.

ЗАКЛЮЧЕНИЕ У меня создалось впечатление, что можно было вызвать форму CheckSpelling и проверить ее только на определенные ячейки. По-видимому, это не так. Вместо того, чтобы строить свою собственную форму, я должен уйти, проверяя весь лист каждый раз, хотя мне это действительно не нравится. Спасибо всем за отзывы!

+0

вы пытались не разъединить их? или вы знаете, в какой ячейке текст после размораживания? Каков ваш результат в этой строке: Union (Range («A1»), Range («B21»). CheckSpelling –

+0

Да. Когда я это делаю, он проверяет все остальное на листе, кроме ячейки, которую я хочу (B1) –

+0

A1 - пустая ячейка, так что вы хотите проверить b1? Тогда вы должны иметь возможность сделать трюк с помощью Union (Range («A1»), Range («B1»). CheckSpelling с несмытыми ячейками –

ответ

0

Для одной объединенной ячейки:

Sub spell_me() 
    Dim b As Boolean 
    b = Application.CheckSpelling(Word:=ActiveCell.Text) 
    MsgBox b & vbCrLf & ActiveCell.Address & vbCrLf & ActiveCell.Text 
End Sub 

enter image description here

EDIT # 1:

Чтобы найти негодяя слово, вы могли бы Split() текст на отдельные слова и проверить каждое слово.

+0

Я пробовал это на новом чистом листе. Попробуйте изменить строку 'b = ...' к следующему: 'If Application.CheckSpelling (Word: = ActiveCell.Text) = False Затем ActiveCell.CheckSpelling End If', и вы увидите, что H11 также исправлен. –

+1

@ChuckShultz Конечно ..... .... ......... любой * Range(). CheckSpelling * проверяет весь лист .............. поэтому мой код проверяет только текст ** одной ячейки ** ............ сливается или не сливается. –

+1

yes gary's right, что вы хотите делать с проверенным заклинанием? Выделите неправильную часть? –

0

Если это достаточно, если неправильная часть подсвечивается вы можете использовать это:

Sub SpellCheck() 
Dim response As Boolean 
Dim words As Variant 
Dim wordCount As Long 
Dim startAt As Long 

words = Split(ActiveCell.Text, " ") 
'set all of the text to automatic color 
ActiveCell.Font.ColorIndex = xlAutomatic 
For wordCount = LBound(words) To UBound(words) 
response = Application.CheckSpelling(word:=words(wordCount)) 
If Not response Then 
    'find out where it is in the text and color the font red 
    startAt = InStr(ActiveCell.Text & " ", words(wordCount) & " ") 
    ActiveCell.Characters(Start:=startAt, Length:=Len(words(wordCount))).Font.Color = vbRed 
End If 
Next 
End Sub 
+0

Это хорошо, но если пользователь должен был исправить оскорбительное слово, он все равно останется красным (если только они не удаляют слово и не перепечатывают его). –

+0

да, но просто еще в цикле исправить это –