2017-03-06 260 views
3

我在VBA中并不是很出色,我想知道是否有人可以帮助我。有我的问题。VBA SaveCopyAs带有来自变量的文件路径

我不想将工作簿另存为文件夹,但取决于用户,路径会发生变化。所以,为了解决这个问题,我创建了这个代码:

Public Function MyDocsPathS() As String 
    MyDocsPathS = Environ$("USERPROFILE") & "\" & "OneDrive\Soumission" 
End Function 

这很好。但是我不知道如何在SaveCopyAs函数中编写它。我已经试过这个和其他方式没有任何成功:(见**之间的部分)

Sub Soumission() 
    Sheets("Modèle Soumission").Visible = True 
    **ActiveWorkbook.SaveCopyAs "MyDocsPathS & \S0000x.xlsm"** 
    Sheets("Modèle Soumission").Visible = False 
    Workbooks.Open (MyDocsPathS & ("S0000x") & ".xlsm") 
End Sub 

感谢您的任何帮助!

回答

3

您的代码应该是这样的:

Public Function MyDocsPathS() As String 
    MyDocsPathS = Environ$("USERPROFILE") & "\" & "OneDrive\Soumission" 
End Function 

Sub Soumission() 
    Sheets("Modèle Soumission").Visible = True 
    ActiveWorkbook.SaveCopyAs MyDocsPathS() & "\S0000x.xlsm" 
    Sheets("Modèle Soumission").Visible = False 
    Workbooks.Open MyDocsPathS() & "\S0000x.xlsm" 
End Sub 

理论上,你可以使用MyDocsPathS() & "\S0000x.xlsm"或只是MyDocsPathS & "\S0000x.xlsm"(即没有0​​),但我认为这是很好的做法,有括号存在,使其更清晰它是一个被调用的函数,而不仅仅是一个变量。

+0

非常感谢!有用! –

+0

@ YowE3K'Function MyDocsPathS'有什么意义?它没有变化,也没有做任何特别的计算。你可以声明一个名为'MyDocsPathS'的变量,它获得'Environ $(“USERPROFILE”)&“\”和“OneDrive \ Soumission”的值' –

+1

@ShaiRado个人而言,我会在自己的代码中使用一个全局变量并在我的主代码开始时初始化它。但是有一个优点(代码可重用性方面)具有一个功能,这是OP选择去的方式。解释如何以我喜欢做的方式来做到这一点超出了OP当前问题的范围。 – YowE3K