VBA代码,根据1列的值更改3列的字体颜色(多个表)

问题描述 投票:-1回答:3

情况:

我在一个.xlsx工作簿中有大约2,600个表,每个选项卡有一个表。它们将作为PDF在线发布,但首先,我需要抑制频率小于10的行中的频率和百分比。掩码格式化不适用于SAS 9.3中的交叉列表选项。因此,我认为最有效的方法是将适当单元格中的字体颜色更改为白色。不幸的是,当您选择多个选项卡时,条件格式不起作用。使用VBA似乎是最好的选择,但我对此知之甚少。

这是表格的一个例子(为了简洁,我隐藏了4 - 7年级的行):

Example: Original Table

目标:

将具有计算值的单元格中的字体颜色更改为白色以模拟抑制。例如:

Example: "Suppressed" Table

有谁能指出我正确的方向?我觉得这应该是非常简单的,但每次我都这么认为,这恰恰相反。我看到了一些类似的问题,但没有一个问题与我的问题相关。

非常感谢!!!!

excel vba excel-2010
3个回答
0
投票

回答关于为出口创建临时副本的问题:

Sub CreateExportCopy()

    Dim wb As Workbook, wbExport As Workbook, newPath As String

    Set wb = Workbooks("DataTables.xlsx") '<< your (open) data file

    newPath = wb.Path & "\ForPDF_" & wb.Name

    'this will create a copy of the workbook in the same location,
    '  with the name prepended by "ForPFDF_"
    wb.SaveCopyAs newPath

    'open the copy
    Set wbExport = Workbooks.Open(newPath)

    'follow one of the other answers here to process the
    '  tables in wbExport, but use (eg)
    '     c.ClearContents
    '  instead of
    '     c.Font.Color = vbWhite

End Sub

0
投票

他们总是在列“C”吗?如果没有,你也必须检查那种东西。 它总是从第10行开始吗? 只要循环遍历工作表和值,如果你想要简单,这就像它得到的一样简单:

Sub whiteout()
Dim c As Range, ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    For Each c In Range(ws.Range("C10"), ws.Range("C65000").End(xlUp))
        If c.Value < 10 Then c.Font.Color = vbWhite
    Next c
Next ws
End Sub

For each循环非常直观,但请注意,在循环中访问和更改此类内容可能会非常缓慢。


0
投票

doctorjay。

我根据你的数据集松散地研究了我自己的虚拟表。

我会使用像这样的宏:

Sub clean_lower_than_10()
Dim Sheet As Worksheet


For Each Sheet In ActiveWorkbook.Sheets
    For Each Row In Sheet.UsedRange.Rows
            'Columns where the frequency and percentage are: C,D -> 3,4
            For Each Cell In Row.Cells
                'Inside this condition, you should change the numbers for the column number that corresponds to the ones on your tables.
                If Cell.Column = 3 Or Cell.Column = 4 Then
                    If Cell.Value < 10 Then
                        Cell.Font.ColorIndex = 2
                    End If
                End If
            Next
        Next
Next


End Sub

colorIndex = 2表示单元格字体的白色。

此解决方案假定您的百分比和频率值始终位于每张工作表的相同列上。

如果不是这种情况,你将不得不处理代码以使其工作,但它认为这将是一个很好的起点。

执行宏之前我的表:

Before executing macro

执行宏后我的表:

After executing macro

请注意,该值保持不变,但字体颜色已更改为白色。

希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.