创建宏以使用某些单元格中预定义的信息命名Excel文件

时间:2018-11-22 15:11:34

标签: excel vba

我在这里也遇到过类似的问题,我在多个博客中进行了研究,但仍然找不到解决方案。我正在尝试根据某些单元格自动为文件创建名称。

因此,我创建了一个旨在执行以下操作的宏:

  1. 将所有要保存的信息复制/粘贴为值(这是因为某些单元格基于动态公式,例如NOW());

  2. “另存为”文件,尝试使用在文件的一个特定单元格中定义的信息。

我的宏看起来像这样:

Sub SaveMyWorkbook()
  Cells.Select
  Selection.Copy
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Sheets("Parameters").Select
  Cells.Select
  Application.CutCopyMode = False
  Selection.Copy
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Sheets("Demande d'Achat").Select
  Range("S3:U3").Select
  Application.CutCopyMode = False

  Dim strPath As String
  Dim strFolderPath As String

    strFolderPath = "\\camo106\remote\Achat_Purchasing\Demande d'achat_Purchase request\2019\"
    strPath = strFolderPath & _
      Parameters.Range("D1").Value & ".xlsm"

   ActiveWorkbook.SaveAs Filename:=strPath, 
   FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

但是,当我调试时,在尝试创建名称的行中总是存在一个问题:

strPath = strFolderPath & _ Parameters.Range("D1").Value & ".xlsm"

有人可以帮助我吗?我根本不是宏的高级用户,我想这离我的知识还很远。

我正在使用Excel 2010。

2 个答案:

答案 0 :(得分:0)

保存之前文件名看起来如何?如果在文件名中使用诸如NOW()之类的公式,则可能包含禁止的字符。您可以在尝试保存文件之前逐步浏览代码,然后在立即窗口中对其进行检查。

答案 1 :(得分:0)

经过一些研究,并感谢大家的评论,我终于使宏起作用了。一些建议:

  1. 用于“构建”文件名的参考单元必须在活动工作表中;我发现在文件中创建公式并仅在宏中引用一个单元格之后,比在宏本身中引用公式更容易,但是两种方法都应该起作用,同时引用位于活动表中。
  2. 如果文件中包含动态计算的单元格,请在保存文件之前复制粘贴值(我做了一个独立的宏,但是如果有人需要,我也将其复制为值);
  3. 请谨慎使用命令SaveAs中的FileFormat属性;在阅读了几篇博客之后,我宁愿使用数字代码而不是描述代码,但是同样,两种方法都应该起作用。

在这里查看我的宏的超简单最终代码(Excel 2010):

Sub Save()
  CopyValues
    'Sub CopyValues()
      'ActiveSheet.Unprotect
      'Columns("A:U").Select
      'Selection.Copy
      'Application.CutCopyMode = False
      'Selection.Locked = True
      'Selection.FormulaHidden = True
      'Columns("A:U").Select
      'Selection.Copy
      'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      ':=False, Transpose:=False
      'Application.CutCopyMode = False
      'Range("G7").Select
      'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    'End Sub

  Dim strPath As String
  Dim strFolderPath As String

    strFolderPath = "\\camo106\remote\Achat_Purchasing\Demande d'achat_Purchase request\2019\"
    strPath = strFolderPath & _
      Range("A1").Value & ".xlsm"

    ActiveWorkbook.SaveAs Filename:=strPath, FileFormat:=52, ReadOnlyRecommended:=True, CreateBackup:=False
    GoToMainSheet
     'Sub GoToMainSheet()
       'Sheets("Demande d'Achat").Select
       'Range("S2").Select
     'End Sub

End Sub

我希望对其他人有用。