2017-01-20 5 views
2

Я пишу сценарий для запуска ping на машинах. Сценарий выглядит в текстовый файл с именами хостов, и возвращает имя хоста в колонке А & статус ping (вверх или вниз) в столбце B.Установить цвет ячейки в Excel на основе текстового значения - VBA

мне нужны цвета столбцов B меняется на зеленый, если вверх, и Красный, если вниз.

код без проблем:

'# call excel applicationin visible mode 

Set objExcel = CreateObject("Excel.Application") 

objExcel.Visible = True 

objExcel.Workbooks.Add 

intRow = 2 


'# Define Labels 

objExcel.Cells(1, 1).Value = "Machine Name" 

objExcel.Cells(1, 2).Value = "Results" 


'# Create file system object for reading the hosts from text file 


Set Fso = CreateObject("Scripting.FileSystemObject") 

Set InputFile = fso.OpenTextFile("MachineList.Txt") 

'# Loop thru the text file till the end 

Do While Not (InputFile.atEndOfStream) 

HostName = InputFile.ReadLine 

'# Create shell object for Pinging the host machines 

Set WshShell = WScript.CreateObject("WScript.Shell") 

Ping = WshShell.Run("ping -n 1 " & HostName, 0, True) 


objExcel.Cells(intRow, 1).Value = HostName 

'# use switch case for checking the machine updown status 

Select Case Ping 

Case 0 objExcel.Cells(intRow, 2).Value = "up" 

Case 1 objExcel.Cells(intRow, 2).Value = "down" 

End Select 


intRow = intRow + 1 

Loop 

'# Format the excel 

objExcel.Range("A1:B1").Select 

objExcel.Selection.Interior.ColorIndex = 19 

objExcel.Selection.Font.ColorIndex = 11 

objExcel.Selection.Font.Bold = True 

objExcel.Cells.EntireColumn.AutoFit 

То, что я пытался по цвету (много вопросов):

Sub ColorCells() 
    Dim cel As Range 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
    For Each cel In Range("B2:B90") 
     Select Case LCase(Left(cel.Value, 1)) 
      Case "up" 
       cel.Interior.Color = vbGreen 
      Case Else 
       cel.Interior.ColorIndex = xlColorIndexNone 
     End Select 
    Next cel 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 
End Sub 

Что я получаю:

What I get

То, что я хочу :

What I want

+2

Сразу я вижу ваш код не может начинаться или заканчиваться 'Sub'' End Sub', за исключением' Sub ColorCells() ', поэтому он даже не работает на моей стороне. Вы также должны ссылаться на «Лист» при использовании «Диапазон», иначе я считаю, что он выполнит действие на активном листе. Есть ли какой-то код, который вы оставили? –

+0

@ Jean-PierreOosthuizen Никакого кода не было. Я только что собрал вещи, и это самое близкое, что мне нужно для достижения цели. Я новичок в VBA. – Vandal

+3

В вашем коде есть так много проблем, что сложно даже знать, с чего начать. Выбрать Case LCase (слева (cel.Value, 1)) Корпус «Вниз» Если в нижнем регистре значение никогда не будет равно " Down "с капиталом D SO начните с малого, постройте строку и запустите код и добавьте материал – dgorti

ответ

4

Чтобы изменить цвет ячейки, как вставить «вверх» или «вниз» просто заменить Select Case Ping следующим:

Select Case Ping 

Case 0 
    objExcel.Cells(intRow, 2).Value = "up" 
    objExcel.Cells(intRow, 2).Interior.Color = vbGreen 
Case 1 
    objExcel.Cells(intRow, 2).Value = "down" 
    objExcel.Cells(intRow, 2).Interior.Color = vbRed 

End Select 
0
Select Case Ping 

Case 0 objExcel.Cells(intRow, 2).Value = "up" 
    objExcel.Cells(intRow, 2).Interior.Color = vbGreen 

Case 1 objExcel.Cells(intRow, 2).Value = "down" 
    objExcel.Cells(intRow, 2).Interior.Color = vbRed 

End Select 

Это было бы, как реализовать цвет в выбранном случае. Посмотрите ниже на мое использование With, хотя, как это гораздо лучше, чем метод с использованием .Select (вместо ваших конечных строк кода в вопросе):

With objExcel.Range("A1:B1") 
    .Interior.ColorIndex = 19 
    .Font.ColorIndex = 11 
    .Font.Bold = True 
End With 

objExcel.Cells.EntireColumn.AutoFit 
Смежные вопросы