2017-07-25 3 views
0

J'essaie de créer une macro qui exportera un fichier Microsoft Project dans un fichier Excel. Grâce à l'utilisation de l'enregistrement de macro, j'ai une ligne de code qui accomplit cela en utilisant l'assistant d'exportation, mais je veux que le chemin du fichier et le nom du fichier soient dynamiques afin que je puisse utiliser cette macro sur différents projets. J'ai cherché beaucoup d'autres threads et le site Web de Microsoft sans succès. Est-ce possible?VBA Dynamic Save As, Microsoft Project à Excel

Voici ce que j'ai:

sub formatAndSave() 

    FileSaveAs Name:="C:\Users\XXXXXX\SharePoint\Projects\ProjectType\HxH\myProject.xlsx",_ 
       FormatID:="MSProject.ACE", map:="myMap" 

    end sub 

Une idée que j'ai essayé était:

Active.Workbook.SaveAs FileName:=Title 

Toute aide serait très appréciée!

+0

À moins que vous ne parliez de ['FileDialog'] (https://stackoverflow.com/a/25176411/4717755) alors ce que vous voulez, c'est' Dim filePath as String' 'filePath =" C: \ Users \ xxx \ ... "' et 'Dim fileName as String'' fileName = myProject.xlsx "'. Puis 'FileSaveAs Name: = filePath & fileName'. – PeterT

+0

qui pourrait fonctionner si je peux mettre le nom de fichier à quelque chose de dynamique, quelque chose qui reconnaît le nom du fichier en cours qui est ouvert. – Peel

Répondre

1

Par souci de simplicité, supposons que pour toutes les réponses ci-dessous votre projet est situé à c:\projects\myProj.mpp

Je pense que vous êtes après la chaîne remplacer la fonction. Quelque chose comme:

Dim excelFilePath As String 
excelFilePath = Replace(ActiveProject.FullName, ".mpp", ".xlsx") 
Debug.Print excelFilePath 
'the output would be c:\projects\myProj.xlsx 

Si vous n'êtes pas familier avec la manipulation de chaînes en VB/VBA, il suffit de chercher le Web pour "manipulation de chaînes VBA". Microsoft a un article décent ici: https://msdn.microsoft.com/en-us/library/aa903372(v=vs.71).aspx

Quelques autres choses qui peuvent être à portée de main pour vous ces variables:

ActiveProject.FullName 'shows full path & name, so you'd get "c:\projects\myProj.mpp" 
ActiveProject.Path  'shows just the path, so you'd get "c:\projects\" 
ActiveProject.Name  'shows just the file name, so you'd get "myProj.mpp" 

Enfin, une mise en garde que j'ai vu est que les variables ActiveProject.FullName et ActiveProject.Name peut ou peut ne pas fournir l'extension de fichier en fonction des paramètres de votre environnement Windows local. J'ai observé que si Windows Explorer est configuré pour masquer les extensions de fichiers, ces variables retiennent également l'extension; Si Explorer est configuré pour les afficher, ils sont fournis dans les variables. Assurez-vous que votre code est robuste dans les deux cas, ou assurez-vous que vous avez le contrôle sur l'environnement dans lequel le code sera exécuté.