|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе |
|
||||
|
|
2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе
|
|
Старожил Сообщения: 329 |
Всем доброго вечера.
Есть интересная задача. Нужно выделить часть текста в ячейке которая запрашивается у пользователя. Как себе это вижу я: 1) спрашиваем шаблон и цвет у юзера 2) присваиваем переменной и считаем длину (дальше пригодится) 3)цикл поиска на присутствие в ячейках шаблона(не в пустых ячейках) 4)считаем какой по счету символ начинается шаблон в найденой ячейке 5)дальше выполняем окрашивание в цвет(красный) (это есть в макрорекодере) |
|
|
Отправлено: 15:25, 17-05-2016 |
|
Динохромный Сообщения: 712
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
|
|
|
------- Отправлено: 15:50, 17-05-2016 | #2 |
|
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать a_axe, часть текста поддерживается?
он красит всю ячейку, а надо только то что ищется. Только шаблон.а он может где угодно находиться в тексте ячейки. |
|
------- Последний раз редактировалось blackeangel, 17-05-2016 в 16:29. Отправлено: 16:23, 17-05-2016 | #3 |
|
Динохромный Сообщения: 712
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Приложите файл, который будет содержать примеры текста, соответствующие шаблоны поиска и желаемый результат. |
|
|
------- Отправлено: 17:05, 17-05-2016 | #4 |
|
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать a_axe, пример
|
|
|
------- Последний раз редактировалось blackeangel, 03-04-2017 в 22:53. Отправлено: 22:10, 17-05-2016 | #5 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, интересные Вы там шаблоны ищете
.Примерно так: Скрытый текст
Option Explicit
Sub Sample()
Dim strFindWhat As String
Dim strFirstFoundAddress As String
Dim objRange As Range
Dim intFoundPosition As Integer
strFindWhat = "ол"
With ThisWorkbook.Worksheets.Item("Данные").UsedRange
Set objRange = .Find( _
What:=strFindWhat, _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False _
)
If Not objRange Is Nothing Then
strFirstFoundAddress = objRange.Address
Do
intFoundPosition = InStr(1, objRange.Value, strFindWhat, vbTextCompare)
Do While intFoundPosition > 0
objRange.Characters(intFoundPosition, Len(strFindWhat)).Font.Color = RGB(255, 0, 0)
intFoundPosition = InStr(intFoundPosition + 1, objRange.Value, strFindWhat, vbTextCompare)
Loop
Set objRange = .FindNext(After:=objRange)
Loop Until objRange.Address = strFirstFoundAddress
End If
End With
End Sub
Естественно, вместо UsedRange Вы используете потребный Вам диапазон. |
|
Отправлено: 04:41, 18-05-2016 | #6 |
|
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, спасибо, отлично работает. Только вопрос, а на больших объемах данных долго думать будет?
Ну и не хватает Цитата blackeangel:
|
|
|
------- Отправлено: 22:14, 18-05-2016 | #7 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Цитата blackeangel:
|
|||
|
Отправлено: 05:43, 19-05-2016 | #8 |
|
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, спасибо, так и сделал. Еще сделал запрос цвета для выделения.
Sub colorr()
Dim strFindWhat As String
Dim strFirstFoundAddress As String
Dim objRange As Range
Dim intFoundPosition As Integer
strFindWhat = InputBox("Введите что подкрасить")
sFontColorAsk = InputBox("Введите один из цветов: " _
& Chr(13) & "черный, красный, зеленый, желтый," _
& Chr(13) & "синий, пурпурный, циан, белый")
If sFontColorAsk = "черный" Or sFontColorAsk = "Черный" Then sFontColor = vbBlack
If sFontColorAsk = "красный" Or sFontColorAsk = "Красный" Then sFontColor = vbRed
If sFontColorAsk = "зеленый" Or sFontColorAsk = "Зеленый" Then sFontColor = vbGreen
If sFontColorAsk = "желтый" Or sFontColorAsk = "Желтый" Then sFontColor = vbYellow
If sFontColorAsk = "синий" Or sFontColorAsk = "Синий" Then sFontColor = vbBlue
If sFontColorAsk = "пурпурный" Or sFontColorAsk = "Пурпурный" Then sFontColor = vbMagenta
If sFontColorAsk = "циан" Or sFontColorAsk = "Циан" Then sFontColor = vbCyan
If sFontColorAsk = "белый" Or sFontColorAsk = "Белый" Then sFontColor = vbWhite
With ActiveSheet.UsedRange
Set objRange = .Find( _
What:=strFindWhat, _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False _
)
If Not objRange Is Nothing Then
strFirstFoundAddress = objRange.Address
Do
intFoundPosition = InStr(1, objRange.Value, strFindWhat, vbTextCompare)
Do While intFoundPosition > 0
objRange.Characters(intFoundPosition, Len(strFindWhat)).Font.Color = sFontColor
intFoundPosition = InStr(intFoundPosition + 1, objRange.Value, strFindWhat, vbTextCompare)
Loop
Set objRange = .FindNext(After:=objRange)
Loop Until objRange.Address = strFirstFoundAddress
End If
End With
End Sub
|
|
Отправлено: 15:22, 19-05-2016 | #9 |
|
Динохромный Сообщения: 712
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
1. каждый раз вводить полное наименование цвета на мой взгляд неудобно. По хорошему можно сделать форму (одну - с текстовым окном и опциями выбора цвета), в которую вы сразу будете забивать свой поисковый шаблон и при необходимости - выбирать мышкой цвет. При вводе через input я бы ограничился вводом первой буквы: не "красный", а просто "к". Кроме того, при наличии орфографической неточности (например "краный", или "Чёрный" вместо "Черный") соответствия найдено не будет, вполне можно принудительно присвоить в этом случае цвет (например черный) и предупредить об этом пользователя. Реализовать все вышеперечисленное можно через select case: код Select case
Select Case LCase(sFontColorAsk)
Case "к"
sFontColor = vbRed
Case "з"
sFontColor = vbGreen
Case "ж"
sFontColor = vbYellow
Case "с"
sFontColor = vbBlue
Case "п"
sFontColor = vbMagenta
Case "ц"
sFontColor = vbCyan
Case "б"
sFontColor = vbWhite
Case "ч"
sFontColor = vbBlack
Case Else
sFontColor = vbBlack
MsgBox "Цвет не распознан, применен черный"
End Select
2. Введенный цвет следует не проверять в обоих регистрах (If sFontColorAsk = "черный" Or sFontColorAsk = "Черный"), а перевести в заданный(например нижний) регистр: LCase(sFontColorAsk). Это ускорит работу кода. 3.при вводе цвета текста нужно вставить значение по умолчанию, чтобы сократить количество ненужных действий (например красный): код
Соответственно, код будет выглядеть следующим образом: код
Sub colorr2()
Dim strFindWhat As String
Dim strFirstFoundAddress As String
Dim objRange As Range
Dim intFoundPosition As Integer
strFindWhat = InputBox("Введите что подкрасить")
sFontColorAsk = InputBox("Введите один из цветов: " _
& Chr(13) & "черный (ч), красный (к),зеленый (з)," _
& Chr(13) & "желтый (ж), синий (с), пурпурный (п), циан (ц), белый (б)", , "к")
Select Case LCase(sFontColorAsk)
Case "к"
sFontColor = vbRed
Case "з"
sFontColor = vbGreen
Case "ж"
sFontColor = vbYellow
Case "с"
sFontColor = vbBlue
Case "п"
sFontColor = vbMagenta
Case "ц"
sFontColor = vbCyan
Case "б"
sFontColor = vbWhite
Case "ч"
sFontColor = vbBlack
Case Else
sFontColor = vbBlack
MsgBox "Цвет не распознан, применен черный"
End Select
With ActiveSheet.UsedRange
Set objRange = .Find( _
What:=strFindWhat, _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False _
)
If Not objRange Is Nothing Then
strFirstFoundAddress = objRange.Address
Do
intFoundPosition = InStr(1, objRange.Value, strFindWhat, vbTextCompare)
Do While intFoundPosition > 0
objRange.Characters(intFoundPosition, Len(strFindWhat)).Font.Color = sFontColor
intFoundPosition = InStr(intFoundPosition + 1, objRange.Value, strFindWhat, vbTextCompare)
Loop
Set objRange = .FindNext(After:=objRange)
Loop Until objRange.Address = strFirstFoundAddress
End If
End With
End Sub
|
|
|
Последний раз редактировалось a_axe, 20-05-2016 в 09:41. Отправлено: 09:36, 20-05-2016 | #10 |
|
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| 2010 - Поиск по листу и заполнение данными таблицы на другом листе | eus_deus | Microsoft Office (Word, Excel, Outlook и т.д.) | 1 | 25-03-2016 16:16 | |
| CMD/BAT - скрипт на создание теста PerfMon по шаблону в ХР | saintman | Скриптовые языки администрирования Windows | 0 | 26-02-2014 16:28 | |
| VBS/WSH/JS - [решено] замена текста в файле по шаблону | dembel_zone | Скриптовые языки администрирования Windows | 12 | 29-12-2013 19:21 | |
| 2003/XP/2000 - [решено] MS Word: добавление цвета в меню выделение текста цветом | AlexM | Microsoft Office (Word, Excel, Outlook и т.д.) | 4 | 05-03-2010 06:13 | |
| [решено] Подчеркивание текста другим цветом | Kul86 | Вебмастеру | 2 | 27-05-2009 00:33 | |
|