2010-11-11 105 views
0

下面的代碼片段旨在打開特定XL文件的特定工作表並使其成爲活動工作表。但是,debug.print提供了不同工作表的輸出。 objws.activate不應該使活動工作表成爲對象嗎?worksheet.activate未激活

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 

回答

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變量來引用它的所有屬性,而無需實際激活它。

0

嘗試使用Select()代替。