<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: проверка орфографии через Word.Application]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=91&amp;type=atom" />
	<updated>2007-12-12T07:00:29Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=91</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: проверка орфографии через Word.Application]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=6930#p6930" />
			<content type="html"><![CDATA[<p>Поскольку Application.Selection может меняться в процессе проверки, скрипт выше может приводить иногда к неожиданным результатам. Улучшенный вариант скрипта от <strong>alexii</strong>, без использования Application.Selection.<br /></p><div class="codebox"><pre><code>&#039; Скопируйте нижеследующий текст в буфер обмена для проверки работы скрипта:
&#039; У папа была сабака, он её любыл, она зъела кусок мяса, он иё убыл.
&#039;
&#039; Если Вы соглашались на такие же замены при проверке орфографии, как и я,
&#039; то получите в буфере обмена нижеследующий результат:
&#039; У папа была собака, он её любил, она съела кусок мяса, он ее убыл.
&#039;
&#039; Обратите внимание, что «папа» и «убыл» считаются правильными с точки зрения орфографии
&#039; и к замене, при проверке, не предлагаются.

Option Explicit

Const wdPasteText = 2
Const wdDoNotSaveChanges = 0

Dim objWord
Dim objDoc

Dim intErrorCode

intErrorCode = 0

Set objWord = WScript.CreateObject(&quot;Word.Application&quot;)
Set objDoc = objWord.Documents.Add

With objDoc
    On Error Resume Next
    
    .Range.PasteSpecial 0, False, 0 ,False, wdPasteText
    
    If Err.Number = 0 Then
        On Error Goto 0
        
        If Not objWord.CheckSpelling(.Range.Text) Then
            .CheckSpelling
            .Range.Copy
        End If
    Else
        intErrorCode = 1
        WScript.Echo &quot;В буфере обмена отсутствуют поддерживаемые форматы данных&quot;
    End If
    
    .Close wdDoNotSaveChanges
End With

objWord.Quit wdDoNotSaveChanges

Set objDoc = Nothing
Set objWord = Nothing

WScript.Quit intErrorCode</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2007-12-12T07:00:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=6930#p6930</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: проверка орфографии через Word.Application]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=235#p235" />
			<content type="html"><![CDATA[<p>Скрипт проверяет орфографию текста, находящегося в буфере обмена. Исправленный текст после проверки копируется туда же. Для работы скрипта необходим установленный MS Word.<br /></p><div class="codebox"><pre><code>On Error Resume Next
Set oWD = WScript.CreateObject(&quot;Word.Application&quot;)
oWD.Visible = False
oWD.Documents.Add
oWD.Selection.Paste
If Err.number &lt;&gt; 0 Then
    MsgBox &quot;Буфер обмена пуст!&quot;
    oWD.ActiveDocument.Close wdDoNotSaveChanges
    oWD.Quit
    Set oWD = Nothing
    Set oWD = Nothing
    WScript.Quit
End If
Set RangeOriginal = oWD.ActiveDocument.Range(0, oWD.Selection.End)
If oWD.CheckSpelling(RangeOriginal) = False Then
    oWD.ActiveDocument.CheckSpelling
    Set RangeCorrected = oWD.ActiveDocument.Range(0, oWD.Selection.End)
    RangeCorrected.copy
    If RangeCorrected.Words.Count &gt; 7 Then
        Cnt = RangeCorrected.Words.Count
        Status = &quot;Текст, начинающийся с: &quot; &amp; _
        RangeCorrected.Words.Item(1) &amp; &quot; &quot; &amp; RangeCorrected.Words.Item(2) &amp; &quot; &quot; &amp; _
        RangeCorrected.Words.Item(3) &amp; &quot;.....&quot; &amp; vbCRLF &amp; &quot;и заканчивающийся: .....&quot; &amp; _
        RangeCorrected.Words.Item (Cnt - 2) &amp; &quot; &quot; &amp; RangeCorrected.Words.Item(Cnt - 1) &amp; _
        &quot; &quot; &amp; RangeCorrected.Words.Item(Cnt) &amp; vbCRLF &amp; &quot;проверен. &quot; &amp; _
        &quot;Исправленный текст скопирован в буфер обмена.&quot;
    Else
        Status = &quot;&lt;&lt; &quot; &amp; RangeCorrected &amp; &quot; &gt;&gt;&quot; &amp; vbCRLF &amp; &quot;был проверен.&quot; &amp; _
        &quot; Исправленный текст скопирован в буфер обмена.&quot;
    End If 
Else
    Status = &quot;Проверка завершена. Текст не содержит ошибок.&quot;
End If
oWD.ActiveDocument.Close wdDoNotSaveChanges
oWD.Quit
Set oWD = Nothing
MsgBox Status</code></pre></div><p>Скрипт опубликовал <strong>tubudum</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2006-08-04T10:28:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=235#p235</id>
		</entry>
</feed>
