标签: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样式的引用,就不需要进行转换。