Excel-VBA:必要的变量声明?

Car*_*los 3 excel vba excel-vba variable-declaration

如果编写以下代码会是错误的吗?

Sub Something()
 Dim i As integer
 Dim xRange As Range
 Dim yRange As Range

 Set xRange= Range("x_table")
 Set yRange= Range("y_table")

 For i = 1 To xRange.Columns.Count
    xRange.Columns(i) = Application.Sum(y_table.Columns(i))
 Next i
End Sub
Run Code Online (Sandbox Code Playgroud)

没有具体声明每个变量?像吼叫;

Sub Something()
 Set xRange= Range("x_table")
 Set yRange= Range("y_table")

 For i = 1 To xRange.Columns.Count
    xRange.Columns(i) = Application.Sum(y_table.Columns(i))
 Next i
End Sub
Run Code Online (Sandbox Code Playgroud)

N0A*_*ias 13

如果未启用Option Explicit,您可以这样做,但我不推荐它,因为那时您依靠框架来猜测它正在处理的变量类型,这可能会导致意外结果.

  • 开始输入"xrange".并且在第一个示例中观察扩展点上的方法和属性,而不是在第二个示例中 - 这将在您编码时为您提供帮助和信心 - 这就是为什么我总是首先限定我的对象.几乎没有必须使用后期绑定的情况 (4认同)
  • @ belisarius - 不,不,不,一千次不!这是基于VB的语言(VB和VBA)的陷阱之一."Dim i,j,k As Integer"将为您提供一个整数(k)和两个变量(i&j).你可以在一行上完成所有操作,因此:"Dim i As Integer,j as Integer,k As Integer" (4认同)
  • 是的.这是一个不好的做法.在中型/大型项目中,您可以在没有Option Explicit的情况下进入深水区. (3认同)
  • @Carlos Dim i,j,k As Integer ... logicamente (2认同)

Bra*_*adC 6

它工作正常,直到它没有.

您的示例非常简单,但完全有可能提出导致问题的情况.

最好声明所有这些,这样你就不会冒险在运行时遇到歧义.

我也偏爱MikeD关于自动完成的评论.