2016-04-13 6 views
0

Ich bin auf der Suche nach einer Möglichkeit zum Erstellen eindeutiger Worsksheet-Kennung, die mindestens Name und Inhalt berücksichtigen würde. Wenn ein Worksheet-Wert geändert wird, ändert sich auch der Bezeichner. Ich habe die GetHashCode() überprüft, aber aus irgendeinem Grund ändert sich jedes Mal, wenn ich diese Methode auf dem gleichen Blatt aufrufen, immer. Irgendwelche Ideen, wie zu erstellen, die Kennung/Hash-CodeExcel VSTO Worksheet eindeutige Kennung

Excel.Worksheet sheet2 = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet; 
var hash = sheet2.GetHashCode(); 

Antwort

1

Die CodeName von einem Arbeitsblatt ist eine eindeutige Kennung. VSTO verwendet die CodeName-Eigenschaft für den internen Namen des Arbeitsblatts (wahrscheinlich Sheet1, Sheet2 usw.), wenn es ein Projekt mit Arbeitsblättern in der Arbeitsmappe erstellt.

In der VBA-Schnittstelle kann diese Eigenschaft in der VBA-IDE geändert werden - es ist der Name, der für das Klassenmodul verwendet wird, das zu jedem Arbeitsblatt gehört.

Die Eigenschaft kann zur Laufzeit nicht geändert werden, nur zur Entwurfszeit. Während die Eigenschaft die Beschriftung für das Arbeitsblatt zu reflektieren scheint (der Name, den der Benutzer sieht und in der Benutzeroberfläche ändern kann), sind die beiden nicht verknüpft.

Weitere Informationen finden Sie unter:

https://msdn.microsoft.com/en-us/library/office/ff837552.aspx?f=255&MSPPError=-2147217396

http://www.cpearson.com/excel/RenameProblems.aspx

+0

Leider Codename nicht die zweite Anforderung erfüllen, die Änderung ist, wenn etwas auf dem Blatt geändert wird. Ich endete, um den Inhalt des Blattes zu hacken. Irgendwelche Ideen, warum GetHashCode() jedes Mal ändert, wenn ich es nenne? – Jim

+0

Warum nicht CodeName als Basis verwenden und einen damit verketteten Wert inkrementieren? –

+0

Aus irgendeinem Grund, wenn eine neue Arbeitsmappe geöffnet wurde, ist CodeName leer. – Jim