工作表和工作表之间的区别工作表obj

时间:2015-09-03 08:00:07

标签: excel vba excel-vba

我正在努力理解worksheets& Excel VBA中的worksheet obj。我从MSDN参考资料中了解到,worksheetworksheets&的儿童对象。 sheets

但是,我们使用worksheets obj而不是worksheet obj引用每个工作表。 e.g。

worksheets("ExcelIsCool").range("a1").value -> CORRECT
worksheet ("ExcelIsCool").range("a1").value -> INCORRECT

我的问题是两者之间的区别是什么?

worksheet仅用于声明变量(到目前为止我唯一使用过的地方)。 e.g。

dim wks as worksheet 

3 个答案:

答案 0 :(得分:8)

就像@Orphid已经说过的那样,WorksheetsWorksheetWorksheet个对象。

声明Dim ws As Worksheet Set ws = Worksheets("Sheet1") 变量时,您可以明确声明它。

Worksheet

因此,您要从Collection的{​​{1}}声明Worksheets

您还可以遍历Worksheet内的每个Collection

Dim ws As Worksheet

For Each ws In Worksheets
    Debug.Print ws.Name
Next ws

因此,您可以看到Worksheet用于您明确引用单个Worksheet的情况,主要是在声明变量时。

答案 1 :(得分:4)

Worksheets是Worksheet对象的集合。 A"工作簿"有一个或多个"工作表" - 集合,而集合中的特定对象是"工作表"。

在您的示例中,您尝试按名称从集合中选择工作表,但由于一个工作表本身不是工作表集合,因此它不起作用。当您执行ThisWorkbook.Worksheets(" MyWorksheetName")时,返回的值是工作表对象,因此您可以按照描述的方式与其进行交互。

编辑:用例

好吧,如果你想要明确表示你正在使用工作表,当你希望保持你的职能清除多重责任,以及你希望良好的智能感知支持检查{{1}时,请使用Worksheet }的成员。因此,如果您将工作表作为某个函数的参数(例如,从给定列的底部查找最后一行数据的函数),您的函数签名可能如下所示:

Worksheet

这很好,因为它意味着你要传递你想要引用的实际对象,而不是字符串或数字)(它的名称或索引)。这也意味着被调用函数(GetLastRow)不需要知道工作表所在的工作簿(Public Function GetLastRow(ByRef wsTarget as Excel.Worksheet, ByVal column as Long) as Long GetLastRow = wsTarget.Cells(wsTarget.Rows.Count, column).End(xlUp).Row End Function ActiveWorkbook并不总是相同)。这使得调用者有责任找到工作表并确保您获得正确的工作表,从而保持功能清洁。用户可以使用工作表的变量名称(在其中一个VBA编辑器面板中显示)来调用它:

ThisWorkbook

或其他任何引用工作表的方式(请参阅this)。

只要您想谈论一个工作表,就可以使用Worksheet对象。将变量明确声明为Worksheet对象将为您提供适合使用工作表的intellisense选项。对于读者来说,您正在使用工作表,而不是字符串。

答案 2 :(得分:0)

在您的情况下,差异纯粹是语法上的,但区分实际对象和程序化“对象”很重要。例如,您可以使用以下两种方法:

工作表集合:

Worksheets("Sheet1").Range("A1").Value = "1"

工作表“对象”:

Dim wks As Worksheet
Set wks = Worksheets("Sheet1")
wks.Range("A1").Value = "1"

除了易用性和有时更好的可读性之外,没有任何有意义的差异 - 它们都引用了实际对象,即“Sheet1”。在Excel术语中,wks通常也被称为对象,但重要的是要记住,wks 表示一个对象,它本身不是一个对象。

您可以使用wks执行的所有操作,也可以使用工作表(“Sheet1”) - 这只是引用相关工作表的两种不同方式。事实上,在这个特定的例子中,“对象”(如wks)实际上等同于“别名”。