Ich habe eine Liste von Excel-Dateien in einer Tabelle. Ich möchte sie durchschleifen und jedem ein Arbeitsblatt-Ereignis hinzufügen. Speichern Sie es, schließen Sie es und gehen Sie zum nächsten über. Das Problem ist, dass wenn ich die Arbeitsmappe erneut öffne (manuell), der Code weg ist.Programmatisch hinzufügen Arbeitsmappe Ereignis und speichern Sie es
Innerhalb der für jede Schleife:
Set xl = Workbooks.Open(filepath)
addCode xl 'subroutine to add code
xl.Save
xl.Close SaveChanges:=False
Die AddCode Unterprogramm ist:
Sub addCode(book As Excel.Workbook)
acsh = book.ActiveSheet.CodeName
startline = book.VBProject.VBComponents(acsh).CodeModule.CreateEventProc("SelectionChange", "Worksheet") + 1
book.VBProject.VBComponents(acsh).CodeModule.InsertLines startline, codetoadd
End Sub
Wenn ich kommentieren Sie xl.Close der Code in der Arbeitsmappe und arbeitet. Ich kann die Datei manuell speichern und schließen und der Code bleibt erhalten. Ich habe einen Unterbrechungspunkt zwischen xl.save und xl.close hinzugefügt und eine Kopie der Datei gemacht. Nachdem der Code fertig ist, hat keiner die Änderungen. Ich habe versucht, xl.saveas und xl.close SaveChanges: = True. Alle haben identische Ergebnisse.
Ich benutze Excel 2013, ich habe Excel gesagt, um den Zugriff auf das VBA-Objektmodell zu vertrauen. Ich habe versucht, XLS-Dateien und XLSM-Dateien zu verwenden. Natürlich funktioniert XLSX nicht.
Es klingt wie Excel nicht erkennt, dass die Datei * schmutzig * ist, so das Speichern nicht denkt, dass es etwas zu tun? Haben Sie versucht, vor dem Speichern eine Zeile hinzuzufügen, die eine andere Eigenschaft ändert? Das könnte Excel veranlassen, die Datei als fehlerhaft zu betrachten. – ThunderFrame
Die * dirty * -Flagge ist hier: 'ThisWorkbook.Saved = False' (lesbar und beschreibbar). Aber ich glaube nicht, dass das das Problem ist. Sind die Arbeitsmappen, die Sie öffnen, ".xlsx" oder sind sie ".xlsm"? Wenn sie '.xlsx' sind, wird der gesamte VBA-Code automatisch abgeschnitten. Normalerweise wird jedoch eine Warnung angezeigt, dass der gesamte Code entfernt wird (beim Versuch, die Datei zu speichern). – Ralph
Ich habe gerade xl.saved = false vor dem Speichern hinzugefügt, das gleiche Problem. Es wurde das geänderte Dateidatum aktualisiert, also nehme ich an, dass es die ganze Zeit gespeichert hat. Ich habe xlsm und xls verwendet, ich erwarte nicht, dass xlsx funktioniert, also habe ich es nie versucht. – drew