Ho riscontrato alcuni strani capricci in Excel durante la rimozione programmatica dei moduli, quindi la reimportazione da file. Fondamentalmente, ho un modulo chiamato VersionControl che dovrebbe esportare i miei file in una cartella predefinita e reimportarli su richiesta. Questo è il codice per la reimportazione (il problema con esso è descritto di seguito):Flushing delle modifiche apportate a VBProject.VBComponents in Excel tramite VBA
Dim i As Integer
Dim ModuleName As String
Application.EnableEvents = False
With ThisWorkbook.VBProject
For i = 1 To .VBComponents.Count
If .VBComponents(i).CodeModule.CountOfLines > 0 Then
ModuleName = .VBComponents(i).CodeModule.Name
If ModuleName <> "VersionControl" Then
If PathExists(VersionControlPath & "\" & ModuleName & ".bas") Then
Call .VBComponents.Remove(.VBComponents(ModuleName))
Call .VBComponents.Import(VersionControlPath & "\" & ModuleName & ".bas")
Else
MsgBox VersionControlPath & "\" & ModuleName & ".bas" & " cannot be found. No operation will be attempted for that module."
End If
End If
End If
Next i
End With
Dopo l'esecuzione di questo, ho notato che alcuni moduli non appaiono più, mentre alcuni hanno duplicati (es mymodule e myModule1) . Mentre si passava attraverso il codice, è diventato ovvio che alcuni moduli si attardano ancora dopo la chiamata Remove
e possono essere reimportati mentre si è ancora nel progetto. A volte, questo ha avuto come risultato solo il suffisso del modulo con 1
, ma a volte avevo sia l'originale che la copia.
C'è un modo per scaricare le chiamate su Remove
e Import
in modo che si applichino? Sto pensando di chiamare una funzione Save
dopo ciascuna, se ce n'è una nell'oggetto Application, anche se questo può causare perdite se le cose vanno male durante l'importazione.
Idee?
Modifica: tag modificato synchronization
a version-control
.
+1 Clever Little modo per fare un po 'in casa il controllo di versione. Dovrei fare qualcosa di simile anch'io. –
È stato ispirato da [questa domanda] (http://stackoverflow.com/questions/131605/best-way-to-do-version-control-for-ms-excel) qui su StackOverflow - la mia versione è solo una modesta remake. – CamilB
Non ho creato nulla di simile, ma le cose che proverei sarebbero: chiamare da un'altra cartella di lavoro/addin; eseguire il backup della cartella di lavoro prima, rimuovendo tutte le operazioni contemporaneamente, salvando, importando tutto in una volta. Potresti anche scherzare con la versione COM di Code Cleaner di Rob Bovey. È possibile impostare un riferimento ad esso e accedere alle funzioni di importazione, esportazione e altre funzioni. Sarò interessato a vedere cosa scopri. –