workheet.activate未激活

时间:2010-11-11 16:50:54

标签: excel vba access-vba

下面的代码段旨在打开特定XL文件的特定工作表,并使其成为活动工作表。但是,debug.print提供了不同工作表的输出。 objws.activate不应该使活动工作表变为obj?

Dim XLApp As New Excel.Application
Dim ObjXL As Excel.Workbook
Dim ObjWS As Excel.Worksheet

Set ObjXL = XLApp.Workbooks.Open(TargetXL)
Set ObjWS = ObjXL.Worksheets(TargetWS)
ObjWS.Activate
Debug.Print ObjWS.Application.ActiveSheet.Name & "," & ObjWS.Name

2 个答案:

答案 0 :(得分:4)

您的调试行正在打印应用程序活动工作表的名称,该工作表可能是您刚刚打开的工作簿以外的工作簿中的工作表。如果首先激活该工作簿,则应用程序的活动工作表应成为该工作簿中的工作表。 即。

Dim XLApp As New Excel.Application
Dim ObjXL As Excel.Workbook
Dim ObjWS As Excel.Worksheet

Set ObjXL = XLApp.Workbooks.Open(TargetXL)
Set ObjWS = ObjXL.Worksheets(TargetWS)
ObjXL.Activate ' add this line
ObjWS.Activate
Debug.Print ObjWS.Application.ActiveSheet.Name & "," & ObjWS.Name

您可能还需要考虑是否确实需要激活工作表。如果用户在运行VBA后特别需要查看工作表,那么这是一个有效的原因。但是,如果您只需要对代码中的工作表进行操作,那么您可以通过使用ObjWS变量来引用其所有属性,而无需实际激活它。

答案 1 :(得分:0)

尝试选择Select()。