【发布时间】:2017-12-20 13:19:26
【问题描述】:
VBA代码wb.Sheets(1).Cells.Select和wb.Sheets(1).Activate有什么区别?
【问题讨论】:
-
一个简单问题的丰富答案:)
VBA代码wb.Sheets(1).Cells.Select和wb.Sheets(1).Activate有什么区别?
【问题讨论】:
select 的区别在于你可以一次选择多个对象。被选中的对象也被放置在可以使用方法的 Selection 对象中。除非您选择多个对象,否则选择(例如,一个单元格)会激活该对象。
激活只是简单地使对象成为活动对象。 最好的想法是“可以选择许多单元格,但在任何给定时间只有一个可能是活动单元格。”
注意:它们都有一个共同点——它们很少被需要,而且它们通常不会做任何事情,只会减慢你的代码速度。您可以直接在对象上进行操作,而无需选择或激活它,除非需要,否则最好不要使用它们。
【讨论】:
Activate 的一个怪癖是它通常选择范围,但并非在所有情况下都选择。如果Activate 用于包含Selection 中第一个单元格的范围,则它实际上不会更改选择。例如,选择范围 A1:B1,然后尝试 ActiveSheet.Range("A1:B2).Activate 并注意选择中没有任何变化。如果您通过单击单元格 B1 并拖动到 A1 来选择范围,那么 B1 是该选择中的活动单元格。如果你仔细看,你会注意到,当你运行上面的代码行时,选择变成了单元格 A1。
这是来自MSDN的解释
你的第一个例子wb.Sheets(1).Cells.Select允许你选择多个单元格
第二个wb.Sheets(1).Activate 使工作表处于活动状态。
有很多资源可以帮助您使用 Excel VBA。
http://www.excel-vba.com/index.htm#Tutorial%20on%20Excel%20Macros
【讨论】:
第一个选择工作簿 wb 第一张工作表上的所有单元格。如果工作表未处于活动状态,它将失败。
第二个只是激活工作簿 wb 的第一张表。它不会改变该工作表上的选择或活动单元格,并且在某些情况下可能没有选定的范围或活动单元格(例如,如果工作表上有一个当前被选中的对象)。
【讨论】:
Select - “选择”单元格
Activate - “激活”一张纸(有点像说专注于一张纸)
有时您需要专门ACTIVATE 表格,以便制作SELECT
【讨论】:
我在搜索时发现了这个问题,我也有同样的问题。这是我注意到的一点:
Sub Transfer(x As Long)
Dim Rng, ID as Range
Dim i, j, n As Long
Worksheets(5).Activate
n = Worksheets(5).Range(Range("I88"), Range("I88").End(xlToRight)).Count
Worksheets(x).Select
Set Rng = Worksheets(3).UsedRange.Find("Element", LookIn:=xlValues).Offset(1, 1)
Set ElemID = Range(ElemRng.Offset(0, -1), ElemRng.Offset(0, -1).End(xlDown))
Set ElemRng = Worksheets(3).Range(ElemRng, ElemRng.End(xlToRight))
End Sub
我发现我不得不将worksheet.activate(或选择)放入,否则代码会遇到:
运行时错误:'1004' 应用程序定义或对象定义的错误
【讨论】:
Activate 通常用于 Sheets for Example。 活动表将显示在屏幕上...因此只能有一个活动表
虽然选择可以用于多个单元格,例如。 Range(A1:B3).Select 将选择多个单元格,而激活是不可能的
【讨论】: