【问题标题】:Change a range of cells on one or more sheets based on a selected range of cells in a main sheet根据主工作表中选定的单元格范围更改一个或多个工作表上的单元格范围
【发布时间】:2016-07-20 13:27:27
【问题描述】:

我想先说我在很大程度上缺乏编码经验。我一直在自己做一个项目,最后遇到了我无法通过简单的谷歌搜索解决的墙。

为了简要解释相关细节,我有一个工作簿,其中包含不同数量的工作表,每个工作表都有一个特定的文本单元格(稍后解释)和一个复选框。

我的目标是选择一系列单元格,通常连续 1-5 个,然后有一个按钮来更改给定特定条件的所有工作表的相同选定单元格的颜色。标准是只有在上述单元格中列出了“Office”并且未选中复选框的工作表才会被更改。

虽然我没有问题让 Excel 在工作表中循环并仅在符合条件的工作表上执行某些操作,但问题在于尝试编辑与主工作表上选择的相同的单元格。

到目前为止我想出的编码:

Dim cell As Range
Dim n As Integer
Set cell = Selection
If Range("AN6").Text = "Office" Then
    For n = 1 To Sheets.Count - 2
        If Sheets(n).Range("AN6").Text = "Office" And Sheets(n).CheckBox1.value = False Then
            For Each cell In Selection
                Sheets(n).Range(cell).Interior.ColorIndex = 56
            Next cell
        End If
    Next n
End If

我得到的错误是:应用程序定义的或对象定义的错误。

希望有一种方法可以执行此操作。如果能得到任何帮助,我将不胜感激。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以使用范围的 .Address 属性。我很确定您会遇到错误,因为您的选择在一张纸中,并且您尝试在另一张纸中引用该范围。仅使用范围的地址应该可以解决该问题。

    Dim cell As Range
    Dim n As Integer
    Set cell = Selection
    If Range("AN6").Text = "Office" Then
        For n = 1 To Sheets.Count - 2
            If Sheets(n).Range("AN6").Text = "Office" And Sheets(n).CheckBox1.value = False Then
                For Each cell In Selection
                    Sheets(n).Range(cell.Address(False,False)).Interior.ColorIndex = 56
                Next cell
            End If
        Next n
    End If
    

    我对这段代码所做的唯一测试是使用这个 sub。我在工作表上选择了一个范围并运行了宏,消息框显示 Q12:U26

    Sub test()
        Dim cell As Range
        Set cell = Selection
        MsgBox cell.Address(False, False)
    End Sub
    

    【讨论】:

    • 这适用于符合条件的第一张纸,但是当它到达第二张时,它出现了同样的错误。
    • 从头开始,我保护了其他工作表,因此我必须根据需要取消保护它们以解决问题。谢谢!这非常有效!
    【解决方案2】:

    这应该可行:

    Sub test()
    
        With Selection
            startRow = .Cells(1).Row
            startColumn = .Cells(1).Column
            endRow = .Cells(.Cells.Count).Row
            endColumn = .Cells(.Cells.Count).Column
        End With
        If Range("AN6").Text = "Office" Then
            For n = 1 To Sheets.Count - 2
                If Sheets(n).Range("AN6").Text = "Office" And Sheets(n).CheckBox1.value = False Then
                    For Each cell In Range(Sheets(n).Cells(startRow, startColumn), Sheets(n).Cells(endRow, endColumn))
                        cell.Interior.ColorIndex = 56
                    Next cell
                End If
            Next n
        End If
    End Sub
    

    【讨论】:

    • 不幸的是,“对于每个单元格”行我仍然遇到同样的错误。
    猜你喜欢
    • 2020-01-24
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多