根据主工作表中选定的单元格区域更改一个或多个工作表上的单元格范围

时间:2016-07-20 13:27:28

标签: excel vba

我想通过说我在编码方面缺乏经验来作为序言。我一直在自己的工作项目上工作,最后遇到了一个我无法通过简单的谷歌搜索来解决的问题。

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

我的目标是选择一系列单元格,通常连续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

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

希望有办法执行此操作。我非常感谢能得到的任何帮助。

2 个答案:

答案 0 :(得分:0)

这应该有效:

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

答案 1 :(得分:0)

您可以使用范围的.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

我对此代码进行的唯一测试是使用此子。我在工作表上选择了一个范围并运行了宏,而msg框则说Q12:U26

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