Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как посчитать кол-во симолов в выделенном тексте, BuiltInDocumentProperties не походит 
V
    Опции темы
FiMa1
Дата 28.9.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Добрейшего времени суток, друзья!

У меня проблема такого рода: нужно получить количество символов выделенного текста с учетом пробелов.
Использую следующий код:
Код

    If Selection.Type <> wdSelectionIP Then ' ЕСЛИ что-то выделено
        ' ВСЕ РАВНО ВОЗВРАЩАЕТСЯ ЗНАЧЕНИЕ СИМВОЛОВ ДЛЯ ВСЕГО ДОКУМЕНТА
        num = Selection.Document.BuiltInDocumentProperties("Number of characters (with spaces)").Value
    Else ' ЕСЛИ ничего выделено не было
        ' получить количество символов с учетом пробелов для всего документа
        num = ActiveDocument.BuiltInDocumentProperties("Number of characters (with spaces)").Value
    End If

Приведенный код работает корректно при подсчете символов для всего документа, т.е. без выделения текста, но при выделении текста выдает тот же результат, что и для всего документа.
Еще один вот такой вариант:
Код

num = Selection.Characters.Count

выдает не верные значения при выделении текста в документе фрагментами.
Полагаю, есть какой-либо другой способ. Подскажите, пожалуйста, как правильнее это сделать?


Это сообщение отредактировал(а) FiMa1 - 2.10.2008, 08:59
PM   Вверх
Aloha
Дата 28.9.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



Знаков без пробелов:
Код
Selection.Range.ComputeStatistics(wdStatisticCharacters)

Знаков с пробелами:
Код
Selection.Range.ComputeStatistics(wdStatisticCharactersWithSpaces)


Ту же инфу можно получить с помощью панели "Статистика"

Это сообщение отредактировал(а) Aloha - 28.9.2008, 20:25
PM   Вверх
FiMa1
Дата 28.9.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Цитата(Aloha @ 28.9.2008,  20:21)
Знаков без пробелов:
Код
Selection.Range.ComputeStatistics(wdStatisticCharacters)

Знаков с пробелами:
Код
Selection.Range.ComputeStatistics(wdStatisticCharactersWithSpaces)

Ту же инфу можно получить с помощью панели "Статистика"

Aloha, огромное спасибо за помощь. Этот вариант как раз то, что мне было нужно.
Однако, к сожалению, он работает правильно только для сплошного выделения текста, в том же случае если выделены фрагменты в тексте (то есть при зажатой клавише 'Ctrl'), этот код вернет неверный результат.

Код

num = Selection.Range.ComputeStatistics(wdStatisticCharactersWithSpaces) ' num = 3 ВЕРНО

user posted image
Код

num = Selection.Range.ComputeStatistics(wdStatisticCharactersWithSpaces) ' num = 1 НЕ ВЕРНО!

user posted image
Код

num = Selection.Range.ComputeStatistics(wdStatisticCharactersWithSpaces) ' num = 2 НЕ ВЕРНО!

user posted image
С другой стороны 'Word Count' (Статистика) в таких случаях выводит правильные значения.

Это сообщение отредактировал(а) FiMa1 - 28.9.2008, 21:10
PM   Вверх
FiMa1
Дата 1.10.2008, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Короче говоря в интернете ответа по ходу нет, спросил на форуме мелкомягких - тоже молчание.
Мысль такая: так как физическое копирование для фрагментов выделенного текста работает нормально, то:
Код

Selection.Copy ' копируем выделенные фрагменты в ClipBoard
Set wrd = CreateObject("Word.Application")
wrd.Visible = False
wrd.Documents.Open "c:\temp\tmp.doc"
wrd.Documents.Add
' ЗДЕСЬ НУЖНО ВСТАВИТЬ СКОПИРОВАННЫЙ ТЕКСТ В РАБОЧИЙ ФАЙЛ wrd
' ЗДЕСЬ ПОЛУЧАЕМ КОЛИЧЕСТВО СИМВОЛОВ В РАБОЧЕМ ФАЙЛЕ wrd
wrd.Quit ' закрываем рабочий файл
Set wrd = Nothing ' очищаем память выделенную для него

Кто-нибудь может подсказать как вставить скопированное в созданный файл и получить количество символов в нем?
PM   Вверх
FiMa1
Дата 2.10.2008, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Короче придумал что-то вроде вот этого использовать в качестве Workaround:
Код

Dim MyData As DataObject
Dim str As String

Private Sub CommandButton1_Click()
    Selection.Copy
    MyData.GetFromClipboard
    str = MyData.GetText(1)
    num = Len(str)
End Sub

Private Sub UserForm_Initialize()
    Set MyData = New DataObject
End Sub

Еще одно решение (не мое), по поводу моего предыдущего поста:
Код

Call Selection.Copy
Let Application.ScreenUpdating = False

Dim oDoc As Document
Set oDoc = Application.Documents.Add(Visible:=False)
Call oDoc.Range.Paste

Dim nCharCount As Long
Let nCharCount = oDoc.Range.ComputeStatistics(wdStatisticCharactersWithSpaces)
Call MsgBox("nCharCount=" & nCharCount)

Call oDoc.Close(SaveChanges:=False)
Let Application.ScreenUpdating = True


Это сообщение отредактировал(а) FiMa1 - 2.10.2008, 16:29
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.