'使用工作表(“xxxx”)'仅在“xxxx”是活动工作表时才有效

时间:2018-01-22 13:13:51

标签: excel vba excel-vba reference worksheet

我是Excel VBA的新手。到目前为止,我已经在这个网站上阅读并学到了很多东西,但还没有找到解决我问题的方法。

作为宏的一部分,我有以下代码:

With Worksheets("Oracle")
    On error resume next
    ActiveWorkbook.Names("bron").Delete
    ActiveWorkbook.Names.Add Name:="bron", RefersTo:= Range("A1", Range("A1").End(xlToRight).End(xlDown))
    .Cells.Select
    With Selection.Font
        .Name = "Verdana"
        .FontStyle = "Standaard"
        .Size = 8
    End With
    .Range("A1", Range("A1").End(xlToRight)).Font.Bold = True
    MsgBox "Tabblad ‘Oracle’ is klaar!", vbOKOnly
End With

我理解,对于代码的第一行,活动表实际上是什么并不重要。但问题是它只在Oracle是活动表时才有效。我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果您使用With Worksheets() ... End With,则表示您想要引用特定工作表而不是ActiveSheet。这在VBA中被认为是一种很好的做法。

如@GSerg的评论所述,您的代码不起作用,因为您在所有范围前都没有点。但是,您无法注意到这一点,因为您使用的是On Error Resume Next,它会忽略所有错误。

在您的情况下,问题是您尝试使用此行ActiveSheet引用Oracle.Range("A1", Range("A1").End(xlToRight)).中的范围。因此错误是不可避免的。

您有两种方法可以确保您的代码正常运行:

  1. 只需激活工作表“Oracle”并运行代码即可。它会正常工作。
  2. 尝试像这样重写:
  3. With Worksheets("Oracle")
        On Error Resume Next
        ActiveWorkbook.Names("bron").Delete
        ActiveWorkbook.Names.Add Name:="bron", _
                              RefersTo:=.Range("A1", .Range("A1").End(xlToRight).End(xlDown))
    
            With .Cells.Font
                .Name = "Verdana"
                .FontStyle = "Standaard"
                .Size = 8
            End With
    
        .Range("A1", .Range("A1").End(xlToRight)).Font.Bold = True
        MsgBox "Tabblad ‘Oracle’ is klaar!", vbOKOnly
    
    End With
    

    看一下所有范围都用点引用,Select命令不再使用。