'With Worksheets("xxxx")' 仅在 "xxxx" 是活动工作表时有效
'With Worksheets("xxxx")' works only when "xxxx" is the active 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
我明白,对于代码的第一行,活动 sheet 实际上是什么并不重要。但问题是它仅在 Oracle 处于活动状态时才有效 sheet。我做错了什么?
如果您使用 With Worksheets() ... End With
,则意味着您要引用特定的工作表而不是 ActiveSheet
。这在 VBA.
中被认为是一种很好的做法
正如@GSerg 在评论中提到的,您的代码不起作用,因为您没有在所有范围前面加一个点。但是,您不会注意到这一点,因为您使用的是 On Error Resume Next
,它会忽略所有错误。
在您的情况下,问题是您试图通过此行 .Range("A1", Range("A1").End(xlToRight)).
引用 ActiveSheet
和 Oracle
中的范围。因此错误是不可避免的。
您有两个选项来确保您的代码有效:
- 只需激活工作表 "Oracle" 和 运行 代码。它会工作正常。
- 尝试这样重写:
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
看一下,所有的Ranges都用一个点表示,Select
命令不再使用了。
我是 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
我明白,对于代码的第一行,活动 sheet 实际上是什么并不重要。但问题是它仅在 Oracle 处于活动状态时才有效 sheet。我做错了什么?
如果您使用 With Worksheets() ... End With
,则意味着您要引用特定的工作表而不是 ActiveSheet
。这在 VBA.
正如@GSerg 在评论中提到的,您的代码不起作用,因为您没有在所有范围前面加一个点。但是,您不会注意到这一点,因为您使用的是 On Error Resume Next
,它会忽略所有错误。
在您的情况下,问题是您试图通过此行 .Range("A1", Range("A1").End(xlToRight)).
引用 ActiveSheet
和 Oracle
中的范围。因此错误是不可避免的。
您有两个选项来确保您的代码有效:
- 只需激活工作表 "Oracle" 和 运行 代码。它会工作正常。
- 尝试这样重写:
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
看一下,所有的Ranges都用一个点表示,Select
命令不再使用了。