30.12.2006, 15:21
общий
это ответ
Здравствуйте, Wera-d!
Если я правильно понял, чего надо, то выглядеть такой макрос должен приблизительно так:
1). Создайте в редакторе VBA форму (UserForm1). Най ней поместите текстовое поле (textBox1) и кнопку (CommandButton1).
2). Щелкните правой клавишей мышки на ярлыке листа в экселе и во всплывающем меню выберите пункт "Исходный текст".
3). Создайте там любую процедуру, которая будет Вам нужна чтобы провести нужные действия (например, Worksheet_Activate()).
4). В ней напишите код, который будет немодально (чтобы Вы могли иметь доступ к ячейкам на листе) выводить Вашу форму на экран. Например, такой:
Private Sub Worksheet_Activate() ‘Происходит при переходе на рабочий лист
If f Is Nothing Then ‘Если форма не загружена, то...
Set f = New UserForm1 ‘Загружаем ее
Load f
f.Show vbModeless ‘Показываем
End If
End Sub
Private Sub Worksheet_Deactivate() ‘Происходит при переключении на другой лист
If Not (f Is Nothing) Then ‘Если форма загружена, то...
Unload f ‘... выгружаем ее, чтобы не мешала другой работе -
Set f = Nothing ‘она же нужна например только на нужном нам листе
End If
End Sub
Таким образом, мы будем иметь выскакивающую на экран форму при переходе на нужный нам лист (Например, Лист1).
5). В форме как реакцию на щелчок на кнопке введите такой код:
Private Sub CommandButton1_Click()
Dim txt As String, stroka As String
Dim i As Long
Dim c As Range
txt = "##?##?## " & UCase(TextBox1.Text) & "*"
If Len(txt) = 0 Then
MsgBox "Введите текст!", vbCritical, "Ошибка"
Exit Sub
Else
i = 1
Set c = ActiveSheet.Columns(1)
Do While 1
stroka = UCase(c.Rows(i).Text)
If Len(stroka) = 0 Then Exit Do
If stroka Like txt Then
c.Rows(i).Columns(2) = "+"
Else
c.Rows(i).Columns(2) = vbNullString ‘Вот это надо для того, чтобы Вы вручную не очищали 2 столбец после предыдущих результатов, но если не хотите, то сотрите эту строку
End If
i = i + 1
Loop
MsgBox "Все!"
End If
End Sub
Вводите в текстовом поле нужные слова и жмите кнопку.