2013-07-01 55 views
0

嘿,我一直在试图改变Excel表格中的单元格的颜色从红色到黑色。该代码使用一个txt文件来读取文件路径,然后将它们放入一个数组中。然后使用数组检查Excel表格中的红色字体颜色并将其更改为黑色。可悲的是,它不工作,我有我的VBscript调试知识非常有限,所以任何人都可以看一看,看看我做错了什么?试图改变excel表格列表中所有单元格的字体颜色

REM Attribute VB_Name = "Module1" 
Sub SimpleMacro() 
    Set objExcel = CreateObject("Excel.Application") 
    objExcel.Visible = True 

    Const ForReading = 1 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objTextFile = objFSO.OpenTextFile _ 
    ("pathlist.txt", ForReading) 

    Do Until objTextFile.AtEndOfStream 
     strNextLine = objTextFile.Readline 
     arrServiceList = Split(strNextLine , ",") 
     Wscript.Echo "Server name: " & arrServiceList(0) 
     For i = 1 to Ubound(arrServiceList) 
      Wscript.Echo "Service: " & arrServiceList(i) 
     Next 
    Loop 

    Set objWorkbook = objExcel.Workbooks.Open(arrServiceList) 
    Set objWorksheet = objWorkbook.Worksheets(1) 

    RedColor = RGB(255, 0, 0) 
    BlackColor = RGB(0, 0, 0) 

    'Get number of rows in the specified column 
    RowsCount = Range("A1" *.End(xlDown)).Rows.Count 

    'Select cell 
    Range("A1" *.End(xlDown)).Select 

    'Loop the cells 
    For x = 1 To RowsCount 
     If ActiveCell.Font.Color = RedColor Then 
      'Change the text color 
      ActiveCell.Font.Color = BlackColor 
     Else 
      ActiveCell.Font.Color = BlackColor 
     End If 

     ActiveCell.Offset(1, 0).Select 
    Next 
End Sub 
+0

你是什么意思“不工作”?请具体说明? – shahkalpesh

+1

'xlDown'将会是未知的,因为你是晚期绑定,在'ConstForReading = 1'后面加上'Const xlDown = -4121'。除了描述它是如何失败的。 –

+0

对不起,太模糊了。当我运行它时,它不会将字体颜色从红色更改为黑色。因此pathlist.txt中有一个文件路径列表,它应该读取数组中的文件路径,然后进入它们并查找红色字体并将其更改为黑色。 – Cmasterd

回答

1

您不能使用类似*.End(xlDown)的东西。不仅在VBScript中未定义常量,而且也没有关键字/变量*。可以在特定列的字体颜色设置为黑色这样的:

objWorksheet.Columns(1).EntireColumn.Font.Color = BlackColor 

或所使用的范围是这样的字体颜色:

objWorksheet.UsedRange.Font.Color = BlackColor 

为了改变所有单元格的颜色,其中所述字体颜色是红色的,你可以使用这样的事情:

For Each cell In objWorksheet.Cells 
    If cell.Font.Color = RedColor Then cell.Font.Color = BlackColor 
Next 

另一件事:

012:您可以通过使用路径的数组打开多个工作簿
Set objWorkbook = objExcel.Workbooks.Open(arrServiceList) 

但在这种情况下,该数组应该只包含Excel工作簿的路径,没有别的。

+0

感谢你,我需要它只改变红色的字体黑色不只是把所有的字体颜色变成黑色。 – Cmasterd

+0

您使用的代码将单元格颜色更改为黑色(如果它是红色的,并且它不是红色)。 –

+0

哦,对不起,这只是试图看到它的工作并不意味着在那里。 – Cmasterd

0

我假设你只想改变列A中的字体颜色。以下是正确的VBA,我希望VBScript能够正确的修改为wll。

lastrow = Range("A" & Rows.Count).End(xlUp).Row 
For i = 1 To lastrow 
    If Range("A" & i).Font.Color = RGB(255, 0, 0) Then 
     Range("A" & i).Font.Color = RGB(0, 0, 0)  'you can substitute your color variables in 
    End If 
Next 
0

这会将所有且只有红色字体的单元格变为黑色字体。并且会在不使用循环或任何比较语句的情况下执行此操作,从而提供非常快速可靠的代码

Sub Sample() 
With Application 
    .ScreenUpdating = False 
    .EnableEvents = False 
    .Calculation = xlCalculationManual 
End With 

Dim lngLastFilePathRow As Long 

lngLastFilePathRow = Cells(Rows.Count, 1).End(xlUp).Row 

With Range("A1:A" & lngLastFilePathRow) 
    'Filter Out Everything that does NOT have Red font 
    .AutoFilter Field:=1, Criteria1:=RGB(255, 0 _ 
     , 0), Operator:=xlFilterFontColor 
    'With only the cells that have Red font change the color to black 
    .SpecialCells(xlCellTypeVisible).Font.ColorIndex = xlAutomatic 
    .AutoFilter 
End With 

With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
    .Calculation = xlCalculationAutomatic 
End With 
End Sub 
+0

嘿,谢谢你这是伟大的,是否有任何方式然后输入数组'arrServiceList',以便它通过文件路径列表? – Cmasterd

+0

使用你所拥有的'RedColor = RGB(255,0,0)'然后用我的答案完成,但将工作簿和工作表(objWorkbook,objWorksheet)引用添加到我的范围。 – user2140261

+0

非常感谢,我会放弃并回复你。 – Cmasterd

相关问题