多个实例打开时更改ActiveWorkbook

我打开一个Excel文件,如果它不符合某些条件,我然后创build一个新的工作簿。 我遇到的问题是,当创build新的工作簿时,它不是默认设置为activeworkbook工作簿,所以当我尝试使用activeworkbook.saveas() ,会保存第一个工作簿,但数据不准确。

这是我用来创build新的工作簿:

 Excel.Workbook newWorkbook = this.Application.Workbooks.Add(); 

有人可以告诉我如何在Excel中打开多个工作簿时更改activeworkbook?

顺便说一句,这是Excel 2007我正在与。

将工作表复制到新的工作簿

 ws = wb.Sheets["Mitchell"]; ((Excel.Worksheet)ws).Copy(); 

configuration详情:

  • 代码是使用Visual Studio 2010 Professional在vb.net中编写的

  • 所有示例代码都放在了。的ThisAddIn_Startup事件处理程序中
    Excel 2010的应用程序级别加载项

  • 在项目引用中(右键单击项目>属性>
    引用)确保在Excel = Microsoft.Office.Interop.Excel旁边有一个检查


当多个工作表打开时,我使用For Each循环访问集合并查看名称…

  For Each wrkbk As Excel.Workbook In Me.Application.Workbooks MsgBox(wrkbk.Name) Next 

将其与Select Case结合起来,这可以让您在任何打开的工作簿中获得。

  For Each wrkbk As Excel.Workbook In Me.Application.Workbooks Select Case wrkbk.Name Case "Book1" wrkbk.Activate() Case "Book2" Case Else End Select Next 

现在,把它们连在一起,你可以这样做:

  1. 创build一个名为CustomWorkbook.xlsx的新工作簿
  2. 激活Book1 ,复制Sheet1 ,并将其粘贴到CustomWorkbook.xlsx(将工作表重命名为CopiedWorksheet
  3. 激活CustomWorkbook.xlxs

     //Hide alerts so no prompts display when using SaveAs to rename new workbook Me.Application.DisplayAlerts = False //Programatically create a new workbook Dim myWrkbk As Excel.Workbook myWrkbk = Me.Application.Workbooks.Add() //Name new workbook myWrkbk.SaveAs("CustomWorkbook") //Set Book1 as the active workbook (so can copy sheet) Application.Workbooks("Book1").Activate() //Create a new worksheet variable Dim sourceWrksht As Excel.Worksheet sourceWrksht = Application.Worksheets("Sheet1") sourceWrksht.Range("A1").Value = "Text in a Cell" //Select Sheet1 and copy into CustomWorkbook and paste as first sheet sourceWrksht.Select() sourceWrksht.Copy(Before:=Application.Workbooks("CustomWorkbook.xlsx").Sheets(1)) //Rename copied worksheet Dim destinationWrksht As Excel.Worksheet destinationWrksht = Application.Workbooks("CustomWorkbook.xlsx").Sheets(1) destinationWrksht.Name = "CopiedWorksheet" //Loop through all open workbooks in Excel Application For Each wrkbk As Excel.Workbook In Me.Application.Workbooks Select Case wrkbk.Name Case "CustomWorkbook.xlsx" wrkbk.Activate() Case "Book1" Case Else End Select Next //Set Excel to show alerts again Me.Application.DisplayAlerts = True 

只需在要显示的工作簿上调用Activate()方法即可。

当你创build一个新的工作簿,你可以使用这个:

 Excel.Wokrbook oldWorkbook = this.Application.ActiveWorkbook; Excel.Workbook newWorkbook = this.Application.Workbooks.Add(); oldWorkbook.Activate(); 

过了一段时间:

 newWorkbook.Activate(); 

请参阅MSDN上的文档 。

除:

工作簿集合的激活方法激活Microsoft Office Excel工作簿并select工作簿中的第一个工作表。

编辑:

这适用于我:

 Excel.Workbook oldWorkbook = this.Application.ActiveWorkbook; this.Application.ActiveWorkbook.Sheets["name"].Copy(); Excel.Workbook newWorkbook = this.Application.ActiveWorkbook; 

旧= Book1

new = Book2