2016-11-18 2 views
2

Ich entwickle derzeit ein Addin für MSExcel mit Visual Studio Tools für Office, VSTO. Wie auch immer, ich bin fast fertig damit, bis ich ein Problem gefunden und gefunden habe.VSTO ThisWorkbook Property

Derzeit verwendet mein C# -Code die ActiveWorkbook-Eigenschaft. Aber ich habe herausgefunden, dass, wenn eine andere Excel-Instanz geöffnet ist und diese bestimmte Instanz den Fokus erhält, mein Code auf dieser aktiven Arbeitsmappe ausgeführt wird.

Bitte beachten Sie meine Codes unter:

public void AddWorkSheet(string wsName, Excel.XlSheetVisibility visibility) 
    { 

     Excel.Workbook currentWorkBook =Globals.ThisAddIn.Application.ActiveWorkbook; 
     if (!IsSheetExists(wsName, currentWorkBook)) 
     { 
      Excel.Worksheet newWorkSheet; 
      newWorkSheet = currentWorkBook.Sheets.Add(); 
      newWorkSheet.Visible = visibility; 
      newWorkSheet.Name = wsName; 
      Marshal.ReleaseComObject(newWorkSheet); 
     } 
     Marshal.ReleaseComObject(currentWorkBook); 
    } 

Was ich will, ist herausgefunden, wie konnte ich die Arbeitsmappe auf eine bestimmte Arbeitsmappe unabhängig davon, ob sie aktiv ist oder nicht.

Antwort

-1

Wie Sie in Ihrer Frage angeben, gibt ActiveWorkbook Ihnen die Arbeitsmappe, die Sie gerade aktiv haben. Angesichts des Namens gibt es nichts unerwartetes.

Wenn Sie Blätter zu einer bestimmten Arbeitsmappe hinzufügen möchten, sollten Sie natürlich mit der festen Arbeitsmappenreferenz arbeiten. Es gibt mehrere Möglichkeiten, eine feste Arbeitsmappenreferenz zu verwenden. Am einfachsten wäre es, wenn Sie den Namen kennen, diese spezifische Arbeitsmappe mit ihrem Namen zu erhalten.

Es gibt so viele Möglichkeiten, um eine Arbeitsmappe zu verweisen, nur ein bisschen Google und Sie Beispiele wie diese:

http://www.techrepublic.com/blog/10-things/10-ways-to-reference-excel-workbooks-and-sheets-using-vba/ (es ist VBA, aber wenn Sie Schwierigkeiten haben, zu portieren, dass eine neue Frage zu C# stellen speziell auf Ihre braucht)

+0

Hallo! Danke für das Beantworten meiner Frage. Ich weiß, dass VBA die Referenzarbeitsmappe mithilfe des angegebenen Dateipfads ändern kann, wenn ich also ein neues Arbeitsblatt hinzufüge, unabhängig davon, ob es aktiv ist oder nicht. Ich habe es ganz oben im Kopf, aber ich kann nicht den richtigen Code dazu finden, wie man das bei VSTO in C# einbauen kann. Vielen Dank. :) –