我在excel 2013中有一个宏,它在“另存为”对话框中使用单元格C20的值自动填充文件名。但是,当名称包含诸如“ABC_12.1_2017”的句点时,“另存为”对话框中的文件名字段为空。如果我删除了句点,则会显示正确的名称。
似乎这个确切的问题已在this forum中得到解决,但我读完了解决方案,无法理解改变了什么。任何见解都将不胜感激。
Sub SaveAsNew()
'opens save as with the filename prefilled by value of c20 and hides the copy template sheet
ActiveSheet.Visible = xlSheetVeryHidden
Application.Dialogs(xlDialogSaveAs).Show Sheets("Copy Template").Range("c20")
End Sub
答案 0 :(得分:0)
<强>解释强>
存在Windows / Excel特定问题,无法获取包含句点的值并将其粘贴到活动窗口中。它适用于某些计算机,而不适用于其他计算机。
使用Chr或文本字符串尝试使用VBA在保存名称中的任何位置添加句点不起作用。
在下面的场景中,范围(“C20”)是值“Cat”,在我尝试添加句点时,它在两种情况下仍然显示为空白。
Application.Dialogs(xlDialogSaveAs).Show (Sheets("Template").Range("c20") & Chr(46) & "xlsm")
或
Application.Dialogs(xlDialogSaveAs).Show (Sheets("Template").Range("c20") & "." & "xlsm")
<强>解决方案:强>
虽然我不知道该问题的根本原因,但有一种方法可以通过使用SaveAs命令来绕过它。
ActiveWorkbook.SaveAs Filename:="C:\YOUR DIRECTORY\" & Worksheets("Copy Template").Range("C20") & ".xlsm"
这将保存工作簿而不使用.Range(“c20”)中的值打开“另存为”窗口。我使用之前的方法遇到了与您相同的问题,我可以确认这是有效的。
如果您愿意,甚至可以从“变量”或“单元格”值而不是“C:\ YOUR DIRECTORY”文本字符串中读取路径。
那会给你这个剧本:
Sub SaveAsNew()
'Saves As with the filename prefilled by value of C20 at the specified directory and hides the copy template sheet.
ActiveSheet.Visible = xlSheetVeryHidden
ActiveWorkbook.SaveAs Filename:="C:\YOUR DIRECTORY\" & Worksheets("Copy Template").Range("C20") & ".xlsm"
End Sub