2015-05-30 3 views
0

Из моего графического интерфейса я ввожу цифры следующим образом: 9811,7841, которые будут отправлены на мой макрос. Мой макрос:игнорировать алфавиты при прохождении через ячейки

sub highlight(fm as variant) 
dim sh as worksheet 
Dim i As Integer 
dim j as integer 
dim k As Long 
Dim rn As Range 
din number() as integer 
If phm <> 0 Then 

phm = Split(phm, ",") 
ReDim number(LBound(phm) To UBound(phm)) As Integer 

Set sh = w.Worksheets("Sheet1") 
sh.Select 
Cells.Find("Type").Select 
ActiveCell.Offset(1, 0).Select 
Set rn = sh.UsedRange 
k = rn.Rows.Count + rn.Row - 1 

For i = 1 To k 
For j = LBound(number) To UBound(number) 

number(j) = CInt(phm(j)) 

If ActiveCell.Value = number(j) Or IsEmpty(ActiveCell.Value) Then 
Selection.Interior.ColorIndex = xlNone 
Else 
Selection.Interior.Color = vbGreen 
Exit For 
End If 


Next j 
ActiveCell.Offset(1, 0).Select 'moves activecell down one row. 
Next i 


End If 
ActiveWorkbook.Save 


End Sub 

Я хотел бы изменить свой код в таких алфавитах игнорируются, если присутствует в любом cell.In ниже случай, CELL3 и ячейка 5 должна быть выделена, как мой «фм» содержит 9811, 7841, поэтому ячейка 1,2,4 действительна. При проверке ячеек следует игнорировать.

Sheet1 
cell 1: 9811 
cell 2: hello 9811 
cell 3: 3428 
cell 4: hello 7841 
cell 5:hello 2545 
+0

Почему вы не воздерживаетесь от ввода пользователем алфавита в ячейки? [Отметьте этот ответ.] (http://stackoverflow.com/q/11133771/1389394) – bonCodigo

+0

Нет, Я не могу этого сделать:/ – Sagi

+0

Дубликат [Игнорировать алфавиты в ячейке, следует проверять только номера) (http://stackoverflow.com/questions/30542051/ignore-alphabets-in-a-cell-only-numbers-should -be-checked) – Comintern

ответ

0

Самый простой способ сделать это - с регулярным выражением. Добавить ссылку на Microsoft VBScript регулярных выражений, то просто сделать замену шаблона:

Private Function StripNonNumerics(inValue As String) As String 

    Dim regex As New RegExp 
    With regex 
     .Pattern = "\D" 
     .Global = True 
     StripNonNumerics = .Replace(inValue, vbNullString) 
    End With 

End Function 

Обратите внимание, что там будет меньше накладных расходов, если включить это в ваш сабвуфер или сделать регулярное выражение глобальной (что, как вы надеваете» t необходимо повторно создать объект RegExp.

+0

: можете ли вы добавить этот фрагмент в мой существующий код? – Sagi

+0

Изменить 'If ActiveCell.Value = number (j)' to 'If Val (StripNonNumerics (ActiveCell.Value)) = number (j)' – Comintern

+0

Он меня выбрал для этой ошибки «определенный пользователем тип не определен» – Sagi

0

Я думаю, что вы ищете функции VBA «Instr»

https://msdn.microsoft.com/en-us/en-en/library/8460tsh1%28v=vs.90%29.aspx

Предполагая, что PHM это ваш массив, который содержит один ряд фм в каждой клетке:

вам нужно для изменения вашей линии

If ActiveCell.Value = number(j) Or IsEmpty(ActiveCell.Value) Then 

до

If Instr(ActiveCell.Value,number(j)) > 0 Or IsEmpty(ActiveCell.Value) Then 
+0

Все ячейки являются высокими hlighted:/ – Sagi