Feuillet d'appel à partir d'un livre de travail

J'essaie d'appeler la 5ème feuille dans un classur ouvert. Lorsque je ouvre le cahier du programme, je semble pouvoir le faire:

Dim CurrentRun As New Excel.Application Dim CurrentBook As Excel.Workbook Dim CurrentSheet As Excel.Worksheet Private Sub GeneralButtonOpener_Click(sender As Object, e As EventArgs) Handles GeneralButtonOpener.Click CurrentRun.Visible = True CurrentBook = CurrentRun.Workbooks.Add(MainTemplatePath) CurrentSheet = CurrentBook.Worksheets(4) CurrentSheet.Activate() End Sub 

Mais toutes mes tentatives d'appel de la feuille si le file est déjà ouvert ont échoué:

  Dim CurrentRun As Microsoft.Office.Interop.Excel.Application Dim CurrentBook As Microsoft.Office.Interop.Excel.Workbook Dim CurrentSheet As Microsoft.Office.Interop.Excel.Worksheet CurrentRun = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") CurrentBook = CurrentRun.Workbooks CurrentSheet = CurrentBook.Sheets(4) CurrentSheet.Activate() 

ou

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim CurrentRun As Microsoft.Office.Interop.Excel.Application Dim CurrentBook As Excel.Workbook Dim CurrentSheet As Excel.Worksheet CurrentRun = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") CurrentBook = CurrentRun.ActiveWorkbook CurrentSheet = CurrentBook.Sheets(4) CurrentSheet.Activate() End Sub 

J'ai examiné plusieurs exemples, mais je ne peux pas comprendre où je vais en panne. Ce qui me surprend car il semble y avoir beaucoup de questions sur le sujet. Il serait apprécié d'avoir un pointeur vers l'endroit où il est résolu / abordé ou ce que je fais spécifiquement mal.

Merci!

À ma grande surprise, j'ai constaté que j'avais en fait des dizaines d'exemples d'Excel en arrière-plan. Lorsque je débogue et lance le COM, la première instance d'Excel est lancée. La seconde est lancée lorsque j'ouvre la forme Windows (la partie principale du complément).

Ce que je ne savais pas, c'est que lorsqu'une exception a été lancée, et j'arrête les choses dans Visual Studio, seule la première instance d'Excel a été fermée. J'ai un code qui essaie et nettoie les applications ouvertes d'Excel, mais bien sûr, il n'a pas été atteint parce qu'une exception a été lancée.

Et là, j'avais pensé que je mettrais un problème de gestion des erreurs un peu plus tard lorsque j'avais des choses un peu plus développées. De toute évidence, je dois aborder certaines manipulations d'erreur de base beaucoup plus tôt dans mon process de construction. Je suis entièrement autodidacte, et je l'ai fait quelque trois ans sans que ce soit un problème.

J'espère que quelqu'un d'autre qui n'a pas été enseigné peut voir cela avant de tirer les cheveux pendant 14 heures.

Solution Fermer toutes les autres instances d'Excel et le code ci-dessus fonctionne. Nettoyage de l'adresse dans le error handling et plus tôt, comme indiqué ici: http://support.microsoft.com/kb/317109 Peut-être aussi appeler le GC, mais cela semble controversé.

Code final:

 .... Imports System.Runtime.InteropServices .... Dim CurrentRun As New Excel.Application Dim CurrentBook As Excel.Workbook Dim CurrentSheet As Excel.Worksheet .... Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click On Error GoTo VortexInYourSoul CurrentRun = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") CurrentBook = CurrentRun.Workbooks(1) CurrentRun.Visible = True CurrentSheet = CurrentBook.Sheets(8) CurrentSheet.Activate() CurrentBook.ActiveSheet.name = "LLAMA LALA LLAMALMALMAL" .... Exit Sub VortexInYourSoul: CurrentSheet = Nothing CurrentBook.Close(False) CurrentBook = Nothing CurrentRun.Quit() CurrentRun = Nothing MsgBox("Error: " & Err.Description) End Sub