我正在研究这个简单的宏,但我不明白为什么ws在使用For Each ... Next循环之前没有必要设置用对象引用命名的对象变量.我的逻辑是:
Dim ws As worksheet只需创建内存空间来保存worksheet对象引用.所以到目前为止我担心的是,它是一个空的对象变量.它还没有对象引用.仅指定了其"数据类型".
所以当我们ws在行中引用时For each ws In ActiveWorkbook.Worksheets,是不是ws变量在技术上是空的???? 我们不应该有一些行,ws = ActiveSheet以便变量实际上包含对工作表的对象引用?如此迷茫.
Sub FormatFormulas()
Dim ws As worksheet
On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
With ws.Cells.SpecialCells(xlCellTypeFormulas)
.NumberFormat = ”#,##0”
.Interior.ColorIndex = 36
.Font.Bold = True
End With
Next ws
End Sub
Run Code Online (Sandbox Code Playgroud) 宏记录器生成以下语句:
Cells.Select
Run Code Online (Sandbox Code Playgroud)
现在我明白,如果没有对象限定符,这将返回所有单元格作为Range对象.
但是,我想知道这个陈述的完全限定版本是什么?
是吗:
Application.Cells.Select Application.ActiveSheet.Cells Application.ActiveWorkbook.ActiveSheet.Cells换句话说,VBE在运行时实际执行了哪一个完全限定的语句Cells.Select?
所有这些之间的区别是什么?因为所有这些最终都访问了同一个对象 - 如果我想明确限定所有对象,那么我会使用哪个语句来个人偏好?
非常感谢!
我找不到任何关于此的信息:
我正在初始化一个变量,当我输入一个科学记数法的数字,如8.45673E11,但它将它转换为标准形式,最后用复合符号845673000000# - 我想知道这是否应该发生?是否有控制此自动转换的设置?复合符号表示什么?
非常感谢!羊毛
我明白:
Range.Item 返回一个Range对象,该对象表示偏移到指定范围的范围.
Range.Cells 返回一个Range对象,该对象表示指定范围内的单元格.
但是,当我读到"Item是Range对象的默认属性"时,会出现混淆.
这让我想问:
是Range("A1:D5").Cells(1,1)真正的简化版本
Range("A1:D5").Cells.Item(1,1)?
为什么不在Range("A1:D5").Item(1,1)任何情况下使用?
为什么VBA程序员似乎使用该Cells属性来引用范围而不是Item属性?仅仅省略Item默认属性是"最佳实践" Cells吗?