2 Stimmen

Wie lösche ich VB-Code aus einem Excel-Blatt mit C#?

Kennt jemand einen Weg, um mit C# den gesamten VB-Code aus einer Excel-Arbeitsmappe zu löschen? Dieser Code funktioniert nicht. Er entfernt das erste (letzte) VBComponent, löst aber eine ArgumentException beim zweiten aus.

VBProject projekt = arbeitsmappe.VBProject;
int komponentenAnzahl = projekt.VBComponents.Count;

for (int i = komponentenAnzahl; i >= 1; i--)
{
    VBComponent komponente = projekt.VBComponents.Item(i);
    projekt.VBComponents.Remove(komponente);
} 

Irgendwelche Vorschläge?

0 Stimmen

Im VBA müssen Elemente in Sammlungen von der Zählung bis 1 Schritt-1 entfernt werden.

5voto

Bashir Magomedov Punkte 2811

Ich habe es mit Sams Hilfe gelöst. Ich vermute, dass jedes Excel-Arbeitsbuch einige nicht löschbare VB-Komponenten hat, daher können wir anstatt sie zu löschen ihren Inhalt löschen. Es funktioniert jetzt. Danke Sam.

VBProject project = workbook.VBProject;

for (int i = project.VBComponents.Count; i >= 1; i--)
{
    VBComponent component = project.VBComponents.Item(i);
    try
    {
        project.VBComponents.Remove(component);
    }
    catch(ArgumentException)
    {
        continue;
    }
}

for (int i = project.VBComponents.Count; i >= 1; i--)
{
    VBComponent component = project.VBComponents.Item(i);
        component.CodeModule.DeleteLines(1, component.CodeModule.CountOfLines);
}

Vergessen Sie nicht, Ihr Arbeitsbuch danach zu speichern

2voto

Sam Holder Punkte 31723

Hast du versucht, das erste n-mal zu löschen:

VBProject-Projekt = Arbeitsmappe.VBProjekt;
int componentsCount = project.VBComponents.Count;

for (int i = 1; i <= componentsCount; i++)
{
    VBComponent-Komponente = project.VBComponents.Item(1);
    project.VBComponents.Remove(component);
}

Du musst dies vielleicht anpassen, aber ich glaube, die VBA-Sammlungen sind 1-basiert (möglicherweise müssen Sie das project.VBComponents.Item(0) stattdessen machen).

BEARBEITEN:

Ich habe diesen Beitrag gefunden, der erklärt, wie man es in VBA macht, aber wahrscheinlich ist es nicht zu schwierig zu übersetzen...

0 Stimmen

Ja, ich habe es versucht. Ja, VB verwendet 1-basierte Sammlungen, daher funktioniert Ihr Code gut, wenn Sie Remove nicht aufrufen. Aber ich bekomme immer noch ein ArgumentExcecption. Ich kann das 4. Element in der Sammlung löschen, aber nicht die anderen. Ich vermute, dass die ersten 3 VB-Komponenten eingebettet sind (wie die ersten drei Arbeitsblätter in einer Arbeitsmappe) und nicht entfernt werden können ... vielleicht sollte ich ihren Inhalt löschen, anstatt sie zu entfernen. Lass es mich versuchen :)

1 Stimmen

Was sieht die Code-Datei aus? Hat es 4 'Dinge' darin oder nur eins? Wie sieht es aus, nachdem du alles entfernt hast, was du kannst, ist es leer? (vielleicht in einem try catch Block, damit du Fehler ignorieren kannst, während du experimentierst)

0 Stimmen

Ich habe meine Antwort bearbeitet, um einige Informationen hinzuzufügen, die auf einer anderen Seite gefunden wurden und möglicherweise nützlich sein könnten ... Es scheint, dass sie On Error Resume Next verwenden, daher vermute ich, dass einige Elemente nicht löschbar sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X