【问题标题】:Save excel worksheet to specific folder and filename based on same cell将excel工作表保存到基于同一单元格的特定文件夹和文件名
【发布时间】:2015-04-13 15:24:17
【问题描述】:

我正在尝试将工作表的副本保存到基于单元格 B8 的特定文件夹中,并根据单元格范围 B8 命名 .xlsx 文件。

例如,用户首先创建一个名为“test1”的新文件夹,然后将此文件夹名称/文本输入到单元格“B8”中。他/她将在完成工作表上的工作后激活宏,并将副本保存到名为“test1”的文件夹中,并将 .xlsx 文件命名为“test1”。 (所以 .xlsx 文件将被命名为“testfolder1”,存储它的文件夹也称为“test1”

我正在使用以下代码将工作表的副本保存到文件夹中。只是无法弄清楚如何将单元格 B8 包含到 SaveAs 行中。 VB 太新了,无法弄清楚。

Sub SaveForm()

 exampleForm = Range("B8").Value

Application.ScreenUpdating = False
Application.DisplayAlerts = False

ActiveSheet.Copy
With ActiveWorkbook.ActiveSheet
    .Range("42:" & Rows.Count).EntireRow.Delete xlShiftDown                      
    .Range(.Cells(1, "J"), .Cells(1, Columns.Count)).EntireColumn.Delete xlToRight   
    .Parent.SaveAs "C:\Users\JohnSmith\Desktop\ExtractedWorksheet\" &  exampleForm & ".xlsx"                 
    .Parent.Close False
End With
End Sub

感谢任何意见,希望我的最终目标是可以理解的。 -谢谢!

【问题讨论】:

  • 看来你做对了。发生什么了?你有错误吗?你的文件被保存了吗?你确定你在那里硬编码的路径存在吗?我能看到的唯一应该更改的是将FileFormat:=xlOpenXMLWorkbook 添加到您的With 部分,以确保。
  • 我没有收到错误消息。该脚本运行良好。
  • 那么您需要更具体地提出您的要求。 Just can't figure out how to include the cell B8 into the SaveAs line. 似乎是你的问题,但你说这不是问题,而且看起来不像。
  • 哎呀,误输入了。我想要它做的是将工作表保存到也在单元格 B8 中输入的文件夹中。因此它将工作表保存为 Range B8 并保存在名为 B8 的文件夹中
  • 会有一个名称与单元格 B8 匹配的现有文件夹。我希望宏使用输入到 B8 中的名称(上面的代码完成)保存工作表,并将其放置到输入到 B8 中的文件夹中。所以 C:\Users\JohnSmith\Desktop\ExtractedWorksheet\'cell B8'\'cell B8.xlsx"

标签: vba excel


【解决方案1】:

认为这就是你想要的,试试看:

Sub SaveForm()
Static Path as string
Static FileName as string

if len(Path) = 0 then
  Path = Range("B8")
  if right(Path,1) <> "\" then
    'make sure the path is "\" terminated
    Path = Path & "\"
  End if
else
  FileName = Range("B8")

  'Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  ActiveSheet.Copy   'not sure why you're doing this, but do so if it makes sense elsewhere in your code
  With ActiveWorkbook.ActiveSheet
    .Range("42:" & Rows.Count).EntireRow.Delete xlShiftDown                      
    .Range(.Cells(1, "J"), .Cells(1, Columns.Count)).EntireColumn.Delete xlToRight   
    .Parent.SaveAs "C:\Users\JohnSmith\Desktop\ExtractedWorksheet\" & Path & _
                   FileName & ".xlsx"                 
    .Parent.Close False
  End With
  Path = ""
  FileName = ""
End if
End Sub

如果您从 worksheet_OnChange 事件中调用此代码,那么当单元格 B8 更新时,它将:

  1. 检查您是否存储了Path。如果不是,假设这是Path
  2. 如果您已有Path,请假设这是FileName 并保存。

将“Application.ScreenUpdating”注释掉,直到一切正常,然后将其放回原处。这样更容易弄清楚发生了什么。

更新基于您对 OP 的最新评论:

Sub SaveForm()

  'Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  ActiveSheet.Copy   'not sure why you're doing this, but do so if it makes sense elsewhere in your code
  With ActiveWorkbook.ActiveSheet
    .Range("42:" & Rows.Count).EntireRow.Delete xlShiftDown                      
    .Range(.Cells(1, "J"), .Cells(1, Columns.Count)).EntireColumn.Delete xlToRight   
    .Parent.SaveAs "C:\Users\JohnSmith\Desktop\ExtractedWorksheet\" & _
                   Range("B8")  & "\" & FileName & ".xlsx"                 
    .Parent.Close False
  End With
  Path = ""
  FileName = ""
End Sub

【讨论】:

  • 谢谢!你提供的正是我所需要的。
  • 不客气。请注意,如果有人在B8 中输入“名称\”(带有斜杠),这会以各种方式破坏您的代码。可能想先检查一下。
【解决方案2】:

这是我为我从事的一个项目创建的。

  1. 我首先命名了一个单元格(通过Excel用户界面-公式-名称 经理定义名称)并将其命名为 prform_prnumber。
  2. 我将其中的值传递给 vba 中的变体变量,并将其命名为 prnumber。
  3. 然后我在 exporttopdf 方法中使用该变量作为名称。
  4. 我将路径保留为工作簿的路径。

此代码将在活动工作表中运行(单击按钮后):

Sub exporttopdf()

Dim prnumber As Variant
Set prnumber = ActiveWorkbook.Names("prform_prnumber").RefersToRange

ActiveSheet.ExportAsFixedFormat xlTypePDF, ActiveWorkbook.Path & "/" & filesavename & ".pdf", , , False

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2015-04-21
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多