2017-08-17 1 views
0

J'écris (VBA) un fichier .xltm dans Excel 2013. L'utilisateur de ce fichier va créer une instance de ce fichier, et devrait être capable d'enregistrer une copie de cette instance dans un référentiel prédéterminé par moi-même.Excel 2013: Acquisition du répertoire d'un fichier de modèle .xltm dans l'une de ses instances

Pour cela, j'utiliser

RepoPath = WORKDIR & "\SETUP_REPOSITORY\" & ProjectName 
ActiveWorkbook.SaveAs RepoPath & "\" & NewFileName 

dans lequel le WORKDIR est le répertoire contenant le modèle. Ce dossier se trouve sur un disque partagé, et j'obtenir sa valeur à travers un sous-programme:

Sub SetDefaults() 
    WORKDIR = ActiveWorkbook.Path 
End Sub 

Celui-ci est appelé à l'ouverture du classeur dans le sous-programme Workbook_Open() dans l'objet ThisWorkbook.

Private Sub Workbook_Open() 
    Module1.SetDefaults 
End Sub 

Maintenant, cela fonctionne très bien quand je suis en train d'enregistrer une copie du fichier à partir du modèle, mais quand je crée une nouvelle instance du modèle (« template1 »), la variable WORKDIR est pas correctement initialisé, et je ne suis plus dirigé vers le bon dossier.

Donc je me demandais s'il y avait une autre façon de passer le chemin vers le modèle Excel à des instances de celui-ci?

Je ne peux pas simplement utiliser un chemin absolu puisqu'il est sur un lecteur partagé, et je suis un peu perdu pour des idées en ce moment (bien que je sois heureux d'admettre que je suis assez nouveau à VBA).

Toute aide et suggestions sont les bienvenus!

Merci d'avance.

Répondre

0

Malheureusement, une copie dérivée d'un modèle a toujours une chaîne vide comme propriété de chemin, car il s'agit d'une copie non enregistrée d'un fichier. Un moyen de contourner cela est d'arrêter d'utiliser le type de fichier template, mais d'utiliser un fichier Excel "normal" que vous avez défini en lecture seule. Ensuite, votre code d'ouverture de fichier peut en quelque sorte détecter s'il s'agit ou non du fichier "original" en cours d'ouverture et si c'est le cas, lisez le chemin et effectuez l'enregistrement.

+0

Aah, merci pour la réponse, qui fait sens. Je crains cependant que la solution de contournement est impossible pour moi. L'utilisateur doit entrer des données avant d'enregistrer le fichier, donc en lecture seule ne fonctionnera pas. Peut-être Étirez-vous, mais savez-vous tout autre sens? – user3520462

+0

Si vous définissez le fichier en lecture seule par ses propriétés Windows, tout ce que vous empêchez est l'utilisateur d'enregistrer le fichier en utilisant le même nom et l'emplacement. Ils peuvent toujours enregistrer - comme n'importe où ailleurs ou utiliser un autre nom de fichier. – jkpieterse