0

Excel シートのリスト内のセルのフォントの色を赤から黒に変更しようとしています。

このコードは、txt ファイルからファイル パスを読み取り、それらを配列に入れます。次に、配列を使用して Excel シートのフォントの色を確認し、黒に変更します。

動作していません。VBscript の知識が限られています。

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
4

3 に答える 3

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

別のこと: パスの配列を使用して、複数のワークブックを開くことができます。

Set objWorkbook = objExcel.Workbooks.Open(arrServiceList)

ただし、その場合、配列には Excel ワークブックへのパスのみを含める必要があります。

于 2013-07-01T15:58:41.663 に答える
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
于 2013-07-01T18:15:48.357 に答える