Application.Goto语句应用秘技

2023-11-13 15:49:31 浏览数 (3)

标签:VBA,Goto语句

在程序中,Goto语句可以无条件地跳转到过程中指定的行。虽然说,过多使用Goto语句不符合结构化编程原则,会导致程序代码执行流混乱且不容易阅读。然而,在VBA中,Goto语句可以用来导航到指定的单元格区域。

例如,对于工作表Sheet1中的单元格区域C3:D5,想要通过VBA转到该区域。如果使用代码:

代码语言:javascript复制
Dim GotoRange As String
GotoRange = "Sheet1!$C$3:$D$5"
Application.Goto GotoRange

VBA会给出错误!

我们可以使用:

代码语言:javascript复制
Sheets("Sheet1").Range("$C$3:$D$5").Select

或者:

代码语言:javascript复制
Application.Goto Reference:=Worksheets("Sheet1").Range("$C$3:$D$5")

或者:

代码语言:javascript复制
Dim GotoRange As String
GotoRange = "Sheet1!$C$3:$D$5"
Application.Goto Range(GotoRange)

然而,如果非要使用Goto语句且要避免过长的语句解析,也就是解决本文开头给出的语句错误,可以使用一个小技巧。

实际上,Goto方法允许R1C1样式引用,而不允许A1样式的引用。在VBA中,有一个名为ConvertFormula方法,可以用来在这两种引用样式之间轻松切换。

下面的代码解决了开头出错的问题:

代码语言:javascript复制
Dim GotoRange As String
GotoRange = "Sheet1!$C$3:$D$5"
Application.Goto Application.ConvertFormula(GotoRange, xlA1, xlR1C1)

或者:

代码语言:javascript复制
Dim GotoRange As String
GotoRange = "Sheet1!$C$3:$D$5"
GotoRange = Application.ConvertFormula(GotoRange, xlA1, xlR1C1)
Application.Goto GotoRange

当然,如果你的工作表本身就是使用R1C1样式的引用,就不需要进行转换。

0 人点赞