【问题标题】:Sheet1 of the workbook to contain name of the other sheets based on certain criteria工作簿的 Sheet1 包含基于特定条件的其他工作表的名称
【发布时间】:2012-11-26 21:10:26
【问题描述】:

我有一个 excel 工作表,它由许多工作表依次组成,比如说大约 5...我想编写一个宏来识别在 Excel 工作表 Sheet2、Sheet3、Sheet4 和 Sheet5 中是否存在红色是任何单元格中的任何红色,它将报告工作簿的 Sheet 1 中的工作表名称,Sheet 某某在其任何一个单元格中包含红色。

到目前为止,我只能确定特定工作表中是否存在红色......但不知道如何在工作表 1 中报告相应的工作表名称。

Sub CheckColor()
Dim Row
For Row = 2 To tsheet.UsedRange.Rows.Count
For chkcol = 1 To Sheet1.UsedRange.Columns.Count
If tsheet.Cells(Row, chkcol).Interior.ColorIndex = 3 Then
    'How to report the corresponding sheet name in sheet 1???
End If
Next
Next Row

结束子

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    首先,我认为使用 Range.Find() 和 FindFormat 会更有效:

    Private Sub test()
        Application.FindFormat.Clear
        Application.FindFormat.Interior.ColorIndex = 3
    
        Range("A1:C3").Find(What:="", LookAt:=xlPart, SearchFormat:=True).Value = "test"
    End Sub
    

    对于您的主要问题,我认为您首先需要确定是要为所有工作表还是为子集执行代码。如果它适用于所有工作表,那么您可以简单地将上面的代码包装在 Worksheets 集合的 for each 循环中。

    如果您需要为工作表的子集执行此代码,则可以使用规则(前 4 个字符 =“abcd”)或将它们硬编码到数组中。

    然后,只需检查 Find() 返回的范围是否不是 nothing 就意味着成功。如果满足条件,则当前工作表将被主工作表根据需要使用。

    【讨论】:

    • 我已经修改了你给定的过程,并得到运行时错误 91..saying 对象变量或未设置块变量。修改后的代码如下: Dim tsheet As Worksheet Sub iterateSheets() For Each Sheet1t In Worksheets If InStr(1, Sheet1t.Name, "TC") Then Set tsheet = Sheet1t Call test End If Next End Sub Sub test() Application .FindFormat.Clear Application.FindFormat.Interior.ColorIndex = 3 Range("A1:C3").Find(What:="", LookAt:=xlPart, SearchFormat:=True).Value = "test" End Sub跨度>
    • 我将您的代码添加到您的原始帖子中。它在 cmets 部分是不可读的。出现问题是因为您尝试按原样使用代码。正如我告诉过您的,您需要调整代码以解决找不到结果的情况。这是通过使用类似于if not range.find(...) is nothing then 的东西来完成的。
    猜你喜欢
    • 2022-12-08
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    相关资源
    最近更新 更多