【问题标题】:VBA Excel saving the file in the folder created by Excel macroVBA Excel将文件保存在Excel宏创建的文件夹中
【发布时间】:2020-06-03 21:54:14
【问题描述】:

我想将我的文件保存在由...excel 宏创建的文件夹中。

vba excel文件夹创建过程已经介绍到这里了:

Create a folder and sub folder in Excel VBA

按照它,我已将其分配给我的情况:

 Sub Createfolder ()
     Dim fso As Object
     Dim fldrtitle As String
     Dim flrdrname As String
     Dim fldrpath As String

     Set fso = CreateObject("scripting.filesystemobject")
     fldrtitle = Worksheets("Sheet1").Range("A2").Value
     fldrname = "Pre-planning NBU " & fldrtitle
     fldrpath = "H:\ProfileV2\Desktop\Pre planning NBU\ Alex list new\" & fldrname
     If not fso.FolderExists(fldrpath) Then
         fso.Createfolder (fldrpath)
     End If
 End Sub

创建文件夹的位置。 根据previous query,我保存文件的方式如下:

Sub Save()
    Dim name As String, Custom_Name As String

    name = Worksheets("Sheet1").Range("A2").Value
    Custom_Name = ThisWorkbook.Path & "\" & "NBU " & name & " - Opportunity list.xlsx"
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=Custom_name, FileFormat:=51
End Sub

现在,我尝试将它们组合在一起,其中方式 1 是:

Sub Save()
    Call Createfolder

    Dim name As String, Custom_Name As String

    name = Worksheets("Sheet1").Range("A2").Value
    Custom_Name = ThisWorkbook.Path & Createfolder & "NBU " & name & " - Opportunity list.xlsx"
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=Custom_name, FileFormat:=51
End Sub

这里出现错误: 预期的函数或变量

我理解的,因为我无法在代码中获取外部宏。

后来我尝试了另一种方法:

 Sub Savetofolder ()
     Dim fso As Object
     Dim fldrtitle As String
     Dim flrdrname As String
     Dim fldrpath As String
     Dim name As String, Custom_Name As String

     Set fso = CreateObject("scripting.filesystemobject")
     fldrtitle = Worksheets("Sheet1").Range("A2").Value
     fldrname = "Pre-planning NBU " & fldrtitle
     fldrpath = "H:\ProfileV2\Desktop\Pre planning NBU\ Alex list new\" & fldrname
     If not fso.FolderExists(fldrpath) Then
         fso.Createfolder (fldrpath)
     End If

 'name = Worksheets("Sheet1").Range("A2").Value
     Custom_Name = ThisWorkbook.Path & Createfolder & "NBU " & fldrtitle & " - Opportunity list.xlsx"
     Application.DisplayAlerts = False
     ActiveWorkbook.SaveAs Filename:=Custom_name, FileFormat:=51
 End Sub

我关闭了name 变量,因为它与fldrtitle 相同。

结果我的文件保存在创建的文件夹旁边,如下图所示:

有没有机会将它保存在这个文件夹中?

【问题讨论】:

  • 哪行代码抛出错误?
  • 工作簿名称创建中的 Createfolder 想要成为什么?
  • fldrpath = "H:\ProfileV2\Desktop\Pre planning NBU\ Alex list new\" & fldrname 这是我的文件夹名称。一旦我使用第二种解决方案,就没有错误。在第一个解决方案中,此行引发错误:Custom_Name = ThisWorkbook.Path & Createfolder & "NBU " & name & " - Opportunity list.xlsx"
  • 就像我之前说的 & Createfolder & 没有意义... Createfolder 不是返回路径的函数。即使是这样,与ThisWorkbook.Path 一起使用也没有任何意义...当您需要构建一条看起来很奇特的路径时,请尝试Debug.Print ThisWorkbook.Path & Createfolder & "NBU " & fldrtitle & " - Opportunity list.xlsx" 看看它会返回什么。
  • 好的,最后一个代码怎么样 - 我的第二种方法?因为文件保存在我相信的文件夹旁边,所以代码中的不匹配是微不足道的。谢谢你的提示。

标签: excel vba


【解决方案1】:

认为你想要这个:

Function Createfolder() As String
  Dim fso As Object
  Dim fldrtitle As String
  Dim flrdrname As String
  Dim fldrpath As String

  Set fso = CreateObject("scripting.filesystemobject")
  fldrtitle = Worksheets("Sheet1").Range("A2").Value
  fldrname = "Pre-planning NBU " & fldrtitle
  fldrpath = "H:\ProfileV2\Desktop\Pre planning NBU\ Alex list new\" & fldrname
  If not fso.FolderExists(fldrpath) Then
      fso.Createfolder (fldrpath)
  End If

  Createfolder = fldrpath
End Function

Sub Save()

  Dim name As String, Custom_Name As String

  name = Worksheets("Sheet1").Range("A2").Value
  Custom_Name = Createfolder() & "\NBU " & name & " - Opportunity list.xlsx"
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs Filename:=Custom_name, FileFormat:=51
End Sub

编辑

分离文件夹创建并没有真正获得任何好处,这可能会更好:

Sub Save()

  Dim fso As Object
  Dim fldrtitle As String
  Dim flrdrname As String
  Dim fldrpath As String
  Dim filename As String
  Dim name As String

  'Construct folder name
  fldrtitle = Worksheets("Sheet1").Range("A2").Value
  name = Worksheets("Sheet1").Range("A2").Value 'looks like this is the same as fldrtitle, could just use same variable below
  fldrname = "Pre-planning NBU " & fldrtitle
  fldrpath = "H:\ProfileV2\Desktop\Pre planning NBU\ Alex list new\" & fldrname

  'Create folder if it doesn't exist
  Set fso = CreateObject("scripting.filesystemobject")
  If not fso.FolderExists(fldrpath) Then
      fso.Createfolder (fldrpath)
  End If

  'Construct filename and save
  filename = fldrpath & "\NBU " & name & " - Opportunity list.xlsx"
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs Filename:=filename, FileFormat:=51
End Sub

【讨论】:

  • VBA 说:检测到不明确的名称指向 Function Createfolder() 行
  • 您的Function Createfolder() 也不返回任何内容。必须是Function Createfolder() As String,或者在模块级别声明CreateFoder变量。
  • 您是否删除了旧的 Createfolder Sub?
  • 是的,朋友。现在一切似乎都很好。谢谢
猜你喜欢
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
相关资源
最近更新 更多