Доброго всем времени суток. Сам поиск и замена вопросов не вызывают. Есть один ньюанс. Например, имеется ячейка с текстом, слова имеют различное форматирование (шрифт, подчеркивания и т.д.). Если найти пробел (или неразрывный пробел), а потом заменить его опять же на пробел, то вся строка будет отформатирована в формат первого слова То есть, имеется ячейка с текстом "Пример текста" если заменить пробел на пробел то получим "Пример текста" , что очень не желательно.. Как с этим бороться? Такая фигня что при ручном поиске, что через макрос. Хочу использовать макрос для замены неразрывных пробелов на обычные, а тут такое.... Раньше заменял неразрывные пробелы через редактор сценариев. но теперь надо все автоматизировть. сразу попутный вопрос, можно ли через VBA получить доступ к редактору сценариев? Заменять копированием в ворд и обратно не желательно. Простенький пример по ссылке http://narod.ru/disk/16722184001/Vopr.xls.html (для простоты заменял обычные пробелы на них же - суть та же)
Доброго всем времени суток. Сам поиск и замена вопросов не вызывают. Есть один ньюанс. Например, имеется ячейка с текстом, слова имеют различное форматирование (шрифт, подчеркивания и т.д.). Если найти пробел (или неразрывный пробел), а потом заменить его опять же на пробел, то вся строка будет отформатирована в формат первого слова То есть, имеется ячейка с текстом "Пример текста" если заменить пробел на пробел то получим "Пример текста" , что очень не желательно.. Как с этим бороться? Такая фигня что при ручном поиске, что через макрос. Хочу использовать макрос для замены неразрывных пробелов на обычные, а тут такое.... Раньше заменял неразрывные пробелы через редактор сценариев. но теперь надо все автоматизировть. сразу попутный вопрос, можно ли через VBA получить доступ к редактору сценариев? Заменять копированием в ворд и обратно не желательно. Простенький пример по ссылке http://narod.ru/disk/16722184001/Vopr.xls.html (для простоты заменял обычные пробелы на них же - суть та же)Гость
Здорово придумал, Серёга. Только надо будет попробовать не отдельно параметры полужирный и курсив для каждого символа запоминать, а целиком объекты Font в коллекцию или словарь запихивать. Вдруг получится? Тогда можно будет вообще все параметры восстанавливать. Завтра поковыряюсь.
Здорово придумал, Серёга. Только надо будет попробовать не отдельно параметры полужирный и курсив для каждого символа запоминать, а целиком объекты Font в коллекцию или словарь запихивать. Вдруг получится? Тогда можно будет вообще все параметры восстанавливать. Завтра поковыряюсь.Alex_ST
Гость, Уважаемый KuklP, спасибо за ответ. Но это решение частного случая, т.е. если первое слово имеет шрифт Arial, 10 кегль, курсивный, полужирный..... вариантов форматирования может быть тысячи - все зависит от фантазии ушлых пользователей, что учесть будет тяжеловато. А хотелось бы универсальную "отмычку" или иной способ замены или, как вариант, доступ к редактору сценариев и поиск и замена в xml формате - гарантированно без косяков. p.s. файл не выложил, потому что "Незарегестрированные пользователи не могут прикладывать файлы к сообщению" из п. 3 Правил данного форума .
Гость, Уважаемый KuklP, спасибо за ответ. Но это решение частного случая, т.е. если первое слово имеет шрифт Arial, 10 кегль, курсивный, полужирный..... вариантов форматирования может быть тысячи - все зависит от фантазии ушлых пользователей, что учесть будет тяжеловато. А хотелось бы универсальную "отмычку" или иной способ замены или, как вариант, доступ к редактору сценариев и поиск и замена в xml формате - гарантированно без косяков. p.s. файл не выложил, потому что "Незарегестрированные пользователи не могут прикладывать файлы к сообщению" из п. 3 Правил данного форума .Гость
Вот я про то и говорил: чтобы восстановить ВСЕ свойства шрифта каждого символа нужно для каждого из символов запоминать в коллекции или словаре целиком объект Font этого символа. По идее каждый Item в Dictionary или Collection вполне может быть и объектом. Поэтому сохранить набор объектов Font для каждого символа стринга скорее всего удастся без проблем. Пока, правда, не знаю, удастся ли восстановить обратно... Завтра попробую. Хотя... Всё-таки возникают сомнения по поводу запоминания объекта Font целиком. Ведь объект задаётся через Set, т.е. сохраняется не сам объект, а ссылка на него. Но тогда можно будет по принципу Сергея запоминать, но не 2 параметра, а параметры объекта Font : Background, Bold, Color, ColorIndex, Creator, FontStyle, Italic, Name, OutlineFont, Parent, Shadow, Size, Strikethrough, Subscript, Superscript, Underline Да и то, наверное, достаточно будет не все параметры, а только основные. В общем, завтра я этот вопрос покручу со всех сторон.
Вот я про то и говорил: чтобы восстановить ВСЕ свойства шрифта каждого символа нужно для каждого из символов запоминать в коллекции или словаре целиком объект Font этого символа. По идее каждый Item в Dictionary или Collection вполне может быть и объектом. Поэтому сохранить набор объектов Font для каждого символа стринга скорее всего удастся без проблем. Пока, правда, не знаю, удастся ли восстановить обратно... Завтра попробую. Хотя... Всё-таки возникают сомнения по поводу запоминания объекта Font целиком. Ведь объект задаётся через Set, т.е. сохраняется не сам объект, а ссылка на него. Но тогда можно будет по принципу Сергея запоминать, но не 2 параметра, а параметры объекта Font : Background, Bold, Color, ColorIndex, Creator, FontStyle, Italic, Name, OutlineFont, Parent, Shadow, Size, Strikethrough, Subscript, Superscript, Underline Да и то, наверное, достаточно будет не все параметры, а только основные. В общем, завтра я этот вопрос покручу со всех сторон.Alex_ST
В общем без разницы, сколько параметров фонта проверять. Я выложил решение исходя из примера. Можете принимать его как одно из направлений, в котором рыть. А можете и не принимать Ну смотрите еще вариант с изменением в HTML. @ добавлено для наглядности.
В общем без разницы, сколько параметров фонта проверять. Я выложил решение исходя из примера. Можете принимать его как одно из направлений, в котором рыть. А можете и не принимать Ну смотрите еще вариант с изменением в HTML. @ добавлено для наглядности.KuklP
Сейчас покручу твой первый макрос. Не могу понять, какие из параметров объекта Font нужно запоминать и восстанавливать: Background - это что? Цвет подложки под символом что ли (типа фломастера в Ворде)? А разве это возможно в ячейке? Bold - это НУЖНО Color - а это цвет чего? ColorIndex - цвет шрифта? Creator - пока не разбирался, но скорее всего не нужно FontStyle - пока не разбирался, но скорее всего не нужно Italic - это НУЖНО Name - это НУЖНО OutlineFont - это НУЖНО Parent - это что? Shadow - это что? А разве это возможно в ячейке? Size - это НУЖНО Strikethrough - это НУЖНО Subscript - это НУЖНО Superscript - это НУЖНО Underline - это НУЖНО
Сейчас покручу твой первый макрос. Не могу понять, какие из параметров объекта Font нужно запоминать и восстанавливать: Background - это что? Цвет подложки под символом что ли (типа фломастера в Ворде)? А разве это возможно в ячейке? Bold - это НУЖНО Color - а это цвет чего? ColorIndex - цвет шрифта? Creator - пока не разбирался, но скорее всего не нужно FontStyle - пока не разбирался, но скорее всего не нужно Italic - это НУЖНО Name - это НУЖНО OutlineFont - это НУЖНО Parent - это что? Shadow - это что? А разве это возможно в ячейке? Size - это НУЖНО Strikethrough - это НУЖНО Subscript - это НУЖНО Superscript - это НУЖНО Underline - это НУЖНОAlex_ST
Ну, по поводу Color и ColorIndex это понятно, но ColorIndex'ов всего 56, а Color'ов, кажется, много больше? Значит, неверное, лучше запоминать Color А вот по поводу Shadow, так этого, вроде, нет. А что такое FontStyle ?
Ну, по поводу Color и ColorIndex это понятно, но ColorIndex'ов всего 56, а Color'ов, кажется, много больше? Значит, неверное, лучше запоминать Color А вот по поводу Shadow, так этого, вроде, нет. А что такое FontStyle ?Alex_ST
FontStyle это курсив, обычный и т.д. Раз мы запоминаем в массив значения поотдельности, то он не нужен. Shadow - это тень от символа, если глаза позволяют разглядеть ее - используй.
Quote (Alex_ST)
но ColorIndex'ов всего 56
а Экс больше и не отразит в ячейке. Попробуй поиграться с RGB - выведет только все те же 56.
FontStyle это курсив, обычный и т.д. Раз мы запоминаем в массив значения поотдельности, то он не нужен. Shadow - это тень от символа, если глаза позволяют разглядеть ее - используй.
Quote (Alex_ST)
но ColorIndex'ов всего 56
а Экс больше и не отразит в ячейке. Попробуй поиграться с RGB - выведет только все те же 56.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Четверг, 23.06.2011, 09:44
Ну, вот, хоть и коряво получилось (мне не нравится тупо по одному запоминать и восстанавливать свойства символов, но использовать словари и цикл не удалось ), но я-таки доделал обещанный вчера примерчик. Тестируйте.
Ну, вот, хоть и коряво получилось (мне не нравится тупо по одному запоминать и восстанавливать свойства символов, но использовать словари и цикл не удалось ), но я-таки доделал обещанный вчера примерчик. Тестируйте.Alex_ST
А мой старенький, но надёжный 2003-й поддерживает! Так что ложечка эта не мне.
Да и использование HTML - это не моё решение, а Сергея - KuklP. Я же писАл уже выше, что я в этом ни бум-бум. Да и использовать этот способ я не собираюсь - весь лист это как-то уж слишком!
Вот другой вопрос мне парит мозг: как научиться аналогично применять Application.Trim так, чтобы форматы текста внутри ячеек не сползали?
А мой старенький, но надёжный 2003-й поддерживает! Так что ложечка эта не мне.
Да и использование HTML - это не моё решение, а Сергея - KuklP. Я же писАл уже выше, что я в этом ни бум-бум. Да и использовать этот способ я не собираюсь - весь лист это как-то уж слишком!
Вот другой вопрос мне парит мозг: как научиться аналогично применять Application.Trim так, чтобы форматы текста внутри ячеек не сползали?Alex_ST
Sub Replace_Chr160_in_Sheet() With ActiveWorkbook.HTMLProject.HTMLProjectItems("Test") .Text = Replace(.Text, " ", Chr(32)) End With ActiveWorkbook.HTMLProject.RefreshDocument End Sub
[/vba] Ну выше 2003 не тестировал, вообще на коленке писал:)
Леш, так короче: [vba]
Код
Sub Replace_Chr160_in_Sheet() With ActiveWorkbook.HTMLProject.HTMLProjectItems("Test") .Text = Replace(.Text, " ", Chr(32)) End With ActiveWorkbook.HTMLProject.RefreshDocument End Sub
[/vba] Ну выше 2003 не тестировал, вообще на коленке писал:)KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Четверг, 23.06.2011, 16:49
Ну, не нравятся мне строки с перечислением параметров... Не красиво. Да и ошибиться в порядке перечисления легко (что, к стати у меня и было сначала: долго не мог найти, почему так шрифт хитро корячит после обработки). А циклом не получается. Да и фиг с ним. Ведь требования заказчика, кажется, полностью удовлетворены.
А вот с Application.Trim надо будет голову поломать. Ведь там количество символов меняется и так просто уже формат не восстановишь.
Ну, не нравятся мне строки с перечислением параметров... Не красиво. Да и ошибиться в порядке перечисления легко (что, к стати у меня и было сначала: долго не мог найти, почему так шрифт хитро корячит после обработки). А циклом не получается. Да и фиг с ним. Ведь требования заказчика, кажется, полностью удовлетворены.
А вот с Application.Trim надо будет голову поломать. Ведь там количество символов меняется и так просто уже формат не восстановишь.Alex_ST
Спасибо всем большое! Вариантов решения - на любой вкус)) Особый респект KuklP за вариант с HTML, попробую дальше эту тему развить для других задач...
Спасибо всем большое! Вариантов решения - на любой вкус)) Особый респект KuklP за вариант с HTML, попробую дальше эту тему развить для других задач...Гость